Mercurial > pidgin
comparison src/pounce.c @ 4687:283fb289c510
[gaim-migrate @ 4998]
This is a new buddy list.
Lots of things about it just Don't Work. I probably already know about those
things, and you'd just be wasting my time in submitting a bug report about it.
I decided that instead of getting it to all work perfectly before committing,
that I'd get it in cvs, and slowly fix it with regular commits. That way, it's
easier to keep track of things, and other developers can help. Plus, I'm getting
pissed off at the buddy list and want it to die. It's kinda boring, and doing nothing
but the buddy list for such a long time has just gotten me very bitter.
After 0.60 is released later this week, Gaim will resume being fun. This week is
going to be very stressful, though, I'm sure.
Things you ought to know about this buddy list:
- It crashes
- It leaks
- There's no way to edit the buddy list, or access offline buddies
- Most of the menus and buttons and whatnot just plain ol' don't work.
- Status icons are only implemented for AIM.
That's mostly just because I'm lazy. As such, you may want to be wary of updating this.
If you do decide to update this, you may want to learn "cvs update -D yesterday" as well :)
All the art there is just placeholder art.
You probably won't really have as many problems as it sounds like you will from reading this.
This message is extra-negative to stress that I don't want to be bothered with complaints about
something not working about it :). I'll repeat: If something doesn't work, I probably already
know about it.
If you want to actually help with something, I'd be delighted to have it. IM me.
-s.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Mon, 10 Mar 2003 05:30:31 +0000 |
parents | |
children | e19f91053ad0 |
comparison
equal
deleted
inserted
replaced
4686:a1de8a9c99ba | 4687:283fb289c510 |
---|---|
1 /* | |
2 * gaim | |
3 * | |
4 * Copyright (C) 1998-2003, Mark Spencer <markster@marko.net> | |
5 * | |
6 * This program is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
11 * This program is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License | |
17 * along with this program; if not, write to the Free Software | |
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
19 * | |
20 */ | |
21 | |
22 #include <stdlib.h> | |
23 #include <string.h> | |
24 #include <sys/types.h> | |
25 #include <unistd.h> | |
26 | |
27 #include "gaim.h" | |
28 #include "prpl.h" | |
29 #include "pounce.h" | |
30 | |
31 GtkWidget *bpmenu = NULL; | |
32 | |
33 void rem_bp(GtkWidget *w, struct buddy_pounce *b) | |
34 { | |
35 buddy_pounces = g_list_remove(buddy_pounces, b); | |
36 //do_bp_menu(); | |
37 save_prefs(); | |
38 } | |
39 | |
40 void do_pounce(struct gaim_connection *gc, char *name, int when) | |
41 { | |
42 char *who; | |
43 | |
44 struct buddy_pounce *b; | |
45 struct gaim_conversation *c; | |
46 struct gaim_account *account; | |
47 | |
48 GList *bp = buddy_pounces; | |
49 | |
50 who = g_strdup(normalize (name)); | |
51 | |
52 while (bp) { | |
53 b = (struct buddy_pounce *)bp->data; | |
54 bp = bp->next; /* increment the list here because rem_bp can make our handle bad */ | |
55 | |
56 if (!(b->options & when)) | |
57 continue; | |
58 | |
59 account = gaim_account_find(b->pouncer, b->protocol); /* find our user */ | |
60 if (account == NULL) | |
61 continue; | |
62 | |
63 /* check and see if we're signed on as the pouncer */ | |
64 if (account->gc != gc) | |
65 continue; | |
66 | |
67 if (!g_strcasecmp(who, normalize (b->name))) { /* find someone to pounce */ | |
68 if (b->options & OPT_POUNCE_POPUP) { | |
69 c = gaim_find_conversation(name); | |
70 | |
71 if (c == NULL) | |
72 c = gaim_conversation_new(GAIM_CONV_IM, account, name); | |
73 else | |
74 gaim_conversation_set_account(c, account); | |
75 } | |
76 if (b->options & OPT_POUNCE_NOTIFY) { | |
77 char tmp[1024]; | |
78 | |
79 /* I know the line below is really ugly. I only did it this way | |
80 * because I thought it'd be funny :-) */ | |
81 | |
82 g_snprintf(tmp, sizeof(tmp), | |
83 (when & OPT_POUNCE_TYPING) ? _("%s has started typing to you") : | |
84 (when & OPT_POUNCE_SIGNON) ? _("%s has signed on") : | |
85 (when & OPT_POUNCE_UNIDLE) ? _("%s has returned from being idle") : | |
86 _("%s has returned from being away"), name); | |
87 | |
88 do_error_dialog(tmp, NULL, GAIM_INFO); | |
89 } | |
90 if (b->options & OPT_POUNCE_SEND_IM) { | |
91 if (strlen(b->message) > 0) { | |
92 c = gaim_find_conversation(name); | |
93 | |
94 if (c == NULL) | |
95 c = gaim_conversation_new(GAIM_CONV_IM, account, name); | |
96 else | |
97 gaim_conversation_set_account(c, account); | |
98 | |
99 gaim_conversation_write(c, NULL, b->message, -1, | |
100 WFLAG_SEND, time(NULL)); | |
101 | |
102 serv_send_im(account->gc, name, b->message, -1, 0); | |
103 } | |
104 } | |
105 if (b->options & OPT_POUNCE_COMMAND) { | |
106 #ifndef _WIN32 | |
107 int pid = fork(); | |
108 | |
109 if (pid == 0) { | |
110 char *args[4]; | |
111 args[0] = "sh"; | |
112 args[1] = "-c"; | |
113 args[2] = b->command; | |
114 args[3] = NULL; | |
115 execvp(args[0], args); | |
116 _exit(0); | |
117 } | |
118 #else | |
119 STARTUPINFO si; | |
120 PROCESS_INFORMATION pi; | |
121 | |
122 ZeroMemory( &si, sizeof(si) ); | |
123 si.cb = sizeof(si); | |
124 ZeroMemory( &pi, sizeof(pi) ); | |
125 | |
126 CreateProcess( NULL, b->command, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ); | |
127 CloseHandle( pi.hProcess ); | |
128 CloseHandle( pi.hThread ); | |
129 #endif /*_WIN32*/ | |
130 } | |
131 /* if (b->options & OPT_POUNCE_SOUND) { | |
132 if (strlen(b->sound)) | |
133 play_file(b->sound); | |
134 else | |
135 play_sound(SND_POUNCE_DEFAULT); | |
136 }*/ | |
137 | |
138 if (!(b->options & OPT_POUNCE_SAVE)) | |
139 rem_bp(NULL, b); | |
140 | |
141 } | |
142 } | |
143 g_free(who); | |
144 } | |
145 | |
146 static void new_bp_callback(GtkWidget *w, struct buddy *b) | |
147 { | |
148 if (b) | |
149 show_new_bp(b->name, b->account->gc, b->idle, b->uc & UC_UNAVAILABLE, NULL); | |
150 else | |
151 show_new_bp(NULL, NULL, 0, 0, NULL); | |
152 } | |
153 | |
154 static void edit_bp_callback(GtkWidget *w, struct buddy_pounce *b) | |
155 { | |
156 show_new_bp(NULL, NULL, 0, 0, b); | |
157 } | |
158 | |
159 /*static GtkTooltips *bp_tooltip = NULL; | |
160 void do_bp_menu() | |
161 { | |
162 GtkWidget *menuitem, *mess, *messmenu; | |
163 static GtkWidget *remmenu; | |
164 GtkWidget *remitem; | |
165 GtkWidget *sep; | |
166 GList *l; | |
167 struct buddy_pounce *b; | |
168 GList *bp = buddy_pounces; | |
169 | |
170 /* Tooltip for editing bp's | |
171 if(!bp_tooltip) | |
172 bp_tooltip = gtk_tooltips_new(); | |
173 | |
174 l = gtk_container_children(GTK_CONTAINER(bpmenu)); | |
175 | |
176 while (l) { | |
177 gtk_widget_destroy(GTK_WIDGET(l->data)); | |
178 l = l->next; | |
179 } | |
180 | |
181 remmenu = gtk_menu_new(); | |
182 | |
183 menuitem = gtk_menu_item_new_with_label(_("New Buddy Pounce")); | |
184 gtk_menu_shell_append(GTK_MENU(bpmenu), menuitem); | |
185 gtk_widget_show(menuitem); | |
186 g_signal_connect(GTK_OBJECT(menuitem), "activate", G_CALLBACK(new_bp_callback), NULL); | |
187 | |
188 | |
189 while (bp) { | |
190 | |
191 b = (struct buddy_pounce *)bp->data; | |
192 remitem = gtk_menu_item_new_with_label(b->name); | |
193 gtk_menu_shell_append(GTK_MENU(remmenu), remitem); | |
194 gtk_widget_show(remitem); | |
195 g_signal_connect(GTK_OBJECT(remitem), "activate", G_CALLBACK(rem_bp), b); | |
196 | |
197 bp = bp->next; | |
198 | |
199 } | |
200 | |
201 menuitem = gtk_menu_item_new_with_label(_("Remove Buddy Pounce")); | |
202 gtk_menu_shell_append(GTK_MENU(bpmenu), menuitem); | |
203 gtk_widget_show(menuitem); | |
204 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), remmenu); | |
205 gtk_widget_show(remmenu); | |
206 | |
207 sep = gtk_hseparator_new(); | |
208 menuitem = gtk_menu_item_new(); | |
209 gtk_menu_shell_append(GTK_MENU(bpmenu), menuitem); | |
210 gtk_container_add(GTK_CONTAINER(menuitem), sep); | |
211 gtk_widget_set_sensitive(menuitem, FALSE); | |
212 gtk_widget_show(menuitem); | |
213 gtk_widget_show(sep); | |
214 | |
215 bp = buddy_pounces; | |
216 | |
217 while (bp) { | |
218 | |
219 b = (struct buddy_pounce *)bp->data; | |
220 | |
221 menuitem = gtk_menu_item_new_with_label(b->name); | |
222 gtk_menu_shell_append(GTK_MENU(bpmenu), menuitem); | |
223 messmenu = gtk_menu_new(); | |
224 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), messmenu); | |
225 gtk_widget_show(menuitem); | |
226 | |
227 if (strlen(b->message)) | |
228 mess = gtk_menu_item_new_with_label(b->message); | |
229 else | |
230 mess = gtk_menu_item_new_with_label(_("[no message]")); | |
231 gtk_menu_shell_append(GTK_MENU(messmenu), mess); | |
232 gtk_tooltips_set_tip(bp_tooltip, GTK_WIDGET(mess), _("[Click to edit]"), NULL); | |
233 gtk_widget_show(mess); | |
234 g_signal_connect(GTK_OBJECT(mess), "activate", G_CALLBACK(edit_bp_callback), b); | |
235 bp = bp->next; | |
236 | |
237 } | |
238 | |
239 } | |
240 */ | |
241 /*------------------------------------------------------------------------*/ | |
242 /* The dialog for new buddy pounces */ | |
243 /*------------------------------------------------------------------------*/ | |
244 | |
245 | |
246 void do_new_bp(GtkWidget *w, struct addbp *b) | |
247 { | |
248 struct buddy_pounce *bp; | |
249 | |
250 if (strlen(gtk_entry_get_text(GTK_ENTRY(b->nameentry))) == 0) { | |
251 do_error_dialog(_("Please enter a buddy to pounce."), NULL, GAIM_ERROR); | |
252 return; | |
253 } | |
254 | |
255 if(!b->buddy_pounce) | |
256 bp = g_new0(struct buddy_pounce, 1); | |
257 else | |
258 bp = b->buddy_pounce; | |
259 | |
260 | |
261 g_snprintf(bp->name, 80, "%s", gtk_entry_get_text(GTK_ENTRY(b->nameentry))); | |
262 g_snprintf(bp->message, 2048, "%s", gtk_entry_get_text(GTK_ENTRY(b->messentry))); | |
263 g_snprintf(bp->command, 2048, "%s", gtk_entry_get_text(GTK_ENTRY(b->commentry))); | |
264 g_snprintf(bp->sound, 2048, "%s", gtk_entry_get_text(GTK_ENTRY(b->soundentry))); | |
265 g_snprintf(bp->pouncer, 80, "%s", b->account->username); | |
266 | |
267 bp->protocol = b->account->protocol; | |
268 | |
269 bp->options = 0; | |
270 | |
271 if (GTK_TOGGLE_BUTTON(b->popupnotify)->active) | |
272 bp->options |= OPT_POUNCE_NOTIFY; | |
273 | |
274 if (GTK_TOGGLE_BUTTON(b->openwindow)->active) | |
275 bp->options |= OPT_POUNCE_POPUP; | |
276 | |
277 if (GTK_TOGGLE_BUTTON(b->sendim)->active) | |
278 bp->options |= OPT_POUNCE_SEND_IM; | |
279 | |
280 if (GTK_TOGGLE_BUTTON(b->command)->active) | |
281 bp->options |= OPT_POUNCE_COMMAND; | |
282 | |
283 if (GTK_TOGGLE_BUTTON(b->sound)->active) | |
284 bp->options |= OPT_POUNCE_SOUND; | |
285 | |
286 if (GTK_TOGGLE_BUTTON(b->p_signon)->active) | |
287 bp->options |= OPT_POUNCE_SIGNON; | |
288 | |
289 if (GTK_TOGGLE_BUTTON(b->p_unaway)->active) | |
290 bp->options |= OPT_POUNCE_UNAWAY; | |
291 | |
292 if (GTK_TOGGLE_BUTTON(b->p_unidle)->active) | |
293 bp->options |= OPT_POUNCE_UNIDLE; | |
294 | |
295 if (GTK_TOGGLE_BUTTON(b->p_typing)->active) | |
296 bp->options |= OPT_POUNCE_TYPING; | |
297 | |
298 if (GTK_TOGGLE_BUTTON(b->save)->active) | |
299 bp->options |= OPT_POUNCE_SAVE; | |
300 | |
301 if(!b->buddy_pounce) | |
302 buddy_pounces = g_list_append(buddy_pounces, bp); | |
303 | |
304 // do_bp_menu(); | |
305 | |
306 gtk_widget_destroy(b->window); | |
307 | |
308 save_prefs(); | |
309 g_free(b); | |
310 } | |
311 | |
312 static void pounce_choose(GtkWidget *opt, struct addbp *b) | |
313 { | |
314 struct gaim_account *account = gtk_object_get_user_data(GTK_OBJECT(opt)); | |
315 b->account = account; | |
316 } | |
317 | |
318 static GtkWidget *pounce_user_menu(struct addbp *b, struct gaim_connection *gc) | |
319 { | |
320 GtkWidget *optmenu; | |
321 GtkWidget *menu; | |
322 GtkWidget *opt; | |
323 GSList *u = gaim_accounts; | |
324 struct gaim_account *account; | |
325 struct prpl *p; | |
326 int count = 0; | |
327 int place = 0; | |
328 char buf[2048]; | |
329 | |
330 | |
331 optmenu = gtk_option_menu_new(); | |
332 | |
333 menu = gtk_menu_new(); | |
334 | |
335 while (u) { | |
336 account = (struct gaim_account *)u->data; | |
337 p = (struct prpl *)find_prpl(account->protocol); | |
338 g_snprintf(buf, sizeof buf, "%s (%s)", account->username, (p && p->name)?p->name:_("Unknown")); | |
339 opt = gtk_menu_item_new_with_label(buf); | |
340 gtk_object_set_user_data(GTK_OBJECT(opt), account); | |
341 g_signal_connect(GTK_OBJECT(opt), "activate", G_CALLBACK(pounce_choose), b); | |
342 gtk_menu_shell_append(GTK_MENU(menu), opt); | |
343 gtk_widget_show(opt); | |
344 | |
345 if (b->account == account) { | |
346 gtk_menu_item_activate(GTK_MENU_ITEM(opt)); | |
347 place = count; | |
348 } | |
349 | |
350 count++; | |
351 | |
352 u = u->next; | |
353 } | |
354 | |
355 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu); | |
356 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), place); | |
357 | |
358 b->menu = optmenu; | |
359 | |
360 return optmenu; | |
361 } | |
362 | |
363 | |
364 void show_new_bp(char *name, struct gaim_connection *gc, int idle, int away, struct buddy_pounce *edit_bp) | |
365 { | |
366 GtkWidget *label; | |
367 GtkWidget *bbox; | |
368 GtkWidget *vbox; | |
369 GtkWidget *button; | |
370 GtkWidget *frame; | |
371 GtkWidget *table; | |
372 GtkWidget *optmenu; | |
373 GtkWidget *sep; | |
374 GtkSizeGroup *sg; | |
375 | |
376 struct addbp *b = g_new0(struct addbp, 1); | |
377 | |
378 if(edit_bp) { | |
379 b->buddy_pounce = edit_bp; | |
380 b->account = gaim_account_find(edit_bp->pouncer, edit_bp->protocol); | |
381 } else { | |
382 b->account = gc ? gc->account : gaim_accounts->data; | |
383 b->buddy_pounce = NULL; | |
384 } | |
385 | |
386 GAIM_DIALOG(b->window); | |
387 gtk_window_set_policy(GTK_WINDOW(b->window), FALSE, TRUE, TRUE); | |
388 gtk_window_set_role(GTK_WINDOW(b->window), "new_bp"); | |
389 gtk_window_set_title(GTK_WINDOW(b->window), _("Gaim - New Buddy Pounce")); | |
390 g_signal_connect(GTK_OBJECT(b->window), "destroy", G_CALLBACK(gtk_widget_destroy), b->window); | |
391 gtk_widget_realize(b->window); | |
392 | |
393 vbox = gtk_vbox_new(FALSE, 5); | |
394 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); | |
395 gtk_container_add(GTK_CONTAINER(b->window), vbox); | |
396 gtk_widget_show(vbox); | |
397 | |
398 /* <pounce type="who"> */ | |
399 frame = gtk_frame_new(_("Pounce Who")); | |
400 gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0); | |
401 gtk_widget_show(GTK_WIDGET(frame)); | |
402 | |
403 table = gtk_table_new(2, 2, FALSE); | |
404 gtk_container_add(GTK_CONTAINER(frame), table); | |
405 gtk_container_set_border_width(GTK_CONTAINER(table), 5); | |
406 gtk_table_set_col_spacings(GTK_TABLE(table), 5); | |
407 gtk_table_set_row_spacings(GTK_TABLE(table), 5); | |
408 gtk_widget_show(table); | |
409 | |
410 label = gtk_label_new(_("Account")); | |
411 gtk_misc_set_alignment(GTK_MISC(label), 0, .5); | |
412 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); | |
413 gtk_widget_show(label); | |
414 | |
415 optmenu = pounce_user_menu(b, gc); | |
416 gtk_table_attach(GTK_TABLE(table), optmenu, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, 0, 0, 0); | |
417 gtk_widget_show(optmenu); | |
418 | |
419 label = gtk_label_new(_("Buddy")); | |
420 gtk_misc_set_alignment(GTK_MISC(label), 0, .5); | |
421 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_FILL, 0, 0, 0); | |
422 gtk_widget_show(label); | |
423 | |
424 b->nameentry = gtk_entry_new(); | |
425 gtk_table_attach(GTK_TABLE(table), b->nameentry, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, 0, 0, 0); | |
426 if (name !=NULL) | |
427 gtk_entry_set_text(GTK_ENTRY(b->nameentry), name); | |
428 else if(edit_bp) | |
429 gtk_entry_set_text(GTK_ENTRY(b->nameentry), edit_bp->name); | |
430 gtk_window_set_focus(GTK_WINDOW(b->window), b->nameentry); | |
431 gtk_widget_show(b->nameentry); | |
432 /* </pounce type="who"> */ | |
433 | |
434 | |
435 /* <pounce type="when"> */ | |
436 frame = gtk_frame_new(_("Pounce When")); | |
437 gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0); | |
438 gtk_widget_show(GTK_WIDGET(frame)); | |
439 | |
440 table = gtk_table_new(2, 2, FALSE); | |
441 gtk_container_add(GTK_CONTAINER(frame), table); | |
442 gtk_container_set_border_width(GTK_CONTAINER(table), 5); | |
443 gtk_table_set_col_spacings(GTK_TABLE(table), 5); | |
444 gtk_widget_show(table); | |
445 | |
446 b->p_signon = gtk_check_button_new_with_label(_("Pounce on sign on")); | |
447 if(edit_bp) | |
448 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->p_signon), | |
449 (edit_bp->options & OPT_POUNCE_SIGNON) ? TRUE : FALSE); | |
450 else | |
451 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->p_signon), TRUE); | |
452 gtk_table_attach(GTK_TABLE(table), b->p_signon, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); | |
453 gtk_widget_show(b->p_signon); | |
454 | |
455 b->p_unaway = gtk_check_button_new_with_label(_("Pounce on return from away")); | |
456 if (away) | |
457 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->p_unaway), TRUE); | |
458 else if(edit_bp) | |
459 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->p_unaway), | |
460 (edit_bp->options & OPT_POUNCE_UNAWAY) ? TRUE : FALSE); | |
461 gtk_table_attach(GTK_TABLE(table), b->p_unaway, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, 0, 0, 0); | |
462 gtk_widget_show(b->p_unaway); | |
463 | |
464 b->p_unidle = gtk_check_button_new_with_label(_("Pounce on return from idle")); | |
465 if (idle) | |
466 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->p_unidle), TRUE); | |
467 else if(edit_bp) | |
468 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->p_unidle), | |
469 (edit_bp->options & OPT_POUNCE_UNIDLE) ? TRUE : FALSE); | |
470 gtk_table_attach(GTK_TABLE(table), b->p_unidle, 0, 1, 1, 2, GTK_FILL, 0, 0, 0); | |
471 gtk_widget_show(b->p_unidle); | |
472 | |
473 b->p_typing = gtk_check_button_new_with_label(_("Pounce when buddy is typing to you")); | |
474 if (edit_bp) | |
475 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->p_typing), | |
476 (edit_bp->options & OPT_POUNCE_TYPING) ? TRUE : FALSE); | |
477 gtk_table_attach(GTK_TABLE(table), b->p_typing,1,2,1,2, GTK_FILL | GTK_EXPAND, 0, 0, 0); | |
478 gtk_widget_show(b->p_typing); | |
479 | |
480 /* </pounce type="when"> */ | |
481 | |
482 /* <pounce type="action"> */ | |
483 frame = gtk_frame_new(_("Pounce Action")); | |
484 gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0); | |
485 gtk_widget_show(GTK_WIDGET(frame)); | |
486 | |
487 table = gtk_table_new(4, 2, FALSE); | |
488 gtk_container_add(GTK_CONTAINER(frame), table); | |
489 gtk_container_set_border_width(GTK_CONTAINER(table), 5); | |
490 gtk_table_set_col_spacings(GTK_TABLE(table), 5); | |
491 gtk_table_set_row_spacings(GTK_TABLE(table), 5); | |
492 gtk_widget_show(table); | |
493 | |
494 b->openwindow = gtk_check_button_new_with_label(_("Open IM Window")); | |
495 if(edit_bp) | |
496 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->openwindow), | |
497 (edit_bp->options & OPT_POUNCE_POPUP) ? TRUE : FALSE); | |
498 else | |
499 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->openwindow), FALSE); | |
500 gtk_table_attach(GTK_TABLE(table), b->openwindow, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); | |
501 gtk_widget_show(b->openwindow); | |
502 | |
503 b->popupnotify = gtk_check_button_new_with_label(_("Popup Notification")); | |
504 if(edit_bp) | |
505 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->popupnotify), | |
506 (edit_bp->options & OPT_POUNCE_NOTIFY) ? TRUE : FALSE); | |
507 else | |
508 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->popupnotify), FALSE); | |
509 gtk_table_attach(GTK_TABLE(table), b->popupnotify, 1, 2, 0, 1, GTK_FILL, 0, 0, 0); | |
510 gtk_widget_show(b->popupnotify); | |
511 | |
512 b->sendim = gtk_check_button_new_with_label(_("Send Message")); | |
513 if(edit_bp) | |
514 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->sendim), | |
515 (edit_bp->options & OPT_POUNCE_SEND_IM) ? TRUE : FALSE); | |
516 else | |
517 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->sendim), TRUE); | |
518 gtk_table_attach(GTK_TABLE(table), b->sendim, 0, 1, 1, 2, GTK_FILL, 0, 0, 0); | |
519 gtk_widget_show(b->sendim); | |
520 | |
521 b->messentry = gtk_entry_new(); | |
522 gtk_table_attach(GTK_TABLE(table), b->messentry, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, 0, 0, 0); | |
523 g_signal_connect(GTK_OBJECT(b->messentry), "activate", G_CALLBACK(do_new_bp), b); | |
524 if(edit_bp) { | |
525 gtk_widget_set_sensitive(GTK_WIDGET(b->messentry), | |
526 (edit_bp->options & OPT_POUNCE_SEND_IM) ? TRUE : FALSE); | |
527 gtk_entry_set_text(GTK_ENTRY(b->messentry), edit_bp->message); | |
528 } | |
529 gtk_widget_show(b->messentry); | |
530 | |
531 g_signal_connect(GTK_OBJECT(b->sendim), "clicked", | |
532 G_CALLBACK(gaim_gtk_toggle_sensitive), b->messentry); | |
533 | |
534 b->command = gtk_check_button_new_with_label(_("Execute command on pounce")); | |
535 gtk_table_attach(GTK_TABLE(table), b->command, 0, 1, 2, 3, GTK_FILL, 0, 0, 0); | |
536 if(edit_bp) | |
537 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->command), | |
538 (edit_bp->options & OPT_POUNCE_COMMAND) ? TRUE : FALSE); | |
539 else | |
540 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->command), FALSE); | |
541 gtk_widget_show(b->command); | |
542 | |
543 b->commentry = gtk_entry_new(); | |
544 gtk_table_attach(GTK_TABLE(table), b->commentry, 1, 2, 2, 3, GTK_FILL | GTK_EXPAND, 0, 0, 0); | |
545 g_signal_connect(GTK_OBJECT(b->commentry), "activate", G_CALLBACK(do_new_bp), b); | |
546 if(edit_bp) { | |
547 gtk_widget_set_sensitive(GTK_WIDGET(b->commentry), | |
548 (edit_bp->options & OPT_POUNCE_COMMAND) ? TRUE : FALSE); | |
549 gtk_entry_set_text(GTK_ENTRY(b->commentry), edit_bp->command); | |
550 } | |
551 else | |
552 gtk_widget_set_sensitive(GTK_WIDGET(b->commentry), FALSE); | |
553 gtk_widget_show(b->commentry); | |
554 g_signal_connect(GTK_OBJECT(b->command), "clicked", | |
555 G_CALLBACK(gaim_gtk_toggle_sensitive), b->commentry); | |
556 | |
557 b->sound = gtk_check_button_new_with_label(_("Play sound on pounce")); | |
558 if(edit_bp) | |
559 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->sound), | |
560 (edit_bp->options & OPT_POUNCE_SOUND) ? TRUE : FALSE); | |
561 else | |
562 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->sound), FALSE); | |
563 gtk_table_attach(GTK_TABLE(table), b->sound, 0, 1, 3, 4, GTK_FILL, 0, 0, 0); | |
564 gtk_widget_show(b->sound); | |
565 | |
566 b->soundentry = gtk_entry_new(); | |
567 gtk_table_attach(GTK_TABLE(table), b->soundentry, 1, 2, 3, 4, GTK_FILL | GTK_EXPAND, 0, 0, 0); | |
568 g_signal_connect(GTK_OBJECT(b->soundentry), "activate", G_CALLBACK(do_new_bp), b); | |
569 if(edit_bp) { | |
570 gtk_widget_set_sensitive(GTK_WIDGET(b->soundentry), | |
571 (edit_bp->options & OPT_POUNCE_SOUND) ? TRUE : FALSE); | |
572 gtk_entry_set_text(GTK_ENTRY(b->soundentry), edit_bp->sound); | |
573 } else | |
574 gtk_widget_set_sensitive(GTK_WIDGET(b->soundentry), FALSE); | |
575 gtk_widget_show(b->soundentry); | |
576 g_signal_connect(GTK_OBJECT(b->sound), "clicked", | |
577 G_CALLBACK(gaim_gtk_toggle_sensitive), b->soundentry); | |
578 /* </pounce type="action"> */ | |
579 | |
580 b->save = gtk_check_button_new_with_label(_("Save this pounce after activation")); | |
581 gtk_container_set_border_width(GTK_CONTAINER(b->save), 7); | |
582 if(edit_bp) | |
583 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->save), | |
584 (edit_bp->options & OPT_POUNCE_SAVE) ? TRUE : FALSE); | |
585 else | |
586 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b->save), FALSE); | |
587 gtk_box_pack_start(GTK_BOX(vbox), b->save, FALSE, FALSE, 0); | |
588 gtk_widget_show(b->save); | |
589 | |
590 sep = gtk_hseparator_new(); | |
591 gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0); | |
592 gtk_widget_show(sep); | |
593 | |
594 bbox = gtk_hbox_new(FALSE, 5); | |
595 gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); | |
596 gtk_widget_show(bbox); | |
597 | |
598 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); | |
599 | |
600 button = gaim_pixbuf_button_from_stock(_("_Save"), "gtk-execute", GAIM_BUTTON_HORIZONTAL); | |
601 gtk_size_group_add_widget(sg, button); | |
602 g_signal_connect(GTK_OBJECT(button), "clicked", G_CALLBACK(do_new_bp), b); | |
603 gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); | |
604 gtk_widget_show(button); | |
605 | |
606 button = gaim_pixbuf_button_from_stock(_("C_ancel"), "gtk-cancel", GAIM_BUTTON_HORIZONTAL); | |
607 gtk_size_group_add_widget(sg, button); | |
608 g_signal_connect(GTK_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy), b->window); | |
609 gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); | |
610 gtk_widget_show(button); | |
611 | |
612 | |
613 gtk_widget_show(b->window); | |
614 } | |
615 |