Mercurial > pidgin
annotate plugins/notify.c @ 11581:9b3833da6840
[gaim-migrate @ 13851]
goodbye GaimConvWindow.
Still some problems with this patch:
- Scarey warnings console with gaim -d when closing tab
- I tried to seperate gtkconv and gtkconvwin, but failed,
as a result it has its own header, but the code is in the same
file, which is rather weird. Also some code got moved around
for no good reason. Feel free to move it back or reorganize it.
- I broke the gesters plugin, and just disabled it. Hopefully someone
with more time will fix it, it shouldn't take long, but I didn't
feel like bothering.
- This list is incomplete.
committer: Tailor Script <tailor@pidgin.im>
author | Tim Ringenbach <marv@pidgin.im> |
---|---|
date | Sun, 02 Oct 2005 00:32:49 +0000 |
parents | ef6e94bdda08 |
children | 243dd81341a7 |
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. |
11581 | 43 * 22:25:16 <seanegan> deryni: I keep my conversations in one workspace and am |
10606
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" |
11581 | 100 #include "debug.h" |
4202
59751fe608c5
[gaim-migrate @ 4438]
Christian Hammond <chipx86@chipx86.com>
parents:
4165
diff
changeset
|
101 |
6302 | 102 #include "gtkplugin.h" |
103 #include "gtkutils.h" | |
104 | |
6977 | 105 #include <X11/Xatom.h> |
3385 | 106 #include <X11/Xlib.h> |
3374 | 107 #include <X11/Xutil.h> |
108 | |
6302 | 109 #define NOTIFY_PLUGIN_ID "gtk-x11-notify" |
3710 | 110 |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
111 static GaimPlugin *my_plugin = NULL; |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
112 |
6302 | 113 /* notification set/unset */ |
6977 | 114 static int notify(GaimConversation *conv, gboolean increment); |
11581 | 115 static void notify_win(GaimGtkWindow *gaimwin); |
9298 | 116 static void unnotify(GaimConversation *conv, gboolean reset); |
117 static int unnotify_cb(GtkWidget *widget, gpointer data, GaimConversation *conv); | |
6302 | 118 |
119 /* gtk widget callbacks for prefs panel */ | |
6977 | 120 static void type_toggle_cb(GtkWidget *widget, gpointer data); |
121 static void method_toggle_cb(GtkWidget *widget, gpointer data); | |
122 static void notify_toggle_cb(GtkWidget *widget, gpointer data); | |
123 static gboolean options_entry_cb(GtkWidget *widget, GdkEventFocus *event, gpointer data); | |
124 static void apply_method(); | |
125 static void apply_notify(); | |
191 | 126 |
6977 | 127 /* string function */ |
11581 | 128 static void handle_string(GaimGtkWindow *gaimwin); |
6302 | 129 |
6977 | 130 /* count function */ |
11581 | 131 static void handle_count(GaimGtkWindow *gaimwin); |
6302 | 132 |
6977 | 133 /* urgent function */ |
11581 | 134 static void handle_urgent(GaimGtkWindow *gaimwin, gboolean add); |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
135 |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
136 /* raise function */ |
11581 | 137 static void handle_raise(GaimGtkWindow *gaimwin); |
3710 | 138 |
6302 | 139 /****************************************/ |
140 /* Begin doing stuff below this line... */ | |
141 /****************************************/ | |
9298 | 142 static int |
11581 | 143 count_messages(GaimGtkWindow *gaimwin) |
9298 | 144 { |
145 gint count = 0; | |
11581 | 146 GList *convs = NULL, *l; |
9298 | 147 |
11581 | 148 for (convs = gaimwin->gtkconvs; convs != NULL; convs = convs->next) { |
149 GaimGtkConversation *conv = convs->data; | |
150 for (l = conv->convs; l != NULL; l = l->next) { | |
151 count += GPOINTER_TO_INT(gaim_conversation_get_data(l->data, "notify-message-count")); | |
152 } | |
9298 | 153 } |
154 | |
155 return count; | |
156 } | |
6302 | 157 |
6977 | 158 static int |
159 notify(GaimConversation *conv, gboolean increment) | |
160 { | |
11581 | 161 GaimGtkWindow *gaimwin = NULL; |
6302 | 162 gint count; |
6977 | 163 gboolean has_focus; |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
164 |
6977 | 165 if (conv == NULL) |
6302 | 166 return 0; |
167 | |
6977 | 168 /* We want to remove the notifications, but not reset the counter */ |
169 unnotify(conv, FALSE); | |
170 | |
11581 | 171 gaimwin = GAIM_GTK_CONVERSATION(conv)->win; |
5021 | 172 |
6977 | 173 /* If we aren't doing notifications for this type of conversation, return */ |
11338 | 174 if (((gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) && |
9298 | 175 !gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_im")) || |
11338 | 176 ((gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) && |
9298 | 177 !gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_chat"))) |
6977 | 178 return 0; |
4203
ec6d0c5e5c23
[gaim-migrate @ 4439]
Christian Hammond <chipx86@chipx86.com>
parents:
4202
diff
changeset
|
179 |
11581 | 180 g_object_get(G_OBJECT(gaimwin->window), |
9298 | 181 "has-toplevel-focus", &has_focus, NULL); |
3374 | 182 |
6977 | 183 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_focused") || |
10984 | 184 !has_focus) { |
6977 | 185 if (increment) { |
186 count = GPOINTER_TO_INT(gaim_conversation_get_data(conv, "notify-message-count")); | |
187 count++; | |
188 gaim_conversation_set_data(conv, "notify-message-count", GINT_TO_POINTER(count)); | |
189 } | |
6302 | 190 |
9298 | 191 notify_win(gaimwin); |
6977 | 192 } |
6302 | 193 |
194 return 0; | |
195 } | |
196 | |
9298 | 197 static void |
11581 | 198 notify_win(GaimGtkWindow *gaimwin) |
9298 | 199 { |
10971 | 200 if (count_messages(gaimwin) <= 0) |
201 return; | |
202 | |
9298 | 203 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_count")) |
204 handle_count(gaimwin); | |
205 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_string")) | |
206 handle_string(gaimwin); | |
207 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_urgent")) | |
208 handle_urgent(gaimwin, TRUE); | |
10492 | 209 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_raise")) |
210 handle_raise(gaimwin); | |
9298 | 211 } |
212 | |
213 static void | |
214 unnotify(GaimConversation *conv, gboolean reset) | |
215 { | |
216 GaimConversation *active_conv = NULL; | |
11581 | 217 GaimGtkWindow *gaimwin = NULL; |
9298 | 218 |
219 g_return_if_fail(conv != NULL); | |
220 | |
11581 | 221 gaimwin = GAIM_GTK_CONVERSATION(conv)->win; |
222 active_conv = gaim_gtk_conv_window_get_active_conversation(gaimwin); | |
9298 | 223 |
224 /* reset the conversation window title */ | |
225 gaim_conversation_autoset_title(active_conv); | |
226 | |
227 if (reset) { | |
228 /* Only need to actually remove the urgent hinting here, since removing it | |
229 * just to have it readded in re-notify is an unnecessary couple extra RTs | |
230 * to the server */ | |
231 handle_urgent(gaimwin, FALSE); | |
232 gaim_conversation_set_data(conv, "notify-message-count", GINT_TO_POINTER(0)); | |
233 } | |
234 | |
235 return; | |
236 } | |
237 | |
238 static int | |
239 unnotify_cb(GtkWidget *widget, gpointer data, GaimConversation *conv) | |
240 { | |
241 if (GPOINTER_TO_INT(gaim_conversation_get_data(conv, "notify-message-count")) != 0) | |
242 unnotify(conv, TRUE); | |
243 | |
244 return 0; | |
245 } | |
246 | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
247 static gboolean |
9298 | 248 im_recv_im(GaimAccount *account, char *sender, char *message, |
10104 | 249 GaimConversation *conv, int *flags) |
6977 | 250 { |
251 notify(conv, TRUE); | |
3710 | 252 |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
253 return FALSE; |
3710 | 254 } |
255 | |
9298 | 256 static gboolean |
257 chat_recv_im(GaimAccount *account, char *sender, char *message, | |
10104 | 258 GaimConversation *conv, int *flags) |
9298 | 259 { |
10345 | 260 if (gaim_conv_chat_is_user_ignored(GAIM_CONV_CHAT(conv), sender)) |
261 return FALSE; | |
262 | |
9298 | 263 notify(conv, TRUE); |
264 | |
265 return FALSE; | |
266 } | |
267 | |
6977 | 268 static void |
9298 | 269 im_sent_im(GaimAccount *account, char *receiver, const char *message) { |
270 GaimConversation *conv = NULL; | |
271 | |
272 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_send")) { | |
11338 | 273 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, receiver, account); |
9298 | 274 unnotify(conv, TRUE); |
275 } | |
276 } | |
277 | |
278 static void | |
279 chat_sent_im(GaimAccount *account, const char *message, int id) | |
6977 | 280 { |
281 GaimConversation *conv = NULL; | |
282 | |
283 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_send")) { | |
284 conv = gaim_find_chat(gaim_account_get_connection(account), id); | |
285 unnotify(conv, TRUE); | |
286 } | |
3710 | 287 } |
288 | |
6977 | 289 static int |
290 attach_signals(GaimConversation *conv) | |
291 { | |
292 GaimGtkConversation *gtkconv = NULL; | |
293 GaimGtkWindow *gtkwin = NULL; | |
294 GSList *window_ids = NULL, *imhtml_ids = NULL, *entry_ids = NULL; | |
295 guint id; | |
296 | |
297 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
11581 | 298 if (!gtkconv) { |
299 gaim_debug_misc("notify", "Failed to find gtkconv\n"); | |
300 return 0; | |
301 } | |
302 | |
303 gtkwin = gtkconv->win; | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
304 |
6977 | 305 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_focus")) { |
9298 | 306 /* TODO should really find a way to make this work no matter where the |
307 * focus is inside the conv window, without having to bind to | |
308 * focus-in-event on the g(d|t)kwindow */ | |
309 /* try setting the signal on the focus-in-event for | |
310 * gtkwin->notebook->container? */ | |
311 id = g_signal_connect(G_OBJECT(gtkconv->entry), "focus-in-event", | |
312 G_CALLBACK(unnotify_cb), conv); | |
313 window_ids = g_slist_append(window_ids, GUINT_TO_POINTER(id)); | |
314 | |
315 id = g_signal_connect(G_OBJECT(gtkconv->imhtml), "focus-in-event", | |
316 G_CALLBACK(unnotify_cb), conv); | |
6977 | 317 window_ids = g_slist_append(window_ids, GUINT_TO_POINTER(id)); |
318 } | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
319 |
6977 | 320 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_click")) { |
9298 | 321 /* TODO similarly should really find a way to allow for clicking in other |
322 * places of the window */ | |
323 id = g_signal_connect(G_OBJECT(gtkconv->imhtml), "button-press-event", | |
324 G_CALLBACK(unnotify_cb), conv); | |
6977 | 325 imhtml_ids = g_slist_append(imhtml_ids, GUINT_TO_POINTER(id)); |
326 | |
9298 | 327 id = g_signal_connect(G_OBJECT(gtkconv->entry), "button-press-event", |
328 G_CALLBACK(unnotify_cb), conv); | |
6977 | 329 entry_ids = g_slist_append(entry_ids, GUINT_TO_POINTER(id)); |
3374 | 330 } |
3710 | 331 |
6977 | 332 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_type")) { |
9298 | 333 id = g_signal_connect(G_OBJECT(gtkconv->entry), "key-press-event", |
334 G_CALLBACK(unnotify_cb), conv); | |
6977 | 335 entry_ids = g_slist_append(entry_ids, GUINT_TO_POINTER(id)); |
3374 | 336 } |
337 | |
6977 | 338 gaim_conversation_set_data(conv, "notify-window-signals", window_ids); |
339 gaim_conversation_set_data(conv, "notify-imhtml-signals", imhtml_ids); | |
340 gaim_conversation_set_data(conv, "notify-entry-signals", entry_ids); | |
4035 | 341 |
3428 | 342 return 0; |
191 | 343 } |
344 | |
6977 | 345 static void |
346 detach_signals(GaimConversation *conv) | |
347 { | |
348 GaimGtkConversation *gtkconv = NULL; | |
349 GaimGtkWindow *gtkwin = NULL; | |
350 GSList *ids = NULL; | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
351 |
6977 | 352 gtkconv = GAIM_GTK_CONVERSATION(conv); |
11581 | 353 if (!gtkconv) |
354 return; | |
355 gtkwin = gtkconv->win; | |
4203
ec6d0c5e5c23
[gaim-migrate @ 4439]
Christian Hammond <chipx86@chipx86.com>
parents:
4202
diff
changeset
|
356 |
6977 | 357 ids = gaim_conversation_get_data(conv, "notify-window-signals"); |
358 for (; ids != NULL; ids = ids->next) | |
359 g_signal_handler_disconnect(gtkwin->window, GPOINTER_TO_INT(ids->data)); | |
6302 | 360 |
6977 | 361 ids = gaim_conversation_get_data(conv, "notify-imhtml-signals"); |
362 for (; ids != NULL; ids = ids->next) | |
363 g_signal_handler_disconnect(gtkconv->imhtml, GPOINTER_TO_INT(ids->data)); | |
6302 | 364 |
6977 | 365 ids = gaim_conversation_get_data(conv, "notify-entry-signals"); |
366 for (; ids != NULL; ids = ids->next) | |
367 g_signal_handler_disconnect(gtkconv->entry, GPOINTER_TO_INT(ids->data)); | |
3710 | 368 |
9298 | 369 gaim_conversation_set_data(conv, "notify-message-count", GINT_TO_POINTER(0)); |
3710 | 370 |
6977 | 371 gaim_conversation_set_data(conv, "notify-window-signals", NULL); |
372 gaim_conversation_set_data(conv, "notify-imhtml-signals", NULL); | |
373 gaim_conversation_set_data(conv, "notify-entry-signals", NULL); | |
3710 | 374 } |
375 | |
6977 | 376 static void |
377 conv_created(GaimConversation *conv) | |
378 { | |
9298 | 379 gaim_conversation_set_data(conv, "notify-message-count", GINT_TO_POINTER(0)); |
6302 | 380 |
6977 | 381 /* always attach the signals, notify() will take care of conversation type |
382 * checking */ | |
383 attach_signals(conv); | |
3374 | 384 } |
385 | |
6977 | 386 static void |
387 conv_switched(GaimConversation *old_conv, GaimConversation *new_conv) | |
388 { | |
10971 | 389 #if 0 |
11581 | 390 GaimGtkWindow *gaimwin = gaim_conversation_get_window(new_conv); |
10971 | 391 #endif |
6302 | 392 |
10971 | 393 /* |
394 * If the conversation was switched, then make sure we re-notify | |
395 * because Gaim will have overwritten our custom window title. | |
396 */ | |
397 notify(new_conv, FALSE); | |
398 | |
399 #if 0 | |
9298 | 400 printf("conv_switched - %p - %p\n", old_conv, new_conv); |
401 printf("count - %d\n", count_messages(gaimwin)); | |
402 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_switch")) | |
403 unnotify(new_conv, FALSE); | |
404 else { | |
405 /* if we don't have notification on the window then we don't want to | |
406 * re-notify it */ | |
407 if (count_messages(gaimwin)) | |
408 notify_win(gaimwin); | |
409 } | |
10971 | 410 #endif |
6977 | 411 } |
6302 | 412 |
6977 | 413 static void |
414 deleting_conv(GaimConversation *conv) | |
415 { | |
11581 | 416 GaimGtkWindow *gaimwin = NULL; |
9298 | 417 |
6977 | 418 detach_signals(conv); |
3392 | 419 |
9298 | 420 unnotify(conv, TRUE); |
6977 | 421 |
11581 | 422 gaimwin = GAIM_GTK_CONVERSATION(conv)->win; |
423 #if 0 | |
424 /* i think this line crashes */ | |
9298 | 425 if (count_messages(gaimwin)) |
426 notify_win(gaimwin); | |
11581 | 427 #endif |
6977 | 428 } |
429 | |
9303 | 430 #if 0 |
6977 | 431 static void |
11447
ef6e94bdda08
[gaim-migrate @ 13686]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11338
diff
changeset
|
432 conversation_dragging(GaimConversation *active_conv, |
11581 | 433 GaimGtkWindow *old_gaimwin, |
434 GaimGtkWindow *new_gaimwin) | |
6977 | 435 { |
9298 | 436 if (old_gaimwin != new_gaimwin) { |
437 if (old_gaimwin == NULL) { | |
438 /* | |
439 gaim_conversation_autoset_title(active_conv); | |
440 handle_urgent(new_gaimwin, FALSE); | |
441 */ | |
442 | |
443 if (count_messages(new_gaimwin)) | |
444 notify_win(new_gaimwin); | |
445 } else { | |
446 printf("if else count = %d\n", count_messages(new_gaimwin)); | |
447 printf("if else count = %d\n", count_messages(old_gaimwin)); | |
448 /* | |
449 GaimConversation *old_active_conv = NULL; | |
450 old_active_conv = gaim_conv_window_get_active_conversation(new_gaimwin); | |
451 | |
452 gaim_conversation_autoset_title(old_active_conv); | |
453 handle_urgent(old_gaimwin, FALSE); | |
6302 | 454 |
9298 | 455 if (count_messages(old_gaimwin)) |
456 notify_win(old_gaimwin); | |
457 | |
458 gaim_conversation_autoset_title(active_conv); | |
459 handle_urgent(new_gaimwin, FALSE); | |
460 | |
461 if (count_messages(new_gaimwin)) | |
462 notify_win(new_gaimwin); | |
463 */ | |
464 } | |
465 } else { | |
466 printf("else count = %d\n", count_messages(new_gaimwin)); | |
467 printf("else count = %d\n", count_messages(old_gaimwin)); | |
468 /* | |
469 gaim_conversation_autoset_title(active_conv); | |
470 handle_urgent(old_gaimwin, FALSE); | |
471 | |
472 if (count_messages(old_gaimwin)) | |
473 notify_win(old_gaimwin); | |
474 */ | |
475 } | |
4035 | 476 } |
9303 | 477 #endif |
4035 | 478 |
6977 | 479 static void |
11581 | 480 handle_string(GaimGtkWindow *gaimwin) |
9298 | 481 { |
482 GtkWindow *window = NULL; | |
483 gchar newtitle[256]; | |
484 | |
485 g_return_if_fail(gaimwin != NULL); | |
486 | |
11581 | 487 window = GTK_WINDOW(gaimwin->window); |
9298 | 488 g_return_if_fail(window != NULL); |
489 | |
490 g_snprintf(newtitle, sizeof(newtitle), "%s%s", | |
491 gaim_prefs_get_string("/plugins/gtk/X11/notify/title_string"), | |
492 gtk_window_get_title(window)); | |
493 gtk_window_set_title(window, newtitle); | |
494 } | |
495 | |
496 static void | |
11581 | 497 handle_count(GaimGtkWindow *gaimwin) |
9298 | 498 { |
499 GtkWindow *window; | |
500 char newtitle[256]; | |
501 | |
502 g_return_if_fail(gaimwin != NULL); | |
503 | |
11581 | 504 window = GTK_WINDOW(gaimwin->window); |
9298 | 505 g_return_if_fail(window != NULL); |
506 | |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
507 g_snprintf(newtitle, sizeof(newtitle), "[%d] %s", |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
508 count_messages(gaimwin), gtk_window_get_title(window)); |
9298 | 509 gtk_window_set_title(window, newtitle); |
510 } | |
511 | |
512 static void | |
11581 | 513 handle_urgent(GaimGtkWindow *win, gboolean add) |
6977 | 514 { |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
515 XWMHints *hints; |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
516 |
11581 | 517 g_return_if_fail(win != NULL); |
518 g_return_if_fail(win->window != NULL); | |
519 g_return_if_fail(win->window->window != NULL); | |
9298 | 520 |
11581 | 521 hints = XGetWMHints(GDK_WINDOW_XDISPLAY(win->window->window), |
522 GDK_WINDOW_XWINDOW(win->window->window)); | |
6977 | 523 if (add) |
524 hints->flags |= XUrgencyHint; | |
525 else | |
526 hints->flags &= ~XUrgencyHint; | |
11581 | 527 XSetWMHints(GDK_WINDOW_XDISPLAY(win->window->window), |
528 GDK_WINDOW_XWINDOW(win->window->window), hints); | |
4218 | 529 XFree(hints); |
4035 | 530 } |
531 | |
6977 | 532 static void |
11581 | 533 handle_raise(GaimGtkWindow *gaimwin) |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
534 { |
11581 | 535 gaim_gtk_conv_window_raise(gaimwin); |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
536 } |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
537 |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
538 static void |
6977 | 539 type_toggle_cb(GtkWidget *widget, gpointer data) |
540 { | |
541 gboolean on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); | |
542 gchar pref[256]; | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
543 |
6977 | 544 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
|
545 |
6977 | 546 gaim_prefs_set_bool(pref, on); |
3374 | 547 } |
548 | |
6977 | 549 static void |
550 method_toggle_cb(GtkWidget *widget, gpointer data) | |
551 { | |
552 gboolean on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); | |
553 gchar pref[256]; | |
554 | |
555 g_snprintf(pref, sizeof(pref), "/plugins/gtk/X11/notify/%s", (char *)data); | |
3374 | 556 |
6977 | 557 gaim_prefs_set_bool(pref, on); |
558 | |
559 if (!strcmp(data, "method_string")) { | |
560 GtkWidget *entry = g_object_get_data(G_OBJECT(widget), "title-entry"); | |
561 gtk_widget_set_sensitive(entry, on); | |
562 | |
563 gaim_prefs_set_string("/plugins/gtk/X11/notify/title_string", gtk_entry_get_text(GTK_ENTRY(entry))); | |
564 } | |
565 | |
566 apply_method(); | |
3374 | 567 } |
568 | |
6977 | 569 static void |
570 notify_toggle_cb(GtkWidget *widget, gpointer data) | |
571 { | |
572 gboolean on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); | |
573 gchar pref[256]; | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
574 |
6977 | 575 g_snprintf(pref, sizeof(pref), "/plugins/gtk/X11/notify/%s", (char *)data); |
3374 | 576 |
6977 | 577 gaim_prefs_set_bool(pref, on); |
578 | |
579 apply_notify(); | |
3374 | 580 } |
581 | |
6977 | 582 static gboolean |
583 options_entry_cb(GtkWidget *widget, GdkEventFocus *evt, gpointer data) | |
584 { | |
585 if (data == NULL) | |
6982 | 586 return FALSE; |
6302 | 587 |
6977 | 588 if (!strcmp(data, "method_string")) { |
589 gaim_prefs_set_string("/plugins/gtk/X11/notify/title_string", gtk_entry_get_text(GTK_ENTRY(widget))); | |
3374 | 590 } |
6302 | 591 |
6977 | 592 apply_method(); |
6302 | 593 |
594 return FALSE; | |
595 } | |
596 | |
6977 | 597 static void |
598 apply_method() { | |
599 GList *convs = gaim_get_conversations(); | |
11581 | 600 GaimGtkWindow *gaimwin = NULL; |
6977 | 601 |
9298 | 602 for (convs = gaim_get_conversations(); convs != NULL; convs = convs->next) { |
6977 | 603 GaimConversation *conv = (GaimConversation *)convs->data; |
6302 | 604 |
6977 | 605 /* remove notifications */ |
9298 | 606 unnotify(conv, FALSE); |
607 | |
11581 | 608 gaimwin = GAIM_GTK_CONVERSATION(conv)->win; |
9298 | 609 if (GPOINTER_TO_INT(gaim_conversation_get_data(conv, "notify-message-count")) != 0) |
6977 | 610 /* reattach appropriate notifications */ |
611 notify(conv, FALSE); | |
612 } | |
3374 | 613 } |
614 | |
6977 | 615 static void |
616 apply_notify() | |
617 { | |
618 GList *convs = gaim_get_conversations(); | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
619 |
6977 | 620 while (convs) { |
621 GaimConversation *conv = (GaimConversation *)convs->data; | |
4203
ec6d0c5e5c23
[gaim-migrate @ 4439]
Christian Hammond <chipx86@chipx86.com>
parents:
4202
diff
changeset
|
622 |
6977 | 623 /* detach signals */ |
624 detach_signals(conv); | |
625 /* reattach appropriate signals */ | |
626 attach_signals(conv); | |
4035 | 627 |
6977 | 628 convs = convs->next; |
4035 | 629 } |
630 } | |
631 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
632 static GtkWidget * |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
633 get_config_frame(GaimPlugin *plugin) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
634 { |
6977 | 635 GtkWidget *ret = NULL, *frame = NULL; |
636 GtkWidget *vbox = NULL, *hbox = NULL; | |
637 GtkWidget *toggle = NULL, *entry = NULL; | |
6302 | 638 |
3565 | 639 ret = gtk_vbox_new(FALSE, 18); |
6302 | 640 gtk_container_set_border_width(GTK_CONTAINER (ret), 12); |
3392 | 641 |
6302 | 642 /*---------- "Notify For" ----------*/ |
643 frame = gaim_gtk_make_frame(ret, _("Notify For")); | |
644 vbox = gtk_vbox_new(FALSE, 5); | |
645 gtk_container_add(GTK_CONTAINER(frame), vbox); | |
646 | |
3710 | 647 toggle = gtk_check_button_new_with_mnemonic(_("_IM windows")); |
648 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
6977 | 649 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), |
9298 | 650 gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_im")); |
6977 | 651 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 652 G_CALLBACK(type_toggle_cb), "type_im"); |
3710 | 653 |
6977 | 654 toggle = gtk_check_button_new_with_mnemonic(_("C_hat windows")); |
3710 | 655 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); |
6977 | 656 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), |
9298 | 657 gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_chat")); |
6977 | 658 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 659 G_CALLBACK(type_toggle_cb), "type_chat"); |
6977 | 660 |
661 toggle = gtk_check_button_new_with_mnemonic(_("_Focused windows")); | |
662 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
663 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 664 gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_focused")); |
6977 | 665 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 666 G_CALLBACK(type_toggle_cb), "type_focused"); |
3710 | 667 |
6302 | 668 /*---------- "Notification Methods" ----------*/ |
669 frame = gaim_gtk_make_frame(ret, _("Notification Methods")); | |
670 vbox = gtk_vbox_new(FALSE, 5); | |
671 gtk_container_add(GTK_CONTAINER(frame), vbox); | |
672 | |
6977 | 673 /* String method button */ |
3565 | 674 hbox = gtk_hbox_new(FALSE, 18); |
675 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | |
6302 | 676 toggle = gtk_check_button_new_with_mnemonic(_("Prepend _string into window title:")); |
6977 | 677 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), |
9298 | 678 gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_string")); |
3565 | 679 gtk_box_pack_start(GTK_BOX(hbox), toggle, FALSE, FALSE, 0); |
6977 | 680 |
6302 | 681 entry = gtk_entry_new(); |
682 gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0); | |
683 gtk_entry_set_max_length(GTK_ENTRY(entry), 10); | |
6977 | 684 gtk_widget_set_sensitive(GTK_WIDGET(entry), |
9298 | 685 gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_string")); |
6977 | 686 gtk_entry_set_text(GTK_ENTRY(entry), |
9298 | 687 gaim_prefs_get_string("/plugins/gtk/X11/notify/title_string")); |
6977 | 688 g_object_set_data(G_OBJECT(toggle), "title-entry", entry); |
689 g_signal_connect(G_OBJECT(toggle), "toggled", | |
9298 | 690 G_CALLBACK(method_toggle_cb), "method_string"); |
6977 | 691 g_signal_connect(G_OBJECT(entry), "focus-out-event", |
9298 | 692 G_CALLBACK(options_entry_cb), "method_string"); |
3374 | 693 |
6977 | 694 /* Count method button */ |
695 toggle = gtk_check_button_new_with_mnemonic(_("Insert c_ount of new messages into window title")); | |
696 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 697 gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_count")); |
6977 | 698 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); |
699 g_signal_connect(G_OBJECT(toggle), "toggled", | |
9298 | 700 G_CALLBACK(method_toggle_cb), "method_count"); |
4035 | 701 |
6977 | 702 /* Urgent method button */ |
703 toggle = gtk_check_button_new_with_mnemonic(_("Set window manager \"_URGENT\" hint")); | |
704 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
705 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 706 gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_urgent")); |
707 g_signal_connect(G_OBJECT(toggle), "toggled", | |
708 G_CALLBACK(method_toggle_cb), "method_urgent"); | |
3710 | 709 |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
710 /* Raise window method button */ |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
711 toggle = gtk_check_button_new_with_mnemonic(_("R_aise conversation window")); |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
712 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
713 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
714 gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_raise")); |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
715 g_signal_connect(G_OBJECT(toggle), "toggled", |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
716 G_CALLBACK(method_toggle_cb), "method_raise"); |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
717 |
6977 | 718 /*---------- "Notification Removals" ----------*/ |
6302 | 719 frame = gaim_gtk_make_frame(ret, _("Notification Removal")); |
720 vbox = gtk_vbox_new(FALSE, 5); | |
721 gtk_container_add(GTK_CONTAINER(frame), vbox); | |
3374 | 722 |
6977 | 723 /* Remove on focus button */ |
724 toggle = gtk_check_button_new_with_mnemonic(_("Remove when conversation window _gains focus")); | |
725 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
726 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 727 gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_focus")); |
6977 | 728 g_signal_connect(G_OBJECT(toggle), "toggled", G_CALLBACK(notify_toggle_cb), "notify_focus"); |
729 | |
730 /* Remove on click button */ | |
731 toggle = gtk_check_button_new_with_mnemonic(_("Remove when conversation window _receives click")); | |
732 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
733 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 734 gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_click")); |
6977 | 735 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 736 G_CALLBACK(notify_toggle_cb), "notify_click"); |
3710 | 737 |
6977 | 738 /* Remove on type button */ |
739 toggle = gtk_check_button_new_with_mnemonic(_("Remove when _typing in conversation window")); | |
740 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
741 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 742 gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_type")); |
6977 | 743 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 744 G_CALLBACK(notify_toggle_cb), "notify_type"); |
4035 | 745 |
6977 | 746 /* Remove on message send button */ |
747 toggle = gtk_check_button_new_with_mnemonic(_("Remove when a _message gets sent")); | |
748 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
749 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 750 gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_send")); |
6977 | 751 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 752 G_CALLBACK(notify_toggle_cb), "notify_send"); |
3565 | 753 |
6977 | 754 #if 0 |
755 /* Remove on conversation switch button */ | |
9298 | 756 toggle = gtk_check_button_new_with_mnemonic(_("Remove on switch to conversation ta_b")); |
6977 | 757 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); |
758 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 759 gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_switch")); |
6977 | 760 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 761 G_CALLBACK(notify_toggle_cb), "notify_switch"); |
6977 | 762 #endif |
763 | |
764 gtk_widget_show_all(ret); | |
765 return ret; | |
3374 | 766 } |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
767 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
768 static gboolean |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
769 plugin_load(GaimPlugin *plugin) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
770 { |
6977 | 771 GList *convs = gaim_get_conversations(); |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
772 void *conv_handle = gaim_conversations_get_handle(); |
9298 | 773 /* |
774 void *gtk_conv_handle = gaim_gtk_conversations_get_handle(); | |
775 */ | |
6302 | 776 |
777 my_plugin = plugin; | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
778 |
6977 | 779 gaim_signal_connect(conv_handle, "received-im-msg", plugin, |
9298 | 780 GAIM_CALLBACK(im_recv_im), NULL); |
6977 | 781 gaim_signal_connect(conv_handle, "received-chat-msg", plugin, |
9298 | 782 GAIM_CALLBACK(chat_recv_im), NULL); |
6977 | 783 gaim_signal_connect(conv_handle, "sent-im-msg", plugin, |
9298 | 784 GAIM_CALLBACK(im_sent_im), NULL); |
6977 | 785 gaim_signal_connect(conv_handle, "sent-chat-msg", plugin, |
9298 | 786 GAIM_CALLBACK(chat_sent_im), NULL); |
6977 | 787 gaim_signal_connect(conv_handle, "conversation-created", plugin, |
9298 | 788 GAIM_CALLBACK(conv_created), NULL); |
6977 | 789 gaim_signal_connect(conv_handle, "chat-joined", plugin, |
9298 | 790 GAIM_CALLBACK(conv_created), NULL); |
6977 | 791 gaim_signal_connect(conv_handle, "deleting-conversation", plugin, |
9298 | 792 GAIM_CALLBACK(deleting_conv), NULL); |
6977 | 793 gaim_signal_connect(conv_handle, "conversation-switched", plugin, |
9298 | 794 GAIM_CALLBACK(conv_switched), NULL); |
10971 | 795 #if 0 |
11447
ef6e94bdda08
[gaim-migrate @ 13686]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11338
diff
changeset
|
796 gaim_signal_connect(gtk_conv_handle, "conversation-dragging", plugin, |
ef6e94bdda08
[gaim-migrate @ 13686]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11338
diff
changeset
|
797 GAIM_CALLBACK(conversation_dragging), NULL); |
9303 | 798 #endif |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
799 |
6977 | 800 while (convs) { |
801 GaimConversation *conv = (GaimConversation *)convs->data; | |
6302 | 802 |
803 /* attach signals */ | |
6977 | 804 attach_signals(conv); |
6302 | 805 |
6977 | 806 convs = convs->next; |
6302 | 807 } |
808 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
809 return TRUE; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
810 } |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
811 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
812 static gboolean |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
813 plugin_unload(GaimPlugin *plugin) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
814 { |
6977 | 815 GList *convs = gaim_get_conversations(); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
816 |
6977 | 817 while (convs) { |
818 GaimConversation *conv = (GaimConversation *)convs->data; | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
819 |
6302 | 820 /* kill signals */ |
6977 | 821 detach_signals(conv); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
822 |
6977 | 823 convs = convs->next; |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
824 } |
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 return TRUE; |
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 GaimGtkPluginUiInfo ui_info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
830 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
831 get_config_frame |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
832 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
833 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
834 static GaimPluginInfo info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
835 { |
9943 | 836 GAIM_PLUGIN_MAGIC, |
837 GAIM_MAJOR_VERSION, | |
838 GAIM_MINOR_VERSION, | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
839 GAIM_PLUGIN_STANDARD, /**< type */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
840 GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
841 0, /**< flags */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
842 NULL, /**< dependencies */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
843 GAIM_PRIORITY_DEFAULT, /**< priority */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
844 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
845 NOTIFY_PLUGIN_ID, /**< id */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
846 N_("Message Notification"), /**< name */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
847 VERSION, /**< version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
848 /** summary */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
849 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
|
850 /** description */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
851 N_("Provides a variety of ways of notifying you of unread messages."), |
9298 | 852 "Etan Reisner <deryni@eden.rutgers.edu>\n\t\t\tBrian Tarricone <bjt23@cornell.edu>", |
6302 | 853 /**< author */ |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
854 GAIM_WEBSITE, /**< homepage */ |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
855 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
856 plugin_load, /**< load */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
857 plugin_unload, /**< unload */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
858 NULL, /**< destroy */ |
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 &ui_info, /**< ui_info */ |
8993 | 861 NULL, /**< extra_info */ |
862 NULL, | |
863 NULL | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
864 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
865 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
866 static void |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
867 init_plugin(GaimPlugin *plugin) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
868 { |
6302 | 869 gaim_prefs_add_none("/plugins/gtk"); |
870 gaim_prefs_add_none("/plugins/gtk/X11"); | |
871 gaim_prefs_add_none("/plugins/gtk/X11/notify"); | |
872 | |
6464 | 873 gaim_prefs_add_bool("/plugins/gtk/X11/notify/type_im", TRUE); |
874 gaim_prefs_add_bool("/plugins/gtk/X11/notify/type_chat", FALSE); | |
875 gaim_prefs_add_bool("/plugins/gtk/X11/notify/type_focused", FALSE); | |
6302 | 876 gaim_prefs_add_bool("/plugins/gtk/X11/notify/method_string", FALSE); |
877 gaim_prefs_add_string("/plugins/gtk/X11/notify/title_string", "(*)"); | |
878 gaim_prefs_add_bool("/plugins/gtk/X11/notify/method_urgent", FALSE); | |
879 gaim_prefs_add_bool("/plugins/gtk/X11/notify/method_count", FALSE); | |
10492 | 880 gaim_prefs_add_bool("/plugins/gtk/X11/notify/method_raise", FALSE); |
6302 | 881 gaim_prefs_add_bool("/plugins/gtk/X11/notify/notify_focus", FALSE); |
882 gaim_prefs_add_bool("/plugins/gtk/X11/notify/notify_click", FALSE); | |
883 gaim_prefs_add_bool("/plugins/gtk/X11/notify/notify_type", TRUE); | |
6464 | 884 gaim_prefs_add_bool("/plugins/gtk/X11/notify/notify_send", TRUE); |
885 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
|
886 } |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
887 |
6063 | 888 GAIM_INIT_PLUGIN(notify, init_plugin, info) |