Mercurial > pidgin.yaz
annotate finch/plugins/gntclipboard.c @ 31401:27c56e6b5fa6
Our certificate code is generally designed around no two CA
certificates having the same DN. Unfortunately this breaks when have
multiple distinct intermediate certificates with the same DN, such as
when we want to validate against MSN intermediate CAs. This change
allows us to verify against any one of multiple CA certificates with
the same DN, instead of relying on a) luck from reading from disk in
the "right" order or b) black magic from NSS reconstructing a valid
chain on connection attempts after CA pool initialization is complete.
author | Stu Tomlinson <stu@nosnilmot.com> |
---|---|
date | Tue, 23 Nov 2010 01:56:12 +0000 |
parents | ea62e934c80b |
children |
rev | line source |
---|---|
15818 | 1 /** |
2 * @file gntclipboard.c | |
3 * | |
4 * Copyright (C) 2007 Richard Nelson <wabz@whatsbeef.net> | |
5 * | |
6 * This program is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
11 * This program is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License | |
17 * along with this program; if not, write to the Free Software | |
19680
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19575
diff
changeset
|
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
15818 | 19 */ |
20 | |
21 | |
22 #include "internal.h" | |
23 #include <glib.h> | |
24 | |
25124
ea62e934c80b
Fix some more mis-identified plugins, like 3b3526a0...
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
21030
diff
changeset
|
25 #define PLUGIN_STATIC_NAME GntClipboard |
15818 | 26 |
27 #ifdef HAVE_X11 | |
28 #include <X11/Xlib.h> | |
29 #include <X11/Xutil.h> | |
30 #include <X11/Xatom.h> | |
31 #endif | |
32 | |
33 #include <sys/types.h> | |
34 #include <signal.h> | |
35 | |
36 #include <glib.h> | |
37 | |
38 #include <plugin.h> | |
39 #include <version.h> | |
40 #include <debug.h> | |
19575
87e9d418cbf6
Show a helpful error message when the plugin fails to load.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16677
diff
changeset
|
41 #include <notify.h> |
15818 | 42 #include <gntwm.h> |
43 | |
44 #include <gntplugin.h> | |
45 | |
19575
87e9d418cbf6
Show a helpful error message when the plugin fails to load.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16677
diff
changeset
|
46 #ifdef HAVE_X11 |
15818 | 47 static pid_t child = 0; |
48 | |
49 static gulong sig_handle; | |
50 | |
51 static void | |
52 set_clip(gchar *string) | |
53 { | |
54 Window w; | |
55 XEvent e, respond; | |
56 XSelectionRequestEvent *req; | |
57 const char *ids; | |
58 Display *dpy = XOpenDisplay(NULL); | |
59 | |
60 if (!dpy) | |
61 return; | |
62 ids = getenv("WINDOWID"); | |
63 if (ids == NULL) | |
64 return; | |
65 w = atoi(ids); | |
66 XSetSelectionOwner(dpy, XA_PRIMARY, w, CurrentTime); | |
67 XFlush(dpy); | |
68 XSelectInput(dpy, w, StructureNotifyMask); | |
69 while (TRUE) { | |
70 XNextEvent(dpy, &e); /* this blocks. */ | |
71 req = &e.xselectionrequest; | |
72 if (e.type == SelectionRequest) { | |
73 XChangeProperty(dpy, | |
74 req->requestor, | |
75 req->property, | |
76 XA_STRING, | |
77 8, PropModeReplace, | |
78 (unsigned char *)string, | |
79 strlen(string)); | |
80 respond.xselection.property = req->property; | |
81 respond.xselection.type = SelectionNotify; | |
82 respond.xselection.display = req->display; | |
83 respond.xselection.requestor = req->requestor; | |
84 respond.xselection.selection = req->selection; | |
85 respond.xselection.target= req->target; | |
86 respond.xselection.time = req->time; | |
87 XSendEvent(dpy, req->requestor, 0, 0, &respond); | |
88 XFlush (dpy); | |
89 } else if (e.type == SelectionClear) { | |
90 return; | |
91 } | |
92 } | |
93 return; | |
94 } | |
95 | |
96 static void | |
97 clipboard_changed(GntWM *wm, gchar *string) | |
98 { | |
99 if (child) { | |
100 kill(child, SIGTERM); | |
101 } | |
102 if ((child = fork() == 0)) { | |
103 set_clip(string); | |
104 _exit(0); | |
105 } | |
19575
87e9d418cbf6
Show a helpful error message when the plugin fails to load.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16677
diff
changeset
|
106 } |
15818 | 107 #endif |
108 | |
109 static gboolean | |
15823 | 110 plugin_load(PurplePlugin *plugin) |
15818 | 111 { |
15893
886025ef7daa
Build gntclipboard plugin by default. If we don't want this, at least
Stu Tomlinson <stu@nosnilmot.com>
parents:
15864
diff
changeset
|
112 #ifdef HAVE_X11 |
15818 | 113 if (!XOpenDisplay(NULL)) { |
15823 | 114 purple_debug_warning("gntclipboard", "Couldn't find X display\n"); |
19575
87e9d418cbf6
Show a helpful error message when the plugin fails to load.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16677
diff
changeset
|
115 purple_notify_error(NULL, _("Error"), _("Error loading the plugin."), |
87e9d418cbf6
Show a helpful error message when the plugin fails to load.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16677
diff
changeset
|
116 _("Couldn't find X display")); |
15818 | 117 return FALSE; |
118 } | |
119 if (!getenv("WINDOWID")) { | |
15823 | 120 purple_debug_warning("gntclipboard", "Couldn't find window\n"); |
19575
87e9d418cbf6
Show a helpful error message when the plugin fails to load.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16677
diff
changeset
|
121 purple_notify_error(NULL, _("Error"), _("Error loading the plugin."), |
87e9d418cbf6
Show a helpful error message when the plugin fails to load.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16677
diff
changeset
|
122 _("Couldn't find window")); |
15818 | 123 return FALSE; |
124 } | |
125 sig_handle = g_signal_connect(G_OBJECT(gnt_get_clipboard()), "clipboard_changed", G_CALLBACK(clipboard_changed), NULL); | |
126 return TRUE; | |
19575
87e9d418cbf6
Show a helpful error message when the plugin fails to load.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16677
diff
changeset
|
127 #else |
87e9d418cbf6
Show a helpful error message when the plugin fails to load.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16677
diff
changeset
|
128 purple_notify_error(NULL, _("Error"), _("Error loading the plugin."), |
87e9d418cbf6
Show a helpful error message when the plugin fails to load.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16677
diff
changeset
|
129 _("This plugin cannot be loaded because it was not built with X11 support.")); |
87e9d418cbf6
Show a helpful error message when the plugin fails to load.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16677
diff
changeset
|
130 return FALSE; |
87e9d418cbf6
Show a helpful error message when the plugin fails to load.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16677
diff
changeset
|
131 #endif |
15818 | 132 } |
133 | |
134 static gboolean | |
15823 | 135 plugin_unload(PurplePlugin *plugin) |
15818 | 136 { |
19575
87e9d418cbf6
Show a helpful error message when the plugin fails to load.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16677
diff
changeset
|
137 #ifdef HAVE_X11 |
15818 | 138 if (child) { |
139 kill(child, SIGTERM); | |
140 child = 0; | |
141 } | |
142 g_signal_handler_disconnect(G_OBJECT(gnt_get_clipboard()), sig_handle); | |
19575
87e9d418cbf6
Show a helpful error message when the plugin fails to load.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16677
diff
changeset
|
143 #endif |
15818 | 144 return TRUE; |
145 } | |
146 | |
15823 | 147 static PurplePluginInfo info = |
15818 | 148 { |
15823 | 149 PURPLE_PLUGIN_MAGIC, |
150 PURPLE_MAJOR_VERSION, | |
151 PURPLE_MINOR_VERSION, | |
152 PURPLE_PLUGIN_STANDARD, | |
153 FINCH_PLUGIN_TYPE, | |
15818 | 154 0, |
155 NULL, | |
15823 | 156 PURPLE_PRIORITY_DEFAULT, |
15818 | 157 "gntclipboard", |
158 N_("GntClipboard"), | |
21030
3cc856ca2338
Add a --with-extraversion option to ./configure so packagers can fine tune
Stu Tomlinson <stu@nosnilmot.com>
parents:
19680
diff
changeset
|
159 DISPLAY_VERSION, |
15818 | 160 N_("Clipboard plugin"), |
161 N_("When the gnt clipboard contents change, " | |
162 "the contents are made available to X, if possible."), | |
163 "Richard Nelson <wabz@whatsbeef.net>", | |
15864
4c707efebc0c
Use PURPLE_WEBSITE instead of listing the website directly (which was wrong because of the sed).
Richard Laager <rlaager@wiktel.com>
parents:
15823
diff
changeset
|
164 PURPLE_WEBSITE, |
15818 | 165 plugin_load, |
166 plugin_unload, | |
167 NULL, | |
168 NULL, | |
169 NULL, | |
170 NULL, | |
16677
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
15893
diff
changeset
|
171 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
15893
diff
changeset
|
172 |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
15893
diff
changeset
|
173 /* padding */ |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
15893
diff
changeset
|
174 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
15893
diff
changeset
|
175 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
15893
diff
changeset
|
176 NULL, |
15818 | 177 NULL |
178 }; | |
179 | |
180 static void | |
15823 | 181 init_plugin(PurplePlugin *plugin) |
15818 | 182 { |
183 } | |
184 | |
15823 | 185 PURPLE_INIT_PLUGIN(PLUGIN_STATIC_NAME, init_plugin, info) |