Mercurial > pidgin
annotate plugins/notify.c @ 13022:228b1f95e5b4
[gaim-migrate @ 15375]
Here's my "I'm staying up all night anyway so I might as well take a stab at
the connection error buttons" work on the connection error buttons. I left
Mark's comment in since I don't think this is finished. I also left a couple
warnings in place because I'm too tired to try to follow failure
characteristics and recovery mechanisms for the stuff I'm doing. It works for
me.
I saturated the prpl icons mostly because it made the error overlay stand out
better, but once I saw it I think it works well, and also fits well with our
use of saturation in other places to indicate offline. I'm currently using the
default status image blocked.png, if that's what we end up wanting to keep we
should put a copy of it somewhere else as pulling it from status/default is
silly.
I had originally tried to get the blocked circle to be larger than the prpl
icon, with the prpl icon centered, but couldn't come up with a good way to do
that given the gdk functions I had at hand. I'll probably give it a shot again
at some other point unless we decide we don't want it or someone else does it
before me.
I'm done rambling now, I'm tired.
committer: Tailor Script <tailor@pidgin.im>
author | Etan Reisner <pidgin@unreliablesource.net> |
---|---|
date | Mon, 23 Jan 2006 15:15:01 +0000 |
parents | 384661a6ead6 |
children | f09c6e8df82c |
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 |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
28 * 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
|
29 * might be a neat feature? |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
30 * 22:22:30 <seanegan> Changing the window icon. |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
31 * 22:23:25 <deryni> seanegan: To what? |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
32 * 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
|
33 * blank or something. |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
34 * 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
|
35 * but I'd have to look. |
11581 | 36 * 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
|
37 * 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
|
38 * neat visual clue. |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
39 */ |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
40 |
6302 | 41 /* |
42 * From Etan, 2002: | |
43 * -Added config dialog | |
44 * -Added control over notification method | |
45 * -Added control over when to release notification | |
46 * | |
47 * -Added option to get notification for chats also | |
48 * -Cleaned up code | |
49 * -Added option to notify on click as it's own option | |
50 * rather then as what happens when on focus isn't clicked | |
51 * -Added apply button to change the denotification methods for | |
52 * open conversation windows | |
53 * -Fixed apply to conversations, count now keeps count across applies | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
54 * -Fixed(?) memory leak, and in the process fixed some stupidities |
6302 | 55 * -Hit enter when done editing the title string entry box to save it |
3392 | 56 * |
57 * Thanks to Carles Pina i Estany <carles@pinux.info> | |
58 * for count of new messages option | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
59 * |
6302 | 60 * From Brian, 20 July 2003: |
61 * -Use new xml prefs | |
62 * -Better handling of notification states tracking | |
63 * -Better pref change handling | |
64 * -Fixed a possible memleak and possible crash (rare) | |
65 * -Use gtk_window_get_title() rather than gtkwin->title | |
66 * -Other random fixes and cleanups | |
6977 | 67 * |
9298 | 68 * Etan again, 12 August 2003: |
6977 | 69 * -Better use of the new xml prefs |
70 * -Removed all bitmask stuff | |
71 * -Even better pref change handling | |
72 * -Removed unnecessary functions | |
73 * -Reworking of notification/unnotification stuff | |
74 * -Header file include cleanup | |
75 * -General code cleanup | |
9298 | 76 * |
77 * Etan yet again, 04 April 2004: | |
78 * -Re-added Urgent option | |
79 * -Re-added unnotify on focus option (still needs work, as it will only | |
80 * react to focus-in events when the entry or history widgets are focused) | |
10492 | 81 * |
82 * Sean, 08 January, 2005: | |
83 * -Added Raise option, formally in Gaim proper | |
3392 | 84 */ |
85 | |
9791 | 86 #include "internal.h" |
87 #include "gtkgaim.h" | |
10492 | 88 #include "gtkprefs.h" |
6302 | 89 |
12604
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
90 #include "conversation.h" |
6302 | 91 #include "prefs.h" |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
92 #include "signals.h" |
9943 | 93 #include "version.h" |
11581 | 94 #include "debug.h" |
4202
59751fe608c5
[gaim-migrate @ 4438]
Christian Hammond <chipx86@chipx86.com>
parents:
4165
diff
changeset
|
95 |
6302 | 96 #include "gtkplugin.h" |
97 #include "gtkutils.h" | |
98 | |
12959
acf22abb86ba
[gaim-migrate @ 15312]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12604
diff
changeset
|
99 #ifndef _WIN32 |
6977 | 100 #include <X11/Xatom.h> |
3385 | 101 #include <X11/Xlib.h> |
3374 | 102 #include <X11/Xutil.h> |
12959
acf22abb86ba
[gaim-migrate @ 15312]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12604
diff
changeset
|
103 #endif |
3374 | 104 |
6302 | 105 #define NOTIFY_PLUGIN_ID "gtk-x11-notify" |
3710 | 106 |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
107 static GaimPlugin *my_plugin = NULL; |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
108 |
6302 | 109 /* notification set/unset */ |
6977 | 110 static int notify(GaimConversation *conv, gboolean increment); |
11581 | 111 static void notify_win(GaimGtkWindow *gaimwin); |
9298 | 112 static void unnotify(GaimConversation *conv, gboolean reset); |
113 static int unnotify_cb(GtkWidget *widget, gpointer data, GaimConversation *conv); | |
6302 | 114 |
115 /* gtk widget callbacks for prefs panel */ | |
6977 | 116 static void type_toggle_cb(GtkWidget *widget, gpointer data); |
117 static void method_toggle_cb(GtkWidget *widget, gpointer data); | |
118 static void notify_toggle_cb(GtkWidget *widget, gpointer data); | |
119 static gboolean options_entry_cb(GtkWidget *widget, GdkEventFocus *event, gpointer data); | |
12397
8d1cf3f847b1
[gaim-migrate @ 14704]
Richard Laager <rlaager@wiktel.com>
parents:
12286
diff
changeset
|
120 static void apply_method(void); |
8d1cf3f847b1
[gaim-migrate @ 14704]
Richard Laager <rlaager@wiktel.com>
parents:
12286
diff
changeset
|
121 static void apply_notify(void); |
191 | 122 |
6977 | 123 /* string function */ |
11581 | 124 static void handle_string(GaimGtkWindow *gaimwin); |
6302 | 125 |
6977 | 126 /* count function */ |
11581 | 127 static void handle_count(GaimGtkWindow *gaimwin); |
6302 | 128 |
6977 | 129 /* urgent function */ |
11581 | 130 static void handle_urgent(GaimGtkWindow *gaimwin, gboolean add); |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
131 |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
132 /* raise function */ |
11581 | 133 static void handle_raise(GaimGtkWindow *gaimwin); |
3710 | 134 |
6302 | 135 /****************************************/ |
136 /* Begin doing stuff below this line... */ | |
137 /****************************************/ | |
9298 | 138 static int |
11581 | 139 count_messages(GaimGtkWindow *gaimwin) |
9298 | 140 { |
141 gint count = 0; | |
11581 | 142 GList *convs = NULL, *l; |
9298 | 143 |
11581 | 144 for (convs = gaimwin->gtkconvs; convs != NULL; convs = convs->next) { |
145 GaimGtkConversation *conv = convs->data; | |
146 for (l = conv->convs; l != NULL; l = l->next) { | |
147 count += GPOINTER_TO_INT(gaim_conversation_get_data(l->data, "notify-message-count")); | |
148 } | |
9298 | 149 } |
150 | |
151 return count; | |
152 } | |
6302 | 153 |
6977 | 154 static int |
155 notify(GaimConversation *conv, gboolean increment) | |
156 { | |
11581 | 157 GaimGtkWindow *gaimwin = NULL; |
6302 | 158 gint count; |
6977 | 159 gboolean has_focus; |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
160 |
6977 | 161 if (conv == NULL) |
6302 | 162 return 0; |
163 | |
6977 | 164 /* We want to remove the notifications, but not reset the counter */ |
165 unnotify(conv, FALSE); | |
166 | |
11581 | 167 gaimwin = GAIM_GTK_CONVERSATION(conv)->win; |
5021 | 168 |
6977 | 169 /* If we aren't doing notifications for this type of conversation, return */ |
11338 | 170 if (((gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) && |
9298 | 171 !gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_im")) || |
11338 | 172 ((gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) && |
9298 | 173 !gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_chat"))) |
6977 | 174 return 0; |
4203
ec6d0c5e5c23
[gaim-migrate @ 4439]
Christian Hammond <chipx86@chipx86.com>
parents:
4202
diff
changeset
|
175 |
11581 | 176 g_object_get(G_OBJECT(gaimwin->window), |
9298 | 177 "has-toplevel-focus", &has_focus, NULL); |
3374 | 178 |
6977 | 179 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_focused") || |
10984 | 180 !has_focus) { |
6977 | 181 if (increment) { |
182 count = GPOINTER_TO_INT(gaim_conversation_get_data(conv, "notify-message-count")); | |
183 count++; | |
184 gaim_conversation_set_data(conv, "notify-message-count", GINT_TO_POINTER(count)); | |
185 } | |
6302 | 186 |
9298 | 187 notify_win(gaimwin); |
6977 | 188 } |
6302 | 189 |
190 return 0; | |
191 } | |
192 | |
9298 | 193 static void |
11581 | 194 notify_win(GaimGtkWindow *gaimwin) |
9298 | 195 { |
10971 | 196 if (count_messages(gaimwin) <= 0) |
197 return; | |
198 | |
9298 | 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; | |
11581 | 213 GaimGtkWindow *gaimwin = NULL; |
9298 | 214 |
215 g_return_if_fail(conv != NULL); | |
216 | |
11581 | 217 gaimwin = GAIM_GTK_CONVERSATION(conv)->win; |
218 active_conv = gaim_gtk_conv_window_get_active_conversation(gaimwin); | |
9298 | 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 |
12604
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
244 message_displayed_cb(GaimAccount *account, GaimConversation *conv, const char *message, GaimMessageFlags flags) |
6977 | 245 { |
12604
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
246 if ((flags & GAIM_MESSAGE_RECV) && !(flags & GAIM_MESSAGE_DELAYED)) |
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
247 notify(conv, TRUE); |
9298 | 248 |
249 return FALSE; | |
250 } | |
251 | |
6977 | 252 static void |
12968
384661a6ead6
[gaim-migrate @ 15321]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12959
diff
changeset
|
253 im_sent_im(GaimAccount *account, const char *receiver, const char *message) { |
9298 | 254 GaimConversation *conv = NULL; |
255 | |
256 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_send")) { | |
11338 | 257 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, receiver, account); |
9298 | 258 unnotify(conv, TRUE); |
259 } | |
260 } | |
261 | |
262 static void | |
263 chat_sent_im(GaimAccount *account, const char *message, int id) | |
6977 | 264 { |
265 GaimConversation *conv = NULL; | |
266 | |
267 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_send")) { | |
268 conv = gaim_find_chat(gaim_account_get_connection(account), id); | |
269 unnotify(conv, TRUE); | |
270 } | |
3710 | 271 } |
272 | |
6977 | 273 static int |
274 attach_signals(GaimConversation *conv) | |
275 { | |
276 GaimGtkConversation *gtkconv = NULL; | |
277 GaimGtkWindow *gtkwin = NULL; | |
11728
89e416ac9ef7
[gaim-migrate @ 14019]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11690
diff
changeset
|
278 GSList *imhtml_ids = NULL, *entry_ids = NULL; |
6977 | 279 guint id; |
280 | |
281 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
11581 | 282 if (!gtkconv) { |
283 gaim_debug_misc("notify", "Failed to find gtkconv\n"); | |
284 return 0; | |
285 } | |
286 | |
287 gtkwin = gtkconv->win; | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
288 |
6977 | 289 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_focus")) { |
9298 | 290 /* TODO should really find a way to make this work no matter where the |
291 * focus is inside the conv window, without having to bind to | |
292 * focus-in-event on the g(d|t)kwindow */ | |
293 /* try setting the signal on the focus-in-event for | |
294 * gtkwin->notebook->container? */ | |
295 id = g_signal_connect(G_OBJECT(gtkconv->entry), "focus-in-event", | |
296 G_CALLBACK(unnotify_cb), conv); | |
11728
89e416ac9ef7
[gaim-migrate @ 14019]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11690
diff
changeset
|
297 entry_ids = g_slist_append(entry_ids, GUINT_TO_POINTER(id)); |
9298 | 298 |
299 id = g_signal_connect(G_OBJECT(gtkconv->imhtml), "focus-in-event", | |
300 G_CALLBACK(unnotify_cb), conv); | |
11728
89e416ac9ef7
[gaim-migrate @ 14019]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11690
diff
changeset
|
301 imhtml_ids = g_slist_append(imhtml_ids, GUINT_TO_POINTER(id)); |
6977 | 302 } |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
303 |
6977 | 304 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_click")) { |
9298 | 305 /* TODO similarly should really find a way to allow for clicking in other |
306 * places of the window */ | |
307 id = g_signal_connect(G_OBJECT(gtkconv->entry), "button-press-event", | |
308 G_CALLBACK(unnotify_cb), conv); | |
6977 | 309 entry_ids = g_slist_append(entry_ids, GUINT_TO_POINTER(id)); |
12286
255e6912607b
[gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12184
diff
changeset
|
310 |
255e6912607b
[gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12184
diff
changeset
|
311 id = g_signal_connect(G_OBJECT(gtkconv->imhtml), "button-press-event", |
255e6912607b
[gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12184
diff
changeset
|
312 G_CALLBACK(unnotify_cb), conv); |
255e6912607b
[gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12184
diff
changeset
|
313 imhtml_ids = g_slist_append(imhtml_ids, GUINT_TO_POINTER(id)); |
3374 | 314 } |
3710 | 315 |
6977 | 316 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_type")) { |
9298 | 317 id = g_signal_connect(G_OBJECT(gtkconv->entry), "key-press-event", |
318 G_CALLBACK(unnotify_cb), conv); | |
6977 | 319 entry_ids = g_slist_append(entry_ids, GUINT_TO_POINTER(id)); |
3374 | 320 } |
321 | |
6977 | 322 gaim_conversation_set_data(conv, "notify-imhtml-signals", imhtml_ids); |
323 gaim_conversation_set_data(conv, "notify-entry-signals", entry_ids); | |
4035 | 324 |
3428 | 325 return 0; |
191 | 326 } |
327 | |
6977 | 328 static void |
329 detach_signals(GaimConversation *conv) | |
330 { | |
331 GaimGtkConversation *gtkconv = NULL; | |
332 GaimGtkWindow *gtkwin = NULL; | |
11606 | 333 GSList *ids = NULL, *l; |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
334 |
6977 | 335 gtkconv = GAIM_GTK_CONVERSATION(conv); |
11581 | 336 if (!gtkconv) |
337 return; | |
338 gtkwin = gtkconv->win; | |
4203
ec6d0c5e5c23
[gaim-migrate @ 4439]
Christian Hammond <chipx86@chipx86.com>
parents:
4202
diff
changeset
|
339 |
6977 | 340 ids = gaim_conversation_get_data(conv, "notify-imhtml-signals"); |
11606 | 341 for (l = ids; l != NULL; l = l->next) |
342 g_signal_handler_disconnect(gtkconv->imhtml, GPOINTER_TO_INT(l->data)); | |
343 g_slist_free(ids); | |
6302 | 344 |
6977 | 345 ids = gaim_conversation_get_data(conv, "notify-entry-signals"); |
11606 | 346 for (l = ids; l != NULL; l = l->next) |
347 g_signal_handler_disconnect(gtkconv->entry, GPOINTER_TO_INT(l->data)); | |
348 g_slist_free(ids); | |
3710 | 349 |
9298 | 350 gaim_conversation_set_data(conv, "notify-message-count", GINT_TO_POINTER(0)); |
3710 | 351 |
6977 | 352 gaim_conversation_set_data(conv, "notify-imhtml-signals", NULL); |
353 gaim_conversation_set_data(conv, "notify-entry-signals", NULL); | |
3710 | 354 } |
355 | |
6977 | 356 static void |
357 conv_created(GaimConversation *conv) | |
358 { | |
9298 | 359 gaim_conversation_set_data(conv, "notify-message-count", GINT_TO_POINTER(0)); |
6302 | 360 |
6977 | 361 /* always attach the signals, notify() will take care of conversation type |
362 * checking */ | |
363 attach_signals(conv); | |
3374 | 364 } |
365 | |
6977 | 366 static void |
12968
384661a6ead6
[gaim-migrate @ 15321]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12959
diff
changeset
|
367 conv_switched(GaimConversation *conv) |
6977 | 368 { |
10971 | 369 #if 0 |
11581 | 370 GaimGtkWindow *gaimwin = gaim_conversation_get_window(new_conv); |
10971 | 371 #endif |
6302 | 372 |
10971 | 373 /* |
374 * If the conversation was switched, then make sure we re-notify | |
375 * because Gaim will have overwritten our custom window title. | |
376 */ | |
12968
384661a6ead6
[gaim-migrate @ 15321]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12959
diff
changeset
|
377 notify(conv, FALSE); |
10971 | 378 |
379 #if 0 | |
9298 | 380 printf("conv_switched - %p - %p\n", old_conv, new_conv); |
381 printf("count - %d\n", count_messages(gaimwin)); | |
382 if (gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_switch")) | |
383 unnotify(new_conv, FALSE); | |
384 else { | |
385 /* if we don't have notification on the window then we don't want to | |
386 * re-notify it */ | |
387 if (count_messages(gaimwin)) | |
388 notify_win(gaimwin); | |
389 } | |
10971 | 390 #endif |
6977 | 391 } |
6302 | 392 |
6977 | 393 static void |
394 deleting_conv(GaimConversation *conv) | |
395 { | |
11581 | 396 GaimGtkWindow *gaimwin = NULL; |
9298 | 397 |
6977 | 398 detach_signals(conv); |
3392 | 399 |
11606 | 400 gaimwin = GAIM_GTK_CONVERSATION(conv)->win; |
401 | |
402 handle_urgent(gaimwin, FALSE); | |
403 gaim_conversation_set_data(conv, "notify-message-count", GINT_TO_POINTER(0)); | |
404 | |
405 return; | |
406 | |
11581 | 407 #if 0 |
408 /* i think this line crashes */ | |
9298 | 409 if (count_messages(gaimwin)) |
410 notify_win(gaimwin); | |
11581 | 411 #endif |
6977 | 412 } |
413 | |
9303 | 414 #if 0 |
6977 | 415 static void |
11447
ef6e94bdda08
[gaim-migrate @ 13686]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11338
diff
changeset
|
416 conversation_dragging(GaimConversation *active_conv, |
11581 | 417 GaimGtkWindow *old_gaimwin, |
418 GaimGtkWindow *new_gaimwin) | |
6977 | 419 { |
9298 | 420 if (old_gaimwin != new_gaimwin) { |
421 if (old_gaimwin == NULL) { | |
422 /* | |
423 gaim_conversation_autoset_title(active_conv); | |
424 handle_urgent(new_gaimwin, FALSE); | |
425 */ | |
426 | |
427 if (count_messages(new_gaimwin)) | |
428 notify_win(new_gaimwin); | |
429 } else { | |
430 printf("if else count = %d\n", count_messages(new_gaimwin)); | |
431 printf("if else count = %d\n", count_messages(old_gaimwin)); | |
432 /* | |
433 GaimConversation *old_active_conv = NULL; | |
434 old_active_conv = gaim_conv_window_get_active_conversation(new_gaimwin); | |
435 | |
436 gaim_conversation_autoset_title(old_active_conv); | |
437 handle_urgent(old_gaimwin, FALSE); | |
6302 | 438 |
9298 | 439 if (count_messages(old_gaimwin)) |
440 notify_win(old_gaimwin); | |
441 | |
442 gaim_conversation_autoset_title(active_conv); | |
443 handle_urgent(new_gaimwin, FALSE); | |
444 | |
445 if (count_messages(new_gaimwin)) | |
446 notify_win(new_gaimwin); | |
447 */ | |
448 } | |
449 } else { | |
450 printf("else count = %d\n", count_messages(new_gaimwin)); | |
451 printf("else count = %d\n", count_messages(old_gaimwin)); | |
452 /* | |
453 gaim_conversation_autoset_title(active_conv); | |
454 handle_urgent(old_gaimwin, FALSE); | |
455 | |
456 if (count_messages(old_gaimwin)) | |
457 notify_win(old_gaimwin); | |
458 */ | |
459 } | |
4035 | 460 } |
9303 | 461 #endif |
4035 | 462 |
6977 | 463 static void |
11581 | 464 handle_string(GaimGtkWindow *gaimwin) |
9298 | 465 { |
466 GtkWindow *window = NULL; | |
467 gchar newtitle[256]; | |
468 | |
469 g_return_if_fail(gaimwin != NULL); | |
470 | |
11581 | 471 window = GTK_WINDOW(gaimwin->window); |
9298 | 472 g_return_if_fail(window != NULL); |
473 | |
474 g_snprintf(newtitle, sizeof(newtitle), "%s%s", | |
475 gaim_prefs_get_string("/plugins/gtk/X11/notify/title_string"), | |
476 gtk_window_get_title(window)); | |
477 gtk_window_set_title(window, newtitle); | |
478 } | |
479 | |
480 static void | |
11581 | 481 handle_count(GaimGtkWindow *gaimwin) |
9298 | 482 { |
483 GtkWindow *window; | |
484 char newtitle[256]; | |
485 | |
486 g_return_if_fail(gaimwin != NULL); | |
487 | |
11581 | 488 window = GTK_WINDOW(gaimwin->window); |
9298 | 489 g_return_if_fail(window != NULL); |
490 | |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
491 g_snprintf(newtitle, sizeof(newtitle), "[%d] %s", |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
492 count_messages(gaimwin), gtk_window_get_title(window)); |
9298 | 493 gtk_window_set_title(window, newtitle); |
494 } | |
495 | |
496 static void | |
11581 | 497 handle_urgent(GaimGtkWindow *win, gboolean add) |
6977 | 498 { |
12959
acf22abb86ba
[gaim-migrate @ 15312]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12604
diff
changeset
|
499 #ifndef _WIN32 |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
500 XWMHints *hints; |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
501 |
11581 | 502 g_return_if_fail(win != NULL); |
503 g_return_if_fail(win->window != NULL); | |
504 g_return_if_fail(win->window->window != NULL); | |
9298 | 505 |
11581 | 506 hints = XGetWMHints(GDK_WINDOW_XDISPLAY(win->window->window), |
507 GDK_WINDOW_XWINDOW(win->window->window)); | |
12184
5cd2294127e8
[gaim-migrate @ 14486]
Richard Laager <rlaager@wiktel.com>
parents:
11728
diff
changeset
|
508 if(!hints) |
5cd2294127e8
[gaim-migrate @ 14486]
Richard Laager <rlaager@wiktel.com>
parents:
11728
diff
changeset
|
509 hints = XAllocWMHints(); |
12286
255e6912607b
[gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12184
diff
changeset
|
510 |
6977 | 511 if (add) |
512 hints->flags |= XUrgencyHint; | |
513 else | |
514 hints->flags &= ~XUrgencyHint; | |
11581 | 515 XSetWMHints(GDK_WINDOW_XDISPLAY(win->window->window), |
516 GDK_WINDOW_XWINDOW(win->window->window), hints); | |
4218 | 517 XFree(hints); |
12959
acf22abb86ba
[gaim-migrate @ 15312]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12604
diff
changeset
|
518 #endif |
4035 | 519 } |
520 | |
6977 | 521 static void |
11581 | 522 handle_raise(GaimGtkWindow *gaimwin) |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
523 { |
11581 | 524 gaim_gtk_conv_window_raise(gaimwin); |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
525 } |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
526 |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
527 static void |
6977 | 528 type_toggle_cb(GtkWidget *widget, gpointer data) |
529 { | |
530 gboolean on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); | |
531 gchar pref[256]; | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4218
diff
changeset
|
532 |
6977 | 533 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
|
534 |
6977 | 535 gaim_prefs_set_bool(pref, on); |
3374 | 536 } |
537 | |
6977 | 538 static void |
539 method_toggle_cb(GtkWidget *widget, gpointer data) | |
540 { | |
541 gboolean on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); | |
542 gchar pref[256]; | |
543 | |
544 g_snprintf(pref, sizeof(pref), "/plugins/gtk/X11/notify/%s", (char *)data); | |
3374 | 545 |
6977 | 546 gaim_prefs_set_bool(pref, on); |
547 | |
548 if (!strcmp(data, "method_string")) { | |
549 GtkWidget *entry = g_object_get_data(G_OBJECT(widget), "title-entry"); | |
550 gtk_widget_set_sensitive(entry, on); | |
551 | |
552 gaim_prefs_set_string("/plugins/gtk/X11/notify/title_string", gtk_entry_get_text(GTK_ENTRY(entry))); | |
553 } | |
554 | |
555 apply_method(); | |
3374 | 556 } |
557 | |
6977 | 558 static void |
559 notify_toggle_cb(GtkWidget *widget, gpointer data) | |
560 { | |
561 gboolean on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); | |
562 gchar pref[256]; | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
563 |
6977 | 564 g_snprintf(pref, sizeof(pref), "/plugins/gtk/X11/notify/%s", (char *)data); |
3374 | 565 |
6977 | 566 gaim_prefs_set_bool(pref, on); |
567 | |
568 apply_notify(); | |
3374 | 569 } |
570 | |
6977 | 571 static gboolean |
572 options_entry_cb(GtkWidget *widget, GdkEventFocus *evt, gpointer data) | |
573 { | |
574 if (data == NULL) | |
6982 | 575 return FALSE; |
6302 | 576 |
6977 | 577 if (!strcmp(data, "method_string")) { |
578 gaim_prefs_set_string("/plugins/gtk/X11/notify/title_string", gtk_entry_get_text(GTK_ENTRY(widget))); | |
3374 | 579 } |
6302 | 580 |
6977 | 581 apply_method(); |
6302 | 582 |
583 return FALSE; | |
584 } | |
585 | |
6977 | 586 static void |
587 apply_method() { | |
588 GList *convs = gaim_get_conversations(); | |
11581 | 589 GaimGtkWindow *gaimwin = NULL; |
6977 | 590 |
9298 | 591 for (convs = gaim_get_conversations(); convs != NULL; convs = convs->next) { |
6977 | 592 GaimConversation *conv = (GaimConversation *)convs->data; |
6302 | 593 |
6977 | 594 /* remove notifications */ |
9298 | 595 unnotify(conv, FALSE); |
596 | |
11581 | 597 gaimwin = GAIM_GTK_CONVERSATION(conv)->win; |
9298 | 598 if (GPOINTER_TO_INT(gaim_conversation_get_data(conv, "notify-message-count")) != 0) |
6977 | 599 /* reattach appropriate notifications */ |
600 notify(conv, FALSE); | |
601 } | |
3374 | 602 } |
603 | |
6977 | 604 static void |
605 apply_notify() | |
606 { | |
607 GList *convs = gaim_get_conversations(); | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
608 |
6977 | 609 while (convs) { |
610 GaimConversation *conv = (GaimConversation *)convs->data; | |
4203
ec6d0c5e5c23
[gaim-migrate @ 4439]
Christian Hammond <chipx86@chipx86.com>
parents:
4202
diff
changeset
|
611 |
6977 | 612 /* detach signals */ |
613 detach_signals(conv); | |
614 /* reattach appropriate signals */ | |
615 attach_signals(conv); | |
4035 | 616 |
6977 | 617 convs = convs->next; |
4035 | 618 } |
619 } | |
620 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
621 static GtkWidget * |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
622 get_config_frame(GaimPlugin *plugin) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
623 { |
6977 | 624 GtkWidget *ret = NULL, *frame = NULL; |
625 GtkWidget *vbox = NULL, *hbox = NULL; | |
626 GtkWidget *toggle = NULL, *entry = NULL; | |
6302 | 627 |
3565 | 628 ret = gtk_vbox_new(FALSE, 18); |
6302 | 629 gtk_container_set_border_width(GTK_CONTAINER (ret), 12); |
3392 | 630 |
6302 | 631 /*---------- "Notify For" ----------*/ |
632 frame = gaim_gtk_make_frame(ret, _("Notify For")); | |
633 vbox = gtk_vbox_new(FALSE, 5); | |
634 gtk_container_add(GTK_CONTAINER(frame), vbox); | |
635 | |
3710 | 636 toggle = gtk_check_button_new_with_mnemonic(_("_IM windows")); |
637 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
6977 | 638 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), |
9298 | 639 gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_im")); |
6977 | 640 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 641 G_CALLBACK(type_toggle_cb), "type_im"); |
3710 | 642 |
6977 | 643 toggle = gtk_check_button_new_with_mnemonic(_("C_hat windows")); |
3710 | 644 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); |
6977 | 645 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), |
9298 | 646 gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_chat")); |
6977 | 647 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 648 G_CALLBACK(type_toggle_cb), "type_chat"); |
6977 | 649 |
650 toggle = gtk_check_button_new_with_mnemonic(_("_Focused windows")); | |
651 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
652 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 653 gaim_prefs_get_bool("/plugins/gtk/X11/notify/type_focused")); |
6977 | 654 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 655 G_CALLBACK(type_toggle_cb), "type_focused"); |
3710 | 656 |
6302 | 657 /*---------- "Notification Methods" ----------*/ |
658 frame = gaim_gtk_make_frame(ret, _("Notification Methods")); | |
659 vbox = gtk_vbox_new(FALSE, 5); | |
660 gtk_container_add(GTK_CONTAINER(frame), vbox); | |
661 | |
6977 | 662 /* String method button */ |
3565 | 663 hbox = gtk_hbox_new(FALSE, 18); |
664 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | |
6302 | 665 toggle = gtk_check_button_new_with_mnemonic(_("Prepend _string into window title:")); |
6977 | 666 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), |
9298 | 667 gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_string")); |
3565 | 668 gtk_box_pack_start(GTK_BOX(hbox), toggle, FALSE, FALSE, 0); |
6977 | 669 |
6302 | 670 entry = gtk_entry_new(); |
671 gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0); | |
672 gtk_entry_set_max_length(GTK_ENTRY(entry), 10); | |
6977 | 673 gtk_widget_set_sensitive(GTK_WIDGET(entry), |
9298 | 674 gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_string")); |
6977 | 675 gtk_entry_set_text(GTK_ENTRY(entry), |
9298 | 676 gaim_prefs_get_string("/plugins/gtk/X11/notify/title_string")); |
6977 | 677 g_object_set_data(G_OBJECT(toggle), "title-entry", entry); |
678 g_signal_connect(G_OBJECT(toggle), "toggled", | |
9298 | 679 G_CALLBACK(method_toggle_cb), "method_string"); |
6977 | 680 g_signal_connect(G_OBJECT(entry), "focus-out-event", |
9298 | 681 G_CALLBACK(options_entry_cb), "method_string"); |
3374 | 682 |
6977 | 683 /* Count method button */ |
684 toggle = gtk_check_button_new_with_mnemonic(_("Insert c_ount of new messages into window title")); | |
685 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 686 gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_count")); |
6977 | 687 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); |
688 g_signal_connect(G_OBJECT(toggle), "toggled", | |
9298 | 689 G_CALLBACK(method_toggle_cb), "method_count"); |
4035 | 690 |
12959
acf22abb86ba
[gaim-migrate @ 15312]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12604
diff
changeset
|
691 #ifndef _WIN32 |
6977 | 692 /* Urgent method button */ |
693 toggle = gtk_check_button_new_with_mnemonic(_("Set window manager \"_URGENT\" hint")); | |
694 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
695 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 696 gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_urgent")); |
697 g_signal_connect(G_OBJECT(toggle), "toggled", | |
698 G_CALLBACK(method_toggle_cb), "method_urgent"); | |
12959
acf22abb86ba
[gaim-migrate @ 15312]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12604
diff
changeset
|
699 #endif |
3710 | 700 |
10606
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
701 /* Raise window method button */ |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
702 toggle = gtk_check_button_new_with_mnemonic(_("R_aise conversation window")); |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
703 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
704 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
705 gaim_prefs_get_bool("/plugins/gtk/X11/notify/method_raise")); |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
706 g_signal_connect(G_OBJECT(toggle), "toggled", |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
707 G_CALLBACK(method_toggle_cb), "method_raise"); |
1a65fc2d7978
[gaim-migrate @ 12039]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10492
diff
changeset
|
708 |
6977 | 709 /*---------- "Notification Removals" ----------*/ |
6302 | 710 frame = gaim_gtk_make_frame(ret, _("Notification Removal")); |
711 vbox = gtk_vbox_new(FALSE, 5); | |
712 gtk_container_add(GTK_CONTAINER(frame), vbox); | |
3374 | 713 |
6977 | 714 /* Remove on focus button */ |
715 toggle = gtk_check_button_new_with_mnemonic(_("Remove when conversation window _gains focus")); | |
716 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
717 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 718 gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_focus")); |
6977 | 719 g_signal_connect(G_OBJECT(toggle), "toggled", G_CALLBACK(notify_toggle_cb), "notify_focus"); |
720 | |
721 /* Remove on click button */ | |
722 toggle = gtk_check_button_new_with_mnemonic(_("Remove when conversation window _receives click")); | |
723 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
724 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 725 gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_click")); |
6977 | 726 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 727 G_CALLBACK(notify_toggle_cb), "notify_click"); |
3710 | 728 |
6977 | 729 /* Remove on type button */ |
730 toggle = gtk_check_button_new_with_mnemonic(_("Remove when _typing in conversation window")); | |
731 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
732 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 733 gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_type")); |
6977 | 734 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 735 G_CALLBACK(notify_toggle_cb), "notify_type"); |
4035 | 736 |
6977 | 737 /* Remove on message send button */ |
738 toggle = gtk_check_button_new_with_mnemonic(_("Remove when a _message gets sent")); | |
739 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
740 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), | |
9298 | 741 gaim_prefs_get_bool("/plugins/gtk/X11/notify/notify_send")); |
6977 | 742 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 743 G_CALLBACK(notify_toggle_cb), "notify_send"); |
3565 | 744 |
6977 | 745 #if 0 |
746 /* Remove on conversation switch button */ | |
9298 | 747 toggle = gtk_check_button_new_with_mnemonic(_("Remove on switch to conversation ta_b")); |
6977 | 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_switch")); |
6977 | 751 g_signal_connect(G_OBJECT(toggle), "toggled", |
9298 | 752 G_CALLBACK(notify_toggle_cb), "notify_switch"); |
6977 | 753 #endif |
754 | |
755 gtk_widget_show_all(ret); | |
756 return ret; | |
3374 | 757 } |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
758 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
759 static gboolean |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
760 plugin_load(GaimPlugin *plugin) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
761 { |
6977 | 762 GList *convs = gaim_get_conversations(); |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
763 void *conv_handle = gaim_conversations_get_handle(); |
9298 | 764 void *gtk_conv_handle = gaim_gtk_conversations_get_handle(); |
6302 | 765 |
766 my_plugin = plugin; | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
767 |
12604
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
768 gaim_signal_connect(gtk_conv_handle, "displayed-im-msg", plugin, |
12968
384661a6ead6
[gaim-migrate @ 15321]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12959
diff
changeset
|
769 GAIM_CALLBACK(message_displayed_cb), NULL); |
12604
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
770 gaim_signal_connect(gtk_conv_handle, "displayed-chat-msg", plugin, |
12968
384661a6ead6
[gaim-migrate @ 15321]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12959
diff
changeset
|
771 GAIM_CALLBACK(message_displayed_cb), NULL); |
384661a6ead6
[gaim-migrate @ 15321]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12959
diff
changeset
|
772 gaim_signal_connect(gtk_conv_handle, "conversation-switched", plugin, |
384661a6ead6
[gaim-migrate @ 15321]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12959
diff
changeset
|
773 GAIM_CALLBACK(conv_switched), NULL); |
6977 | 774 gaim_signal_connect(conv_handle, "sent-im-msg", plugin, |
9298 | 775 GAIM_CALLBACK(im_sent_im), NULL); |
6977 | 776 gaim_signal_connect(conv_handle, "sent-chat-msg", plugin, |
9298 | 777 GAIM_CALLBACK(chat_sent_im), NULL); |
6977 | 778 gaim_signal_connect(conv_handle, "conversation-created", plugin, |
9298 | 779 GAIM_CALLBACK(conv_created), NULL); |
6977 | 780 gaim_signal_connect(conv_handle, "chat-joined", plugin, |
9298 | 781 GAIM_CALLBACK(conv_created), NULL); |
6977 | 782 gaim_signal_connect(conv_handle, "deleting-conversation", plugin, |
9298 | 783 GAIM_CALLBACK(deleting_conv), NULL); |
10971 | 784 #if 0 |
11447
ef6e94bdda08
[gaim-migrate @ 13686]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11338
diff
changeset
|
785 gaim_signal_connect(gtk_conv_handle, "conversation-dragging", plugin, |
ef6e94bdda08
[gaim-migrate @ 13686]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11338
diff
changeset
|
786 GAIM_CALLBACK(conversation_dragging), NULL); |
9303 | 787 #endif |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
788 |
6977 | 789 while (convs) { |
790 GaimConversation *conv = (GaimConversation *)convs->data; | |
6302 | 791 |
792 /* attach signals */ | |
6977 | 793 attach_signals(conv); |
6302 | 794 |
6977 | 795 convs = convs->next; |
6302 | 796 } |
797 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
798 return TRUE; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
799 } |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
800 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
801 static gboolean |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
802 plugin_unload(GaimPlugin *plugin) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
803 { |
6977 | 804 GList *convs = gaim_get_conversations(); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
805 |
6977 | 806 while (convs) { |
807 GaimConversation *conv = (GaimConversation *)convs->data; | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
808 |
6302 | 809 /* kill signals */ |
6977 | 810 detach_signals(conv); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
811 |
6977 | 812 convs = convs->next; |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
813 } |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
814 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
815 return TRUE; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
816 } |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
817 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
818 static GaimGtkPluginUiInfo ui_info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
819 { |
12600
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12397
diff
changeset
|
820 get_config_frame, |
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12397
diff
changeset
|
821 0 /* page_num (Reserved) */ |
5205
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 GaimPluginInfo info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
825 { |
9943 | 826 GAIM_PLUGIN_MAGIC, |
827 GAIM_MAJOR_VERSION, | |
828 GAIM_MINOR_VERSION, | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
829 GAIM_PLUGIN_STANDARD, /**< type */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
830 GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
831 0, /**< flags */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
832 NULL, /**< dependencies */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
833 GAIM_PRIORITY_DEFAULT, /**< priority */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
834 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
835 NOTIFY_PLUGIN_ID, /**< id */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
836 N_("Message Notification"), /**< name */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
837 VERSION, /**< version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
838 /** summary */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
839 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
|
840 /** description */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
841 N_("Provides a variety of ways of notifying you of unread messages."), |
9298 | 842 "Etan Reisner <deryni@eden.rutgers.edu>\n\t\t\tBrian Tarricone <bjt23@cornell.edu>", |
6302 | 843 /**< author */ |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6464
diff
changeset
|
844 GAIM_WEBSITE, /**< homepage */ |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
845 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
846 plugin_load, /**< load */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
847 plugin_unload, /**< unload */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
848 NULL, /**< destroy */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
849 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
850 &ui_info, /**< ui_info */ |
8993 | 851 NULL, /**< extra_info */ |
852 NULL, | |
853 NULL | |
5205
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 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
856 static void |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
857 init_plugin(GaimPlugin *plugin) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
858 { |
6302 | 859 gaim_prefs_add_none("/plugins/gtk"); |
860 gaim_prefs_add_none("/plugins/gtk/X11"); | |
861 gaim_prefs_add_none("/plugins/gtk/X11/notify"); | |
862 | |
6464 | 863 gaim_prefs_add_bool("/plugins/gtk/X11/notify/type_im", TRUE); |
864 gaim_prefs_add_bool("/plugins/gtk/X11/notify/type_chat", FALSE); | |
865 gaim_prefs_add_bool("/plugins/gtk/X11/notify/type_focused", FALSE); | |
6302 | 866 gaim_prefs_add_bool("/plugins/gtk/X11/notify/method_string", FALSE); |
867 gaim_prefs_add_string("/plugins/gtk/X11/notify/title_string", "(*)"); | |
868 gaim_prefs_add_bool("/plugins/gtk/X11/notify/method_urgent", FALSE); | |
869 gaim_prefs_add_bool("/plugins/gtk/X11/notify/method_count", FALSE); | |
10492 | 870 gaim_prefs_add_bool("/plugins/gtk/X11/notify/method_raise", FALSE); |
6302 | 871 gaim_prefs_add_bool("/plugins/gtk/X11/notify/notify_focus", FALSE); |
872 gaim_prefs_add_bool("/plugins/gtk/X11/notify/notify_click", FALSE); | |
873 gaim_prefs_add_bool("/plugins/gtk/X11/notify/notify_type", TRUE); | |
6464 | 874 gaim_prefs_add_bool("/plugins/gtk/X11/notify/notify_send", TRUE); |
875 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
|
876 } |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5021
diff
changeset
|
877 |
6063 | 878 GAIM_INIT_PLUGIN(notify, init_plugin, info) |