Mercurial > pidgin.yaz
annotate plugins/notify.c @ 10606:1a65fc2d7978
[gaim-migrate @ 12039]
So I'd intended to take care of the stuff in the comments at the top before committing this, but the window raising stuff came up again so I'll just commit and deal with the rest later.
committer: Tailor Script <tailor@pidgin.im>
author | Etan Reisner <pidgin@unreliablesource.net> |
---|---|
date | Wed, 16 Feb 2005 22:14:51 +0000 |
parents | 45ad1d15fab3 |
children | 9c4dca2deb99 |
rev | line source |
---|---|
6302 | 1 /* |
2 * Gaim buddy notification plugin. | |
3 * | |
4 * Copyright (C) 2000-2001, Eric Warmenhoven (original code) | |
5 * Copyright (C) 2002, Etan Reisner <deryni@eden.rutgers.edu> (rewritten code) | |
6 * Copyright (C) 2003, Christian Hammond (update for changed API) | |
6322 | 7 * Copyright (C) 2003, Brian Tarricone <bjt23@cornell.edu> (mostly rewritten) |
6302 | 8 * Copyright (C) 2003, Mark Doliner (minor cleanup) |
6977 | 9 * Copyright (C) 2003, Etan Reisner (largely rewritten again) |
6302 | 10 * |
11 * This program is free software; you can redistribute it and/or modify | |
12 * it under the terms of the GNU General Public License as published by | |
13 * the Free Software Foundation; either version 2 of the License, or | |
14 * (at your option) any later version. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
3374 | 20 * |
6302 | 21 * You should have received a copy of the GNU General Public License |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
24 * | |
25 */ | |
26 | |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
27 /* TODO conversations have an a_virgin member which seems to be used to detect |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
28 * when a conversation was created remotely as opposed to remotely, look at |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
29 * code for sounds on first message to see how it's used and use it to allow |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
30 * for notifying on first message I don't think this is going to work because |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
31 * the check for this in the source comes after all the conversation signals |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
32 * are fired. */ |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
33 |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
34 /* TODO |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
35 * 22:22:17 <seanegan> deryni: speaking of notify.c... you know what else |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
36 * might be a neat feature? |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
37 * 22:22:30 <seanegan> Changing the window icon. |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
38 * 22:23:25 <deryni> seanegan: To what? |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
39 * 22:23:42 <seanegan> deryni: I dunno. Flash it between the regular icon and |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
40 * blank or something. |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
41 * 22:23:53 <deryni> Also I think gaim might re-set that sort of frequently, |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
42 * but I'd have to look. |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
43 * 22:25:16 <seanegan> deryni: I keep my conversations in one workspace and am |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
44 * frequently in an another, and the icon flashing in the pager would be a |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
45 * neat visual clue. |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
46 */ |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
47 |
6302 | 48 /* |
49 * From Etan, 2002: | |
50 * -Added config dialog | |
51 * -Added control over notification method | |
52 * -Added control over when to release notification | |
53 * | |
54 * -Added option to get notification for chats also | |
55 * -Cleaned up code | |
56 * -Added option to notify on click as it's own option | |
57 * rather then as what happens when on focus isn't clicked | |
58 * -Added apply button to change the denotification methods for | |
59 * open conversation windows | |
60 * -Fixed apply to conversations, count now keeps count across applies | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
61 * -Fixed(?) memory leak, and in the process fixed some stupidities |
6302 | 62 * -Hit enter when done editing the title string entry box to save it |
3392 | 63 * |
64 * Thanks to Carles Pina i Estany <carles@pinux.info> | |
65 * for count of new messages option | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
66 * |
6302 | 67 * From Brian, 20 July 2003: |
68 * -Use new xml prefs | |
69 * -Better handling of notification states tracking | |
70 * -Better pref change handling | |
71 * -Fixed a possible memleak and possible crash (rare) | |
72 * -Use gtk_window_get_title() rather than gtkwin->title | |
73 * -Other random fixes and cleanups | |
6977 | 74 * |
9298 | 75 * Etan again, 12 August 2003: |
6977 | 76 * -Better use of the new xml prefs |
77 * -Removed all bitmask stuff | |
78 * -Even better pref change handling | |
79 * -Removed unnecessary functions | |
80 * -Reworking of notification/unnotification stuff | |
81 * -Header file include cleanup | |
82 * -General code cleanup | |
9298 | 83 * |
84 * Etan yet again, 04 April 2004: | |
85 * -Re-added Urgent option | |
86 * -Re-added unnotify on focus option (still needs work, as it will only | |
87 * react to focus-in events when the entry or history widgets are focused) | |
10492 | 88 * |
89 * Sean, 08 January, 2005: | |
90 * -Added Raise option, formally in Gaim proper | |
3392 | 91 */ |
92 | |
9791 | 93 #include "internal.h" |
94 #include "gtkgaim.h" | |
10492 | 95 #include "gtkprefs.h" |
6302 | 96 |
97 #include "prefs.h" | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
98 #include "signals.h" |
9943 | 99 #include "version.h" |
4202
59751fe608c5
[gaim-migrate @ 4438]
Christian Hammond <chipx86@chipx86.com>
parents:
4165
diff
changeset
|
100 |
6302 | 101 #include "gtkplugin.h" |
102 #include "gtkutils.h" | |
103 | |
6977 | 104 #include <X11/Xatom.h> |
3385 | 105 #include <X11/Xlib.h> |
3374 | 106 #include <X11/Xutil.h> |
107 | |
6302 | 108 #define NOTIFY_PLUGIN_ID "gtk-x11-notify" |
3710 | 109 |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
110 static GaimPlugin *my_plugin = NULL; |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
111 |
6302 | 112 /* notification set/unset */ |
6977 | 113 static int notify(GaimConversation *conv, gboolean increment); |
9298 | 114 static void notify_win(GaimConvWindow *gaimwin); |
115 static void unnotify(GaimConversation *conv, gboolean reset); | |
116 static int unnotify_cb(GtkWidget *widget, gpointer data, GaimConversation *conv); | |
6302 | 117 |
118 /* gtk widget callbacks for prefs panel */ | |
6977 | 119 static void type_toggle_cb(GtkWidget *widget, gpointer data); |
120 static void method_toggle_cb(GtkWidget *widget, gpointer data); | |
121 static void notify_toggle_cb(GtkWidget *widget, gpointer data); | |
122 static gboolean options_entry_cb(GtkWidget *widget, GdkEventFocus *event, gpointer data); | |
123 static void apply_method(); | |
124 static void apply_notify(); | |
191 | 125 |
6977 | 126 /* string function */ |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
127 static void handle_string(GaimConvWindow *gaimwin); |
6302 | 128 |
6977 | 129 /* count function */ |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
130 static void handle_count(GaimConvWindow *gaimwin); |
6302 | 131 |
6977 | 132 /* urgent function */ |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
133 static void handle_urgent(GaimConvWindow *gaimwin, gboolean add); |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
134 |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
135 /* raise function */ |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
136 static void handle_raise(GaimConvWindow *gaimwin); |
3710 | 137 |
6302 | 138 /****************************************/ |
139 /* Begin doing stuff below this line... */ | |
140 /****************************************/ | |
9298 | 141 static int |
142 count_messages(GaimConvWindow *gaimwin) | |
143 { | |
144 gint count = 0; | |
145 GList *convs = NULL; | |
146 | |
147 for (convs = gaim_conv_window_get_conversations(gaimwin); | |
148 convs != NULL; convs = convs->next) { | |
149 GaimConversation *conv = convs->data; | |
150 count += GPOINTER_TO_INT(gaim_conversation_get_data(conv, "notify-message-count")); | |
151 } | |
152 | |
153 return count; | |
154 } | |
6302 | 155 |
6977 | 156 static int |
157 notify(GaimConversation *conv, gboolean increment) | |
158 { | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
159 GaimConvWindow *gaimwin = NULL; |
6302 | 160 gint count; |
6977 | 161 gboolean has_focus; |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
162 |
6977 | 163 if (conv == NULL) |
6302 | 164 return 0; |
165 | |
6977 | 166 /* We want to remove the notifications, but not reset the counter */ |
167 unnotify(conv, FALSE); | |
168 | |
169 gaimwin = gaim_conversation_get_window(conv); | |
5021 | 170 |
6977 | 171 /* If we aren't doing notifications for this type of conversation, return */ |
172 if (((gaim_conversation_get_type(conv) == GAIM_CONV_IM) && | |
9298 | 173 !gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_im")) || |
174 ((gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) && | |
175 !gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_chat"))) | |
6977 | 176 return 0; |
4203
ec6d0c5e5c23
[gaim-migrate @ 4439]
Christian Hammond <chipx86@chipx86.com>
parents:
4202
diff
changeset
|
177 |
9298 | 178 g_object_get(G_OBJECT(GAIM_GTK_WINDOW(gaimwin)->window), |
179 "has-toplevel-focus", &has_focus, NULL); | |
3374 | 180 |
6977 | 181 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_focused") || |
9298 | 182 (has_focus && gaim_conv_window_get_active_conversation(gaimwin) != conv) || |
183 !has_focus) { | |
6977 | 184 if (increment) { |
185 count = GPOINTER_TO_INT(gaim_conversation_get_data(conv, "notify-message-count")); | |
186 count++; | |
187 gaim_conversation_set_data(conv, "notify-message-count", GINT_TO_POINTER(count)); | |
188 } | |
6302 | 189 |
9298 | 190 notify_win(gaimwin); |
6977 | 191 } |
6302 | 192 |
193 return 0; | |
194 } | |
195 | |
9298 | 196 static void |
197 notify_win(GaimConvWindow *gaimwin) | |
198 { | |
199 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_count")) | |
200 handle_count(gaimwin); | |
201 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_string")) | |
202 handle_string(gaimwin); | |
203 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_urgent")) | |
204 handle_urgent(gaimwin, TRUE); | |
10492 | 205 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_raise")) |
206 handle_raise(gaimwin); | |
9298 | 207 } |
208 | |
209 static void | |
210 unnotify(GaimConversation *conv, gboolean reset) | |
211 { | |
212 GaimConversation *active_conv = NULL; | |
213 GaimConvWindow *gaimwin = NULL; | |
214 | |
215 g_return_if_fail(conv != NULL); | |
216 | |
217 gaimwin = gaim_conversation_get_window(conv); | |
218 active_conv = gaim_conv_window_get_active_conversation(gaimwin); | |
219 | |
220 /* reset the conversation window title */ | |
221 gaim_conversation_autoset_title(active_conv); | |
222 | |
223 if (reset) { | |
224 /* Only need to actually remove the urgent hinting here, since removing it | |
225 * just to have it readded in re-notify is an unnecessary couple extra RTs | |
226 * to the server */ | |
227 handle_urgent(gaimwin, FALSE); | |
228 gaim_conversation_set_data(conv, "notify-message-count", GINT_TO_POINTER(0)); | |
229 } | |
230 | |
231 return; | |
232 } | |
233 | |
234 static int | |
235 unnotify_cb(GtkWidget *widget, gpointer data, GaimConversation *conv) | |
236 { | |
237 if (GPOINTER_TO_INT(gaim_conversation_get_data(conv, "notify-message-count")) != 0) | |
238 unnotify(conv, TRUE); | |
239 | |
240 return 0; | |
241 } | |
242 | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
243 static gboolean |
9298 | 244 im_recv_im(GaimAccount *account, char *sender, char *message, |
10104 | 245 GaimConversation *conv, int *flags) |
6977 | 246 { |
247 notify(conv, TRUE); | |
3710 | 248 |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
249 return FALSE; |
3710 | 250 } |
251 | |
9298 | 252 static gboolean |
253 chat_recv_im(GaimAccount *account, char *sender, char *message, | |
10104 | 254 GaimConversation *conv, int *flags) |
9298 | 255 { |
10345 | 256 if (gaim_conv_chat_is_user_ignored(GAIM_CONV_CHAT(conv), sender)) |
257 return FALSE; | |
258 | |
9298 | 259 notify(conv, TRUE); |
260 | |
261 return FALSE; | |
262 } | |
263 | |
6977 | 264 static void |
9298 | 265 im_sent_im(GaimAccount *account, char *receiver, const char *message) { |
266 GaimConversation *conv = NULL; | |
267 | |
268 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_send")) { | |
10246 | 269 conv = gaim_find_conversation_with_account(GAIM_CONV_IM, receiver, account); |
9298 | 270 unnotify(conv, TRUE); |
271 } | |
272 } | |
273 | |
274 static void | |
275 chat_sent_im(GaimAccount *account, const char *message, int id) | |
6977 | 276 { |
277 GaimConversation *conv = NULL; | |
278 | |
279 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_send")) { | |
280 conv = gaim_find_chat(gaim_account_get_connection(account), id); | |
281 unnotify(conv, TRUE); | |
282 } | |
3710 | 283 } |
284 | |
6977 | 285 static int |
286 attach_signals(GaimConversation *conv) | |
287 { | |
288 GaimGtkConversation *gtkconv = NULL; | |
289 GaimGtkWindow *gtkwin = NULL; | |
290 GSList *window_ids = NULL, *imhtml_ids = NULL, *entry_ids = NULL; | |
291 guint id; | |
292 | |
293 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
294 gtkwin = GAIM_GTK_WINDOW(gaim_conversation_get_window(conv)); | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
295 |
6977 | 296 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_focus")) { |
9298 | 297 GtkWidget *child = NULL; |
298 gint page_num; | |
299 | |
300 page_num = gaim_conversation_get_index(conv); | |
301 child = gtk_notebook_get_nth_page(GTK_NOTEBOOK(gtkwin->notebook), page_num); | |
302 | |
303 /* TODO should really find a way to make this work no matter where the | |
304 * focus is inside the conv window, without having to bind to | |
305 * focus-in-event on the g(d|t)kwindow */ | |
306 /* try setting the signal on the focus-in-event for | |
307 * gtkwin->notebook->container? */ | |
308 id = g_signal_connect(G_OBJECT(gtkconv->entry), "focus-in-event", | |
309 G_CALLBACK(unnotify_cb), conv); | |
310 window_ids = g_slist_append(window_ids, GUINT_TO_POINTER(id)); | |
311 | |
312 id = g_signal_connect(G_OBJECT(gtkconv->imhtml), "focus-in-event", | |
313 G_CALLBACK(unnotify_cb), conv); | |
6977 | 314 window_ids = g_slist_append(window_ids, GUINT_TO_POINTER(id)); |
315 } | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
316 |
6977 | 317 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_click")) { |
9298 | 318 /* TODO similarly should really find a way to allow for clicking in other |
319 * places of the window */ | |
320 id = g_signal_connect(G_OBJECT(gtkconv->imhtml), "button-press-event", | |
321 G_CALLBACK(unnotify_cb), conv); | |
6977 | 322 imhtml_ids = g_slist_append(imhtml_ids, GUINT_TO_POINTER(id)); |
323 | |
9298 | 324 id = g_signal_connect(G_OBJECT(gtkconv->entry), "button-press-event", |
325 G_CALLBACK(unnotify_cb), conv); | |
6977 | 326 entry_ids = g_slist_append(entry_ids, GUINT_TO_POINTER(id)); |
3374 | 327 } |
3710 | 328 |
6977 | 329 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_type")) { |
9298 | 330 id = g_signal_connect(G_OBJECT(gtkconv->entry), "key-press-event", |
331 G_CALLBACK(unnotify_cb), conv); | |
6977 | 332 entry_ids = g_slist_append(entry_ids, GUINT_TO_POINTER(id)); |
3374 | 333 } |
334 | |
6977 | 335 gaim_conversation_set_data(conv, "notify-window-signals", window_ids); |
336 gaim_conversation_set_data(conv, "notify-imhtml-signals", imhtml_ids); | |
337 gaim_conversation_set_data(conv, "notify-entry-signals", entry_ids); | |
4035 | 338 |
3428 | 339 return 0; |
191 | 340 } |
341 | |
6977 | 342 static void |
343 detach_signals(GaimConversation *conv) | |
344 { | |
345 GaimGtkConversation *gtkconv = NULL; | |
346 GaimGtkWindow *gtkwin = NULL; | |
347 GSList *ids = NULL; | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
348 |
6977 | 349 gtkconv = GAIM_GTK_CONVERSATION(conv); |
350 gtkwin = GAIM_GTK_WINDOW(gaim_conversation_get_window(conv)); | |
4203
ec6d0c5e5c23
[gaim-migrate @ 4439]
Christian Hammond <chipx86@chipx86.com>
parents:
4202
diff
changeset
|
351 |
6977 | 352 ids = gaim_conversation_get_data(conv, "notify-window-signals"); |
353 for (; ids != NULL; ids = ids->next) | |
354 g_signal_handler_disconnect(gtkwin->window, GPOINTER_TO_INT(ids->data)); | |
6302 | 355 |
6977 | 356 ids = gaim_conversation_get_data(conv, "notify-imhtml-signals"); |
357 for (; ids != NULL; ids = ids->next) | |
358 g_signal_handler_disconnect(gtkconv->imhtml, GPOINTER_TO_INT(ids->data)); | |
6302 | 359 |
6977 | 360 ids = gaim_conversation_get_data(conv, "notify-entry-signals"); |
361 for (; ids != NULL; ids = ids->next) | |
362 g_signal_handler_disconnect(gtkconv->entry, GPOINTER_TO_INT(ids->data)); | |
3710 | 363 |
9298 | 364 gaim_conversation_set_data(conv, "notify-message-count", GINT_TO_POINTER(0)); |
3710 | 365 |
6977 | 366 gaim_conversation_set_data(conv, "notify-window-signals", NULL); |
367 gaim_conversation_set_data(conv, "notify-imhtml-signals", NULL); | |
368 gaim_conversation_set_data(conv, "notify-entry-signals", NULL); | |
3710 | 369 } |
370 | |
6977 | 371 static void |
372 conv_created(GaimConversation *conv) | |
373 { | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
374 GaimConvWindow *gaimwin = NULL; |
6977 | 375 GaimGtkWindow *gtkwin = NULL; |
6302 | 376 |
6977 | 377 gaimwin = gaim_conversation_get_window(conv); |
6302 | 378 |
6977 | 379 if (gaimwin == NULL) |
6302 | 380 return; |
3374 | 381 |
6977 | 382 gtkwin = GAIM_GTK_WINDOW(gaimwin); |
383 | |
9298 | 384 gaim_conversation_set_data(conv, "notify-message-count", GINT_TO_POINTER(0)); |
6302 | 385 |
6977 | 386 /* always attach the signals, notify() will take care of conversation type |
387 * checking */ | |
388 attach_signals(conv); | |
3374 | 389 } |
390 | |
9303 | 391 #if 0 |
6977 | 392 static void |
393 conv_switched(GaimConversation *old_conv, GaimConversation *new_conv) | |
394 { | |
9298 | 395 GaimConvWindow *gaimwin = gaim_conversation_get_window(new_conv); |
6302 | 396 |
9298 | 397 printf("conv_switched - %p - %p\n", old_conv, new_conv); |
398 printf("count - %d\n", count_messages(gaimwin)); | |
399 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_switch")) | |
400 unnotify(new_conv, FALSE); | |
401 else { | |
402 /* if we don't have notification on the window then we don't want to | |
403 * re-notify it */ | |
404 if (count_messages(gaimwin)) | |
405 notify_win(gaimwin); | |
406 } | |
6977 | 407 } |
9303 | 408 #endif |
6302 | 409 |
6977 | 410 static void |
411 deleting_conv(GaimConversation *conv) | |
412 { | |
9298 | 413 GaimConvWindow *gaimwin = NULL; |
414 | |
6977 | 415 detach_signals(conv); |
3392 | 416 |
9298 | 417 unnotify(conv, TRUE); |
6977 | 418 |
9298 | 419 gaimwin = gaim_conversation_get_window(conv); |
420 if (count_messages(gaimwin)) | |
421 notify_win(gaimwin); | |
6977 | 422 } |
423 | |
9303 | 424 #if 0 |
6977 | 425 static void |
9298 | 426 conversation_drag_ended(GaimConversation *active_conv, |
427 GaimConvWindow *old_gaimwin, | |
428 GaimConvWindow *new_gaimwin) | |
6977 | 429 { |
9298 | 430 if (old_gaimwin != new_gaimwin) { |
431 if (old_gaimwin == NULL) { | |
432 /* | |
433 gaim_conversation_autoset_title(active_conv); | |
434 handle_urgent(new_gaimwin, FALSE); | |
435 */ | |
436 | |
437 if (count_messages(new_gaimwin)) | |
438 notify_win(new_gaimwin); | |
439 } else { | |
440 printf("if else count = %d\n", count_messages(new_gaimwin)); | |
441 printf("if else count = %d\n", count_messages(old_gaimwin)); | |
442 /* | |
443 GaimConversation *old_active_conv = NULL; | |
444 old_active_conv = gaim_conv_window_get_active_conversation(new_gaimwin); | |
445 | |
446 gaim_conversation_autoset_title(old_active_conv); | |
447 handle_urgent(old_gaimwin, FALSE); | |
6302 | 448 |
9298 | 449 if (count_messages(old_gaimwin)) |
450 notify_win(old_gaimwin); | |
451 | |
452 gaim_conversation_autoset_title(active_conv); | |
453 handle_urgent(new_gaimwin, FALSE); | |
454 | |
455 if (count_messages(new_gaimwin)) | |
456 notify_win(new_gaimwin); | |
457 */ | |
458 } | |
459 } else { | |
460 printf("else count = %d\n", count_messages(new_gaimwin)); | |
461 printf("else count = %d\n", count_messages(old_gaimwin)); | |
462 /* | |
463 gaim_conversation_autoset_title(active_conv); | |
464 handle_urgent(old_gaimwin, FALSE); | |
465 | |
466 if (count_messages(old_gaimwin)) | |
467 notify_win(old_gaimwin); | |
468 */ | |
469 } | |
4035 | 470 } |
9303 | 471 #endif |
4035 | 472 |
6977 | 473 static void |
9298 | 474 handle_string(GaimConvWindow *gaimwin) |
475 { | |
476 GtkWindow *window = NULL; | |
477 gchar newtitle[256]; | |
478 | |
479 g_return_if_fail(gaimwin != NULL); | |
480 | |
481 window = GTK_WINDOW(GAIM_GTK_WINDOW(gaimwin)->window); | |
482 g_return_if_fail(window != NULL); | |
483 | |
484 g_snprintf(newtitle, sizeof(newtitle), "%s%s", | |
485 gaim_prefs_get_string("/plugins/gtk/X11/notify/title_string"), | |
486 gtk_window_get_title(window)); | |
487 gtk_window_set_title(window, newtitle); | |
488 } | |
489 | |
490 static void | |
491 handle_count(GaimConvWindow *gaimwin) | |
492 { | |
493 GtkWindow *window; | |
494 char newtitle[256]; | |
495 | |
496 g_return_if_fail(gaimwin != NULL); | |
497 | |
498 window = GTK_WINDOW(GAIM_GTK_WINDOW(gaimwin)->window); | |
499 g_return_if_fail(window != NULL); | |
500 | |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
501 g_snprintf(newtitle, sizeof(newtitle), "[%d] %s", |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
502 count_messages(gaimwin), gtk_window_get_title(window)); |
9298 | 503 gtk_window_set_title(window, newtitle); |
504 } | |
505 | |
506 static void | |
507 handle_urgent(GaimConvWindow *gaimwin, gboolean add) | |
6977 | 508 { |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
509 XWMHints *hints; |
9298 | 510 GaimGtkWindow *gtkwin = GAIM_GTK_WINDOW(gaimwin); |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
511 |
9298 | 512 g_return_if_fail(gtkwin != NULL); |
513 g_return_if_fail(gtkwin->window != NULL); | |
514 g_return_if_fail(gtkwin->window->window != NULL); | |
515 | |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
516 hints = XGetWMHints(GDK_WINDOW_XDISPLAY(gtkwin->window->window), |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
517 GDK_WINDOW_XWINDOW(gtkwin->window->window)); |
6977 | 518 if (add) |
519 hints->flags |= XUrgencyHint; | |
520 else | |
521 hints->flags &= ~XUrgencyHint; | |
9298 | 522 XSetWMHints(GDK_WINDOW_XDISPLAY(gtkwin->window->window), |
523 GDK_WINDOW_XWINDOW(gtkwin->window->window), hints); | |
4218 | 524 XFree(hints); |
4035 | 525 } |
526 | |
6977 | 527 static void |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
528 handle_raise(GaimConvWindow *gaimwin) |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
529 { |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
530 gaim_conv_window_raise(gaimwin); |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
531 } |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
532 |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
533 static void |
6977 | 534 type_toggle_cb(GtkWidget *widget, gpointer data) |
535 { | |
536 gboolean on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); | |
537 gchar pref[256]; | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
538 |
6977 | 539 g_snprintf(pref, sizeof(pref), "/plugins/gtk/X11/notify/%s", (char *)data); |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
540 |
6977 | 541 gaim_prefs_set_bool(pref, on); |
3374 | 542 } |
543 | |
6977 | 544 static void |
545 method_toggle_cb(GtkWidget *widget, gpointer data) | |
546 { | |
547 gboolean on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); | |
548 gchar pref[256]; | |
549 | |
550 g_snprintf(pref, sizeof(pref), "/plugins/gtk/X11/notify/%s", (char *)data); | |
3374 | 551 |
6977 | 552 gaim_prefs_set_bool(pref, on); |
553 | |
554 if (!strcmp(data, "method_string")) { | |
555 GtkWidget *entry = g_object_get_data(G_OBJECT(widget), "title-entry"); | |
556 gtk_widget_set_sensitive(entry, on); | |
557 | |
558 gaim_prefs_set_string("/plugins/gtk/X11/notify/title_string", gtk_entry_get_text(GTK_ENTRY(entry))); | |
559 } | |
560 | |
561 apply_method(); | |
3374 | 562 } |
563 | |
6977 | 564 static void |
565 notify_toggle_cb(GtkWidget *widget, gpointer data) | |
566 { | |
567 gboolean on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); | |
568 gchar pref[256]; | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
569 |
6977 | 570 g_snprintf(pref, sizeof(pref), "/plugins/gtk/X11/notify/%s", (char *)data); |
3374 | 571 |
6977 | 572 gaim_prefs_set_bool(pref, on); |
573 | |
574 apply_notify(); | |
3374 | 575 } |
576 | |
6977 | 577 static gboolean |
578 options_entry_cb(GtkWidget *widget, GdkEventFocus *evt, gpointer data) | |
579 { | |
580 if (data == NULL) | |
6982 | 581 return FALSE; |
6302 | 582 |
6977 | 583 if (!strcmp(data, "method_string")) { |
584 gaim_prefs_set_string("/plugins/gtk/X11/notify/title_string", gtk_entry_get_text(GTK_ENTRY(widget))); | |
3374 | 585 } |
6302 | 586 |
6977 | 587 apply_method(); |
6302 | 588 |
589 return FALSE; | |
590 } | |
591 | |
6977 | 592 static void |
593 apply_method() { | |
594 GList *convs = gaim_get_conversations(); | |
9298 | 595 GaimConvWindow *gaimwin = NULL; |
6977 | 596 |
9298 | 597 for (convs = gaim_get_conversations(); convs != NULL; convs = convs->next) { |
6977 | 598 GaimConversation *conv = (GaimConversation *)convs->data; |
6302 | 599 |
6977 | 600 /* remove notifications */ |
9298 | 601 unnotify(conv, FALSE); |
602 | |
603 gaimwin = gaim_conversation_get_window(conv); | |
604 if (GPOINTER_TO_INT(gaim_conversation_get_data(conv, "notify-message-count")) != 0) | |
6977 | 605 /* reattach appropriate notifications */ |
606 notify(conv, FALSE); | |
607 } | |
3374 | 608 } |
609 | |
6977 | 610 static void |
611 apply_notify() | |
612 { | |
613 GList *convs = gaim_get_conversations(); | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
614 |
6977 | 615 while (convs) { |
616 GaimConversation *conv = (GaimConversation *)convs->data; | |
4203
ec6d0c5e5c23
[gaim-migrate @ 4439]
Christian Hammond <chipx86@chipx86.com>
parents:
4202
diff
changeset
|
617 |
6977 | 618 /* detach signals */ |
619 detach_signals(conv); | |
620 /* reattach appropriate signals */ | |
621 attach_signals(conv); | |
4035 | 622 |
6977 | 623 convs = convs->next; |
4035 | 624 } |
625 } | |
626 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
627 static GtkWidget * |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
628 get_config_frame(GaimPlugin *plugin) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
629 { |
6977 | 630 GtkWidget *ret = NULL, *frame = NULL; |
631 GtkWidget *vbox = NULL, *hbox = NULL; | |
632 GtkWidget *toggle = NULL, *entry = NULL; | |
6302 | 633 |
3565 | 634 ret = gtk_vbox_new(FALSE, 18); |
6302 | 635 gtk_container_set_border_width(GTK_CONTAINER (ret), 12); |
3392 | 636 |
6302 | 637 /*---------- "Notify For" ----------*/ |
638 frame = gaim_gtk_make_frame(ret, _("Notify For")); | |
639 vbox = gtk_vbox_new(FALSE, 5); | |
640 gtk_container_add(GTK_CONTAINER(frame), vbox); | |
641 | |
3710 | 642 toggle = gtk_check_button_new_with_mnemonic(_("_IM windows")); |
643 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
6977 | 644 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), |
9298 | 645 gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_im")); |
6977 | 646 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 647 G_CALLBACK(type_toggle_cb), "type_im"); |
3710 | 648 |
6977 | 649 toggle = gtk_check_button_new_with_mnemonic(_("C_hat windows")); |
3710 | 650 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); |
6977 | 651 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), |
9298 | 652 gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_chat")); |
6977 | 653 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 654 G_CALLBACK(type_toggle_cb), "type_chat"); |
6977 | 655 |
656 toggle = gtk_check_button_new_with_mnemonic(_("_Focused windows")); | |
657 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
658 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 659 gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_focused")); |
6977 | 660 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 661 G_CALLBACK(type_toggle_cb), "type_focused"); |
3710 | 662 |
6302 | 663 /*---------- "Notification Methods" ----------*/ |
664 frame = gaim_gtk_make_frame(ret, _("Notification Methods")); | |
665 vbox = gtk_vbox_new(FALSE, 5); | |
666 gtk_container_add(GTK_CONTAINER(frame), vbox); | |
667 | |
6977 | 668 /* String method button */ |
3565 | 669 hbox = gtk_hbox_new(FALSE, 18); |
670 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | |
6302 | 671 toggle = gtk_check_button_new_with_mnemonic(_("Prepend _string into window title:")); |
6977 | 672 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), |
9298 | 673 gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_string")); |
3565 | 674 gtk_box_pack_start(GTK_BOX(hbox), toggle, FALSE, FALSE, 0); |
6977 | 675 |
6302 | 676 entry = gtk_entry_new(); |
677 gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0); | |
678 gtk_entry_set_max_length(GTK_ENTRY(entry), 10); | |
6977 | 679 gtk_widget_set_sensitive(GTK_WIDGET(entry), |
9298 | 680 gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_string")); |
6977 | 681 gtk_entry_set_text(GTK_ENTRY(entry), |
9298 | 682 gaim_prefs_get_string("/plugins/gtk/X11/notify/title_string")); |
6977 | 683 g_object_set_data(G_OBJECT(toggle), "title-entry", entry); |
684 g_signal_connect(G_OBJECT(toggle), "toggled", | |
9298 | 685 G_CALLBACK(method_toggle_cb), "method_string"); |
6977 | 686 g_signal_connect(G_OBJECT(entry), "focus-out-event", |
9298 | 687 G_CALLBACK(options_entry_cb), "method_string"); |
3374 | 688 |
6977 | 689 /* Count method button */ |
690 toggle = gtk_check_button_new_with_mnemonic(_("Insert c_ount of new messages into window title")); | |
691 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 692 gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_count")); |
6977 | 693 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); |
694 g_signal_connect(G_OBJECT(toggle), "toggled", | |
9298 | 695 G_CALLBACK(method_toggle_cb), "method_count"); |
4035 | 696 |
6977 | 697 /* Urgent method button */ |
698 toggle = gtk_check_button_new_with_mnemonic(_("Set window manager \"_URGENT\" hint")); | |
699 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
700 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 701 gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_urgent")); |
702 g_signal_connect(G_OBJECT(toggle), "toggled", | |
703 G_CALLBACK(method_toggle_cb), "method_urgent"); | |
3710 | 704 |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
705 /* Raise window method button */ |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
706 toggle = gtk_check_button_new_with_mnemonic(_("R_aise conversation window")); |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
707 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
708 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
709 gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_raise")); |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
710 g_signal_connect(G_OBJECT(toggle), "toggled", |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
711 G_CALLBACK(method_toggle_cb), "method_raise"); |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
712 |
6977 | 713 /*---------- "Notification Removals" ----------*/ |
6302 | 714 frame = gaim_gtk_make_frame(ret, _("Notification Removal")); |
715 vbox = gtk_vbox_new(FALSE, 5); | |
716 gtk_container_add(GTK_CONTAINER(frame), vbox); | |
3374 | 717 |
6977 | 718 /* Remove on focus button */ |
719 toggle = gtk_check_button_new_with_mnemonic(_("Remove when conversation window _gains focus")); | |
720 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
721 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 722 gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_focus")); |
6977 | 723 g_signal_connect(G_OBJECT(toggle), "toggled", G_CALLBACK(notify_toggle_cb), "notify_focus"); |
724 | |
725 /* Remove on click button */ | |
726 toggle = gtk_check_button_new_with_mnemonic(_("Remove when conversation window _receives click")); | |
727 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
728 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 729 gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_click")); |
6977 | 730 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 731 G_CALLBACK(notify_toggle_cb), "notify_click"); |
3710 | 732 |
6977 | 733 /* Remove on type button */ |
734 toggle = gtk_check_button_new_with_mnemonic(_("Remove when _typing in conversation window")); | |
735 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
736 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 737 gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_type")); |
6977 | 738 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 739 G_CALLBACK(notify_toggle_cb), "notify_type"); |
4035 | 740 |
6977 | 741 /* Remove on message send button */ |
742 toggle = gtk_check_button_new_with_mnemonic(_("Remove when a _message gets sent")); | |
743 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
744 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 745 gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_send")); |
6977 | 746 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 747 G_CALLBACK(notify_toggle_cb), "notify_send"); |
3565 | 748 |
6977 | 749 #if 0 |
750 /* Remove on conversation switch button */ | |
9298 | 751 toggle = gtk_check_button_new_with_mnemonic(_("Remove on switch to conversation ta_b")); |
6977 | 752 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); |
753 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 754 gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_switch")); |
6977 | 755 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 756 G_CALLBACK(notify_toggle_cb), "notify_switch"); |
6977 | 757 #endif |
758 | |
759 gtk_widget_show_all(ret); | |
760 return ret; | |
3374 | 761 } |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
762 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
763 static gboolean |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
764 plugin_load(GaimPlugin *plugin) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
765 { |
6977 | 766 GList *convs = gaim_get_conversations(); |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
767 void *conv_handle = gaim_conversations_get_handle(); |
9298 | 768 /* |
769 void *gtk_conv_handle = gaim_gtk_conversations_get_handle(); | |
770 */ | |
6302 | 771 |
772 my_plugin = plugin; | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
773 |
6977 | 774 gaim_signal_connect(conv_handle, "received-im-msg", plugin, |
9298 | 775 GAIM_CALLBACK(im_recv_im), NULL); |
6977 | 776 gaim_signal_connect(conv_handle, "received-chat-msg", plugin, |
9298 | 777 GAIM_CALLBACK(chat_recv_im), NULL); |
6977 | 778 gaim_signal_connect(conv_handle, "sent-im-msg", plugin, |
9298 | 779 GAIM_CALLBACK(im_sent_im), NULL); |
6977 | 780 gaim_signal_connect(conv_handle, "sent-chat-msg", plugin, |
9298 | 781 GAIM_CALLBACK(chat_sent_im), NULL); |
6977 | 782 gaim_signal_connect(conv_handle, "conversation-created", plugin, |
9298 | 783 GAIM_CALLBACK(conv_created), NULL); |
6977 | 784 gaim_signal_connect(conv_handle, "chat-joined", plugin, |
9298 | 785 GAIM_CALLBACK(conv_created), NULL); |
6977 | 786 gaim_signal_connect(conv_handle, "deleting-conversation", plugin, |
9298 | 787 GAIM_CALLBACK(deleting_conv), NULL); |
9303 | 788 #if 0 |
6977 | 789 gaim_signal_connect(conv_handle, "conversation-switched", plugin, |
9298 | 790 GAIM_CALLBACK(conv_switched), NULL); |
791 gaim_signal_connect(gtk_conv_handle, "conversation-drag-ended", plugin, | |
792 GAIM_CALLBACK(conversation_drag_ended), NULL); | |
9303 | 793 #endif |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
794 |
6977 | 795 while (convs) { |
796 GaimConversation *conv = (GaimConversation *)convs->data; | |
6302 | 797 |
798 /* attach signals */ | |
6977 | 799 attach_signals(conv); |
6302 | 800 |
6977 | 801 convs = convs->next; |
6302 | 802 } |
803 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
804 return TRUE; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
805 } |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
806 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
807 static gboolean |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
808 plugin_unload(GaimPlugin *plugin) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
809 { |
6977 | 810 GList *convs = gaim_get_conversations(); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
811 |
6977 | 812 while (convs) { |
813 GaimConversation *conv = (GaimConversation *)convs->data; | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
814 |
6302 | 815 /* kill signals */ |
6977 | 816 detach_signals(conv); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
817 |
6977 | 818 convs = convs->next; |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
819 } |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
820 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
821 return TRUE; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
822 } |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
823 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
824 static GaimGtkPluginUiInfo ui_info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
825 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
826 get_config_frame |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
827 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
828 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
829 static GaimPluginInfo info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
830 { |
9943 | 831 GAIM_PLUGIN_MAGIC, |
832 GAIM_MAJOR_VERSION, | |
833 GAIM_MINOR_VERSION, | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
834 GAIM_PLUGIN_STANDARD, /**< type */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
835 GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
836 0, /**< flags */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
837 NULL, /**< dependencies */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
838 GAIM_PRIORITY_DEFAULT, /**< priority */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
839 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
840 NOTIFY_PLUGIN_ID, /**< id */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
841 N_("Message Notification"), /**< name */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
842 VERSION, /**< version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
843 /** summary */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
844 N_("Provides a variety of ways of notifying you of unread messages."), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
845 /** description */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
846 N_("Provides a variety of ways of notifying you of unread messages."), |
9298 | 847 "Etan Reisner <deryni@eden.rutgers.edu>\n\t\t\tBrian Tarricone <bjt23@cornell.edu>", |
6302 | 848 /**< author */ |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
849 GAIM_WEBSITE, /**< homepage */ |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
850 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
851 plugin_load, /**< load */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
852 plugin_unload, /**< unload */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
853 NULL, /**< destroy */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
854 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
855 &ui_info, /**< ui_info */ |
8993 | 856 NULL, /**< extra_info */ |
857 NULL, | |
858 NULL | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
859 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
860 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
861 static void |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
862 init_plugin(GaimPlugin *plugin) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
863 { |
6302 | 864 gaim_prefs_add_none("/plugins/gtk"); |
865 gaim_prefs_add_none("/plugins/gtk/X11"); | |
866 gaim_prefs_add_none("/plugins/gtk/X11/notify"); | |
867 | |
6464 | 868 gaim_prefs_add_bool("/plugins/gtk/X11/notify/type_im", TRUE); |
869 gaim_prefs_add_bool("/plugins/gtk/X11/notify/type_chat", FALSE); | |
870 gaim_prefs_add_bool("/plugins/gtk/X11/notify/type_focused", FALSE); | |
6302 | 871 gaim_prefs_add_bool("/plugins/gtk/X11/notify/method_string", FALSE); |
872 gaim_prefs_add_string("/plugins/gtk/X11/notify/title_string", "(*)"); | |
873 gaim_prefs_add_bool("/plugins/gtk/X11/notify/method_urgent", FALSE); | |
874 gaim_prefs_add_bool("/plugins/gtk/X11/notify/method_count", FALSE); | |
10492 | 875 gaim_prefs_add_bool("/plugins/gtk/X11/notify/method_raise", FALSE); |
6302 | 876 gaim_prefs_add_bool("/plugins/gtk/X11/notify/notify_focus", FALSE); |
877 gaim_prefs_add_bool("/plugins/gtk/X11/notify/notify_click", FALSE); | |
878 gaim_prefs_add_bool("/plugins/gtk/X11/notify/notify_type", TRUE); | |
6464 | 879 gaim_prefs_add_bool("/plugins/gtk/X11/notify/notify_send", TRUE); |
880 gaim_prefs_add_bool("/plugins/gtk/X11/notify/notify_switch", TRUE); | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
881 } |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
882 |
6063 | 883 GAIM_INIT_PLUGIN(notify, init_plugin, info) |