Mercurial > pidgin
annotate finch/gntpounce.c @ 20039:1846fd2da2b4
Fix proxy settings to be loaded correctly when libpurple is initialized. This was broken because it relied on the prefs being loaded after proxy initialization so that the pref callbacks would be triggered and I changed the prefs loading to happen right at the beginning to fix other issues. Fixes #3092.
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Fri, 14 Sep 2007 17:55:05 +0000 |
parents | 44b4e8bd759b |
children | 6a0d9fa477d4 6bf32c9e15a7 |
rev | line source |
---|---|
15817 | 1 /** |
2 * @file gntpounce.c GNT Buddy Pounce API | |
16194
0f0832c13fcb
Rename the Doxygen group from gntui to finch and define the finch group
Richard Laager <rlaager@wiktel.com>
parents:
15870
diff
changeset
|
3 * @ingroup finch |
15817 | 4 * |
15870
66dff3dfdea6
Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@wiktel.com>
parents:
15822
diff
changeset
|
5 * finch |
15817 | 6 * |
15870
66dff3dfdea6
Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@wiktel.com>
parents:
15822
diff
changeset
|
7 * Finch is the legal property of its developers, whose names are too numerous |
15817 | 8 * to list here. Please refer to the COPYRIGHT file distributed with this |
9 * source distribution. | |
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. | |
20 * | |
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 | |
19681
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19374
diff
changeset
|
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
15817 | 24 * |
25 */ | |
26 #include <gnt.h> | |
27 #include <gntbox.h> | |
28 #include <gntbutton.h> | |
29 #include <gntcheckbox.h> | |
30 #include <gntcombobox.h> | |
31 #include <gntentry.h> | |
32 #include <gntlabel.h> | |
33 #include <gntline.h> | |
34 #include <gnttree.h> | |
18511
7ee0e0597a26
Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18345
diff
changeset
|
35 #include <gntutils.h> |
7ee0e0597a26
Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18345
diff
changeset
|
36 |
15817 | 37 #include "internal.h" |
15822 | 38 #include "finch.h" |
15817 | 39 |
40 #include "account.h" | |
41 #include "conversation.h" | |
42 #include "debug.h" | |
43 #include "notify.h" | |
44 #include "prpl.h" | |
45 #include "request.h" | |
46 #include "server.h" | |
47 #include "util.h" | |
48 | |
49 #include "gntpounce.h" | |
50 | |
51 | |
52 typedef struct | |
53 { | |
54 /* Pounce data */ | |
15822 | 55 PurplePounce *pounce; |
56 PurpleAccount *account; | |
15817 | 57 |
58 /* The window */ | |
59 GntWidget *window; | |
60 | |
61 /* Pounce on Whom */ | |
62 GntWidget *account_menu; | |
63 GntWidget *buddy_entry; | |
64 | |
65 /* Pounce options */ | |
66 GntWidget *on_away; | |
67 | |
68 /* Pounce When Buddy... */ | |
69 GntWidget *signon; | |
70 GntWidget *signoff; | |
71 GntWidget *away; | |
72 GntWidget *away_return; | |
73 GntWidget *idle; | |
74 GntWidget *idle_return; | |
75 GntWidget *typing; | |
76 GntWidget *typed; | |
77 GntWidget *stop_typing; | |
78 GntWidget *message_recv; | |
79 | |
80 /* Action */ | |
81 GntWidget *open_win; | |
82 GntWidget *popup; | |
83 GntWidget *popup_entry; | |
84 GntWidget *send_msg; | |
85 GntWidget *send_msg_entry; | |
86 GntWidget *exec_cmd; | |
87 GntWidget *exec_cmd_entry; | |
88 GntWidget *play_sound; | |
89 | |
90 GntWidget *save_pounce; | |
91 | |
92 /* Buttons */ | |
93 GntWidget *save_button; | |
94 | |
15822 | 95 } PurpleGntPounceDialog; |
15817 | 96 |
97 typedef struct | |
98 { | |
99 GntWidget *window; | |
100 GntWidget *tree; | |
101 GntWidget *modify_button; | |
102 GntWidget *delete_button; | |
103 } PouncesManager; | |
104 | |
105 static PouncesManager *pounces_manager = NULL; | |
106 | |
107 /************************************************************************** | |
108 * Callbacks | |
109 **************************************************************************/ | |
110 static gint | |
15822 | 111 delete_win_cb(GntWidget *w, PurpleGntPounceDialog *dialog) |
15817 | 112 { |
113 gnt_widget_destroy(dialog->window); | |
114 g_free(dialog); | |
115 | |
116 return TRUE; | |
117 } | |
118 | |
119 static void | |
15822 | 120 cancel_cb(GntWidget *w, PurpleGntPounceDialog *dialog) |
15817 | 121 { |
122 gnt_widget_destroy(dialog->window); | |
123 } | |
124 | |
125 static void | |
15822 | 126 add_pounce_to_treeview(GntTree *tree, PurplePounce *pounce) |
15817 | 127 { |
15822 | 128 PurpleAccount *account; |
15817 | 129 const char *pouncer; |
130 const char *pouncee; | |
131 | |
15822 | 132 account = purple_pounce_get_pouncer(pounce); |
133 pouncer = purple_account_get_username(account); | |
134 pouncee = purple_pounce_get_pouncee(pounce); | |
15817 | 135 gnt_tree_add_row_last(tree, pounce, |
136 gnt_tree_create_row(tree, pouncer, pouncee), NULL); | |
137 } | |
138 | |
139 static void | |
140 populate_pounces_list(PouncesManager *dialog) | |
141 { | |
18118
ab6d2763b8d8
Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@wiktel.com>
parents:
18063
diff
changeset
|
142 GList *pounces; |
15817 | 143 |
144 gnt_tree_remove_all(GNT_TREE(dialog->tree)); | |
145 | |
18137
323272a9bb65
Fix #1574. (Pidgin and Finch show each other's pounces, interact in
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18118
diff
changeset
|
146 for (pounces = purple_pounces_get_all_for_ui(FINCH_UI); pounces != NULL; |
323272a9bb65
Fix #1574. (Pidgin and Finch show each other's pounces, interact in
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18118
diff
changeset
|
147 pounces = g_list_delete_link(pounces, pounces)) |
15817 | 148 { |
149 add_pounce_to_treeview(GNT_TREE(dialog->tree), pounces->data); | |
150 } | |
151 } | |
152 | |
153 static void | |
154 update_pounces(void) | |
155 { | |
156 /* Rebuild the pounces list if the pounces manager is open */ | |
157 if (pounces_manager != NULL) | |
158 { | |
159 populate_pounces_list(pounces_manager); | |
160 } | |
161 } | |
162 | |
163 static void | |
15822 | 164 signed_on_off_cb(PurpleConnection *gc, gpointer user_data) |
15817 | 165 { |
166 update_pounces(); | |
167 } | |
168 | |
169 static void | |
15822 | 170 save_pounce_cb(GntWidget *w, PurpleGntPounceDialog *dialog) |
15817 | 171 { |
172 const char *name; | |
173 const char *message, *command, *reason; | |
15822 | 174 PurplePounceEvent events = PURPLE_POUNCE_NONE; |
175 PurplePounceOption options = PURPLE_POUNCE_OPTION_NONE; | |
15817 | 176 |
177 name = gnt_entry_get_text(GNT_ENTRY(dialog->buddy_entry)); | |
178 | |
179 if (*name == '\0') | |
180 { | |
15822 | 181 purple_notify_error(NULL, NULL, |
15817 | 182 _("Please enter a buddy to pounce."), NULL); |
183 return; | |
184 } | |
185 | |
186 /* Options */ | |
187 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->on_away))) | |
15822 | 188 options |= PURPLE_POUNCE_OPTION_AWAY; |
15817 | 189 |
190 /* Events */ | |
191 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->signon))) | |
15822 | 192 events |= PURPLE_POUNCE_SIGNON; |
15817 | 193 |
194 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->signoff))) | |
15822 | 195 events |= PURPLE_POUNCE_SIGNOFF; |
15817 | 196 |
197 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->away))) | |
15822 | 198 events |= PURPLE_POUNCE_AWAY; |
15817 | 199 |
200 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->away_return))) | |
15822 | 201 events |= PURPLE_POUNCE_AWAY_RETURN; |
15817 | 202 |
203 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->idle))) | |
15822 | 204 events |= PURPLE_POUNCE_IDLE; |
15817 | 205 |
206 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->idle_return))) | |
15822 | 207 events |= PURPLE_POUNCE_IDLE_RETURN; |
15817 | 208 |
209 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->typing))) | |
15822 | 210 events |= PURPLE_POUNCE_TYPING; |
15817 | 211 |
212 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->typed))) | |
15822 | 213 events |= PURPLE_POUNCE_TYPED; |
15817 | 214 |
215 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->stop_typing))) | |
15822 | 216 events |= PURPLE_POUNCE_TYPING_STOPPED; |
15817 | 217 |
218 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->message_recv))) | |
15822 | 219 events |= PURPLE_POUNCE_MESSAGE_RECEIVED; |
15817 | 220 |
221 /* Data fields */ | |
222 message = gnt_entry_get_text(GNT_ENTRY(dialog->send_msg_entry)); | |
223 command = gnt_entry_get_text(GNT_ENTRY(dialog->exec_cmd_entry)); | |
224 reason = gnt_entry_get_text(GNT_ENTRY(dialog->popup_entry)); | |
225 | |
226 if (*reason == '\0') reason = NULL; | |
227 if (*message == '\0') message = NULL; | |
228 if (*command == '\0') command = NULL; | |
229 | |
230 if (dialog->pounce == NULL) { | |
15822 | 231 dialog->pounce = purple_pounce_new(FINCH_UI, dialog->account, |
15817 | 232 name, events, options); |
233 } else { | |
15822 | 234 purple_pounce_set_events(dialog->pounce, events); |
235 purple_pounce_set_options(dialog->pounce, options); | |
236 purple_pounce_set_pouncer(dialog->pounce, dialog->account); | |
237 purple_pounce_set_pouncee(dialog->pounce, name); | |
15817 | 238 } |
239 | |
240 /* Actions */ | |
15822 | 241 purple_pounce_action_set_enabled(dialog->pounce, "open-window", |
15817 | 242 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->open_win))); |
15822 | 243 purple_pounce_action_set_enabled(dialog->pounce, "popup-notify", |
15817 | 244 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->popup))); |
15822 | 245 purple_pounce_action_set_enabled(dialog->pounce, "send-message", |
15817 | 246 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->send_msg))); |
15822 | 247 purple_pounce_action_set_enabled(dialog->pounce, "execute-command", |
15817 | 248 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->exec_cmd))); |
15822 | 249 purple_pounce_action_set_enabled(dialog->pounce, "play-beep", |
15817 | 250 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->play_sound))); |
251 | |
15822 | 252 purple_pounce_action_set_attribute(dialog->pounce, "send-message", |
15817 | 253 "message", message); |
15822 | 254 purple_pounce_action_set_attribute(dialog->pounce, "execute-command", |
15817 | 255 "command", command); |
15822 | 256 purple_pounce_action_set_attribute(dialog->pounce, "popup-notify", |
15817 | 257 "reason", reason); |
258 | |
259 /* Set the defaults for next time. */ | |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
260 purple_prefs_set_bool("/finch/pounces/default_actions/open-window", |
15817 | 261 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->open_win))); |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
262 purple_prefs_set_bool("/finch/pounces/default_actions/popup-notify", |
15817 | 263 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->popup))); |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
264 purple_prefs_set_bool("/finch/pounces/default_actions/send-message", |
15817 | 265 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->send_msg))); |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
266 purple_prefs_set_bool("/finch/pounces/default_actions/execute-command", |
15817 | 267 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->exec_cmd))); |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
268 purple_prefs_set_bool("/finch/pounces/default_actions/play-beep", |
15817 | 269 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->play_sound))); |
270 | |
15822 | 271 purple_pounce_set_save(dialog->pounce, |
15817 | 272 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->save_pounce))); |
273 | |
15822 | 274 purple_pounce_set_pouncer(dialog->pounce, |
275 (PurpleAccount *)gnt_combo_box_get_selected_data(GNT_COMBO_BOX(dialog->account_menu))); | |
15817 | 276 |
277 update_pounces(); | |
278 | |
279 gnt_widget_destroy(dialog->window); | |
280 } | |
281 | |
282 | |
283 void | |
15822 | 284 finch_pounce_editor_show(PurpleAccount *account, const char *name, |
285 PurplePounce *cur_pounce) | |
15817 | 286 { |
15822 | 287 PurpleGntPounceDialog *dialog; |
15817 | 288 GntWidget *window; |
289 GntWidget *bbox; | |
16287
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
290 GntWidget *hbox, *vbox; |
15817 | 291 GntWidget *button; |
292 GntWidget *combo; | |
18063
926ccb104da0
disapproval of revision '1411afd7660760db59966c3a9f18e2adab8eb27e'
Richard Laager <rlaager@wiktel.com>
parents:
18058
diff
changeset
|
293 GList *list; |
15817 | 294 |
295 g_return_if_fail((cur_pounce != NULL) || | |
296 (account != NULL) || | |
15822 | 297 (purple_accounts_get_all() != NULL)); |
15817 | 298 |
15822 | 299 dialog = g_new0(PurpleGntPounceDialog, 1); |
15817 | 300 |
301 if (cur_pounce != NULL) { | |
302 dialog->pounce = cur_pounce; | |
15822 | 303 dialog->account = purple_pounce_get_pouncer(cur_pounce); |
15817 | 304 } else if (account != NULL) { |
305 dialog->pounce = NULL; | |
306 dialog->account = account; | |
307 } else { | |
18063
926ccb104da0
disapproval of revision '1411afd7660760db59966c3a9f18e2adab8eb27e'
Richard Laager <rlaager@wiktel.com>
parents:
18058
diff
changeset
|
308 GList *connections = purple_connections_get_all(); |
15822 | 309 PurpleConnection *gc; |
15817 | 310 |
311 if (connections != NULL) { | |
15822 | 312 gc = (PurpleConnection *)connections->data; |
313 dialog->account = purple_connection_get_account(gc); | |
15817 | 314 } else |
15822 | 315 dialog->account = purple_accounts_get_all()->data; |
15817 | 316 |
317 dialog->pounce = NULL; | |
318 } | |
319 | |
320 /* Create the window. */ | |
321 dialog->window = window = gnt_vbox_new(FALSE); | |
322 gnt_box_set_pad(GNT_BOX(window), 0); | |
323 gnt_box_set_toplevel(GNT_BOX(window), TRUE); | |
324 gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_LEFT); | |
325 gnt_box_set_title(GNT_BOX(window), | |
326 (cur_pounce == NULL | |
327 ? _("New Buddy Pounce") : _("Edit Buddy Pounce"))); | |
328 | |
329 g_signal_connect(G_OBJECT(window), "destroy", | |
330 G_CALLBACK(delete_win_cb), dialog); | |
331 | |
332 gnt_box_add_widget(GNT_BOX(window), gnt_label_new_with_format(_("Pounce Who"), GNT_TEXT_FLAG_BOLD)); | |
333 | |
334 /* Account: */ | |
335 gnt_box_add_widget(GNT_BOX(window), gnt_label_new(_("Account:"))); | |
336 dialog->account_menu = combo = gnt_combo_box_new(); | |
15822 | 337 list = purple_accounts_get_all(); |
15817 | 338 for (; list; list = list->next) |
339 { | |
15822 | 340 PurpleAccount *account; |
15817 | 341 char *text; |
342 | |
343 account = list->data; | |
344 text = g_strdup_printf("%s (%s)", | |
15822 | 345 purple_account_get_username(account), |
346 purple_account_get_protocol_name(account)); | |
15817 | 347 gnt_combo_box_add_data(GNT_COMBO_BOX(combo), account, text); |
348 g_free(text); | |
349 } | |
350 if (dialog->account) | |
351 gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), dialog->account); | |
352 | |
353 gnt_box_add_widget(GNT_BOX(window), combo); | |
354 | |
355 /* Buddy: */ | |
356 hbox = gnt_hbox_new(FALSE); | |
357 gnt_box_add_widget(GNT_BOX(hbox), gnt_label_new(_("Buddy name:"))); | |
358 | |
359 dialog->buddy_entry = gnt_entry_new(NULL); | |
360 gnt_box_add_widget(GNT_BOX(hbox), dialog->buddy_entry); | |
361 | |
362 gnt_box_add_widget(GNT_BOX(window), hbox); | |
363 | |
364 if (cur_pounce != NULL) { | |
365 gnt_entry_set_text(GNT_ENTRY(dialog->buddy_entry), | |
15822 | 366 purple_pounce_get_pouncee(cur_pounce)); |
15817 | 367 } else if (name != NULL) { |
368 gnt_entry_set_text(GNT_ENTRY(dialog->buddy_entry), name); | |
369 } | |
370 | |
16287
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
371 /* Create the event frame */ |
15817 | 372 gnt_box_add_widget(GNT_BOX(window), gnt_line_new(FALSE)); |
373 gnt_box_add_widget(GNT_BOX(window), gnt_label_new_with_format(_("Pounce When Buddy..."), GNT_TEXT_FLAG_BOLD)); | |
374 | |
375 dialog->signon = gnt_check_box_new(_("Signs on")); | |
376 dialog->signoff = gnt_check_box_new(_("Signs off")); | |
377 dialog->away = gnt_check_box_new(_("Goes away")); | |
378 dialog->away_return = gnt_check_box_new(_("Returns from away")); | |
379 dialog->idle = gnt_check_box_new(_("Becomes idle")); | |
380 dialog->idle_return = gnt_check_box_new(_("Is no longer idle")); | |
381 dialog->typing = gnt_check_box_new(_("Starts typing")); | |
382 dialog->typed = gnt_check_box_new(_("Pauses while typing")); | |
383 dialog->stop_typing = gnt_check_box_new(_("Stops typing")); | |
384 dialog->message_recv = gnt_check_box_new(_("Sends a message")); | |
385 | |
16287
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
386 hbox = gnt_hbox_new(TRUE); |
15817 | 387 gnt_box_set_pad(GNT_BOX(hbox), 2); |
16287
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
388 |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
389 vbox = gnt_vbox_new(FALSE); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
390 gnt_box_set_pad(GNT_BOX(vbox), 0); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
391 gnt_box_add_widget(GNT_BOX(hbox), vbox); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
392 |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
393 gnt_box_add_widget(GNT_BOX(vbox), dialog->signon); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
394 gnt_box_add_widget(GNT_BOX(vbox), dialog->away); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
395 gnt_box_add_widget(GNT_BOX(vbox), dialog->idle); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
396 gnt_box_add_widget(GNT_BOX(vbox), dialog->typing); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
397 gnt_box_add_widget(GNT_BOX(vbox), dialog->stop_typing); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
398 |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
399 vbox = gnt_vbox_new(FALSE); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
400 gnt_box_set_pad(GNT_BOX(vbox), 0); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
401 gnt_box_add_widget(GNT_BOX(hbox), vbox); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
402 |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
403 gnt_box_add_widget(GNT_BOX(vbox), dialog->signoff); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
404 gnt_box_add_widget(GNT_BOX(vbox), dialog->away_return); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
405 gnt_box_add_widget(GNT_BOX(vbox), dialog->idle_return); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
406 gnt_box_add_widget(GNT_BOX(vbox), dialog->typed); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
407 gnt_box_add_widget(GNT_BOX(vbox), dialog->message_recv); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
408 |
15817 | 409 gnt_box_add_widget(GNT_BOX(window), hbox); |
410 | |
411 /* Create the "Action" frame. */ | |
412 gnt_box_add_widget(GNT_BOX(window), gnt_line_new(FALSE)); | |
413 gnt_box_add_widget(GNT_BOX(window), gnt_label_new_with_format(_("Action"), GNT_TEXT_FLAG_BOLD)); | |
414 | |
415 dialog->open_win = gnt_check_box_new(_("Open an IM window")); | |
416 dialog->popup = gnt_check_box_new(_("Pop up a notification")); | |
417 dialog->send_msg = gnt_check_box_new(_("Send a message")); | |
418 dialog->exec_cmd = gnt_check_box_new(_("Execute a command")); | |
419 dialog->play_sound = gnt_check_box_new(_("Play a sound")); | |
420 | |
421 dialog->send_msg_entry = gnt_entry_new(NULL); | |
422 dialog->exec_cmd_entry = gnt_entry_new(NULL); | |
423 dialog->popup_entry = gnt_entry_new(NULL); | |
424 dialog->exec_cmd_entry = gnt_entry_new(NULL); | |
425 | |
426 hbox = gnt_hbox_new(FALSE); | |
427 gnt_box_add_widget(GNT_BOX(hbox), dialog->open_win); | |
428 gnt_box_add_widget(GNT_BOX(window), hbox); | |
429 hbox = gnt_hbox_new(FALSE); | |
430 gnt_box_add_widget(GNT_BOX(hbox), dialog->popup); | |
431 gnt_box_add_widget(GNT_BOX(hbox), dialog->popup_entry); | |
432 gnt_box_add_widget(GNT_BOX(window), hbox); | |
433 hbox = gnt_hbox_new(FALSE); | |
434 gnt_box_add_widget(GNT_BOX(hbox), dialog->send_msg); | |
435 gnt_box_add_widget(GNT_BOX(hbox), dialog->send_msg_entry); | |
436 gnt_box_add_widget(GNT_BOX(window), hbox); | |
437 hbox = gnt_hbox_new(FALSE); | |
438 gnt_box_add_widget(GNT_BOX(hbox), dialog->exec_cmd); | |
439 gnt_box_add_widget(GNT_BOX(hbox), dialog->exec_cmd_entry); | |
440 gnt_box_add_widget(GNT_BOX(window), hbox); | |
441 hbox = gnt_hbox_new(FALSE); | |
442 gnt_box_add_widget(GNT_BOX(hbox), dialog->play_sound); | |
443 gnt_box_add_widget(GNT_BOX(window), hbox); | |
444 | |
445 gnt_box_add_widget(GNT_BOX(window), gnt_line_new(FALSE)); | |
446 gnt_box_add_widget(GNT_BOX(window), gnt_label_new_with_format(_("Options"), GNT_TEXT_FLAG_BOLD)); | |
447 dialog->on_away = gnt_check_box_new(_("Pounce only when my status is not available")); | |
448 gnt_box_add_widget(GNT_BOX(window), dialog->on_away); | |
449 dialog->save_pounce = gnt_check_box_new(_("Recurring")); | |
450 gnt_box_add_widget(GNT_BOX(window), dialog->save_pounce); | |
451 | |
452 | |
453 gnt_box_add_widget(GNT_BOX(window), gnt_line_new(FALSE)); | |
454 /* Now the button box! */ | |
19374
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
455 bbox = gnt_hbox_new(FALSE); |
15817 | 456 |
457 /* Cancel button */ | |
458 button = gnt_button_new(_("Cancel")); | |
459 gnt_box_add_widget(GNT_BOX(bbox), button); | |
460 g_signal_connect(G_OBJECT(button), "activate", | |
461 G_CALLBACK(cancel_cb), dialog); | |
462 | |
463 /* Save button */ | |
464 dialog->save_button = button = gnt_button_new(_("Save")); | |
465 gnt_box_add_widget(GNT_BOX(bbox), button); | |
466 g_signal_connect(G_OBJECT(button), "activate", | |
467 G_CALLBACK(save_pounce_cb), dialog); | |
468 | |
469 gnt_box_add_widget(GNT_BOX(window), bbox); | |
470 | |
471 | |
472 /* Set the values of stuff. */ | |
473 if (cur_pounce != NULL) | |
474 { | |
15822 | 475 PurplePounceEvent events = purple_pounce_get_events(cur_pounce); |
476 PurplePounceOption options = purple_pounce_get_options(cur_pounce); | |
15817 | 477 const char *value; |
478 | |
479 /* Options */ | |
480 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->on_away), | |
15822 | 481 (options & PURPLE_POUNCE_OPTION_AWAY)); |
15817 | 482 |
483 /* Events */ | |
484 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->signon), | |
15822 | 485 (events & PURPLE_POUNCE_SIGNON)); |
15817 | 486 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->signoff), |
15822 | 487 (events & PURPLE_POUNCE_SIGNOFF)); |
15817 | 488 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->away), |
15822 | 489 (events & PURPLE_POUNCE_AWAY)); |
15817 | 490 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->away_return), |
15822 | 491 (events & PURPLE_POUNCE_AWAY_RETURN)); |
15817 | 492 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->idle), |
15822 | 493 (events & PURPLE_POUNCE_IDLE)); |
15817 | 494 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->idle_return), |
15822 | 495 (events & PURPLE_POUNCE_IDLE_RETURN)); |
15817 | 496 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->typing), |
15822 | 497 (events & PURPLE_POUNCE_TYPING)); |
15817 | 498 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->typed), |
15822 | 499 (events & PURPLE_POUNCE_TYPED)); |
15817 | 500 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->stop_typing), |
15822 | 501 (events & PURPLE_POUNCE_TYPING_STOPPED)); |
15817 | 502 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->message_recv), |
15822 | 503 (events & PURPLE_POUNCE_MESSAGE_RECEIVED)); |
15817 | 504 |
505 /* Actions */ | |
506 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->open_win), | |
15822 | 507 purple_pounce_action_is_enabled(cur_pounce, "open-window")); |
15817 | 508 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->popup), |
15822 | 509 purple_pounce_action_is_enabled(cur_pounce, "popup-notify")); |
15817 | 510 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->send_msg), |
15822 | 511 purple_pounce_action_is_enabled(cur_pounce, "send-message")); |
15817 | 512 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->exec_cmd), |
15822 | 513 purple_pounce_action_is_enabled(cur_pounce, "execute-command")); |
15817 | 514 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->play_sound), |
15822 | 515 purple_pounce_action_is_enabled(cur_pounce, "play-beep")); |
15817 | 516 |
517 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->save_pounce), | |
15822 | 518 purple_pounce_get_save(cur_pounce)); |
15817 | 519 |
15822 | 520 if ((value = purple_pounce_action_get_attribute(cur_pounce, |
15817 | 521 "send-message", |
522 "message")) != NULL) | |
523 { | |
524 gnt_entry_set_text(GNT_ENTRY(dialog->send_msg_entry), value); | |
525 } | |
526 | |
15822 | 527 if ((value = purple_pounce_action_get_attribute(cur_pounce, |
15817 | 528 "popup-notify", |
529 "reason")) != NULL) | |
530 { | |
531 gnt_entry_set_text(GNT_ENTRY(dialog->popup_entry), value); | |
532 } | |
533 | |
15822 | 534 if ((value = purple_pounce_action_get_attribute(cur_pounce, |
15817 | 535 "execute-command", |
536 "command")) != NULL) | |
537 { | |
538 gnt_entry_set_text(GNT_ENTRY(dialog->exec_cmd_entry), value); | |
539 } | |
540 } | |
541 else | |
542 { | |
15822 | 543 PurpleBuddy *buddy = NULL; |
15817 | 544 |
545 if (name != NULL) | |
15822 | 546 buddy = purple_find_buddy(account, name); |
15817 | 547 |
548 /* Set some defaults */ | |
549 if (buddy == NULL) { | |
550 gnt_check_box_set_checked( | |
551 GNT_CHECK_BOX(dialog->signon), TRUE); | |
552 } else { | |
15822 | 553 if (!PURPLE_BUDDY_IS_ONLINE(buddy)) { |
15817 | 554 gnt_check_box_set_checked( |
555 GNT_CHECK_BOX(dialog->signon), TRUE); | |
556 } else { | |
557 gboolean default_set = FALSE; | |
15822 | 558 PurplePresence *presence = purple_buddy_get_presence(buddy); |
15817 | 559 |
15822 | 560 if (purple_presence_is_idle(presence)) |
15817 | 561 { |
562 gnt_check_box_set_checked( | |
563 GNT_CHECK_BOX(dialog->idle_return), TRUE); | |
564 | |
565 default_set = TRUE; | |
566 } | |
567 | |
15822 | 568 if (!purple_presence_is_available(presence)) |
15817 | 569 { |
570 gnt_check_box_set_checked( | |
571 GNT_CHECK_BOX(dialog->away_return), TRUE); | |
572 | |
573 default_set = TRUE; | |
574 } | |
575 | |
576 if (!default_set) | |
577 { | |
578 gnt_check_box_set_checked( | |
579 GNT_CHECK_BOX(dialog->signon), TRUE); | |
580 } | |
581 } | |
582 } | |
583 | |
584 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->open_win), | |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
585 purple_prefs_get_bool("/finch/pounces/default_actions/open-window")); |
15817 | 586 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->popup), |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
587 purple_prefs_get_bool("/finch/pounces/default_actions/popup-notify")); |
15817 | 588 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->send_msg), |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
589 purple_prefs_get_bool("/finch/pounces/default_actions/send-message")); |
15817 | 590 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->exec_cmd), |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
591 purple_prefs_get_bool("/finch/pounces/default_actions/execute-command")); |
15817 | 592 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->play_sound), |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
593 purple_prefs_get_bool("/finch/pounces/default_actions/play-beep")); |
15817 | 594 } |
595 | |
596 gnt_widget_show(window); | |
597 } | |
598 | |
599 | |
600 | |
601 static gboolean | |
602 pounces_manager_destroy_cb(GntWidget *widget, gpointer user_data) | |
603 { | |
604 PouncesManager *dialog = user_data; | |
605 | |
606 dialog->window = NULL; | |
607 finch_pounces_manager_hide(); | |
608 | |
609 return FALSE; | |
610 } | |
611 | |
612 | |
613 static void | |
614 pounces_manager_add_cb(GntButton *button, gpointer user_data) | |
615 { | |
19374
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
616 if (purple_accounts_get_all() == NULL) { |
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
617 purple_notify_error(NULL, _("Cannot create pounce"), |
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
618 _("You do not have any accounts."), |
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
619 _("You must create an account first before you can create a pounce.")); |
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
620 return; |
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
621 } |
15817 | 622 finch_pounce_editor_show(NULL, NULL, NULL); |
623 } | |
624 | |
625 | |
626 static void | |
627 pounces_manager_modify_cb(GntButton *button, gpointer user_data) | |
628 { | |
629 PouncesManager *dialog = user_data; | |
15822 | 630 PurplePounce *pounce = gnt_tree_get_selection_data(GNT_TREE(dialog->tree)); |
19374
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
631 if (pounce) |
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
632 finch_pounce_editor_show(NULL, NULL, pounce); |
15817 | 633 } |
634 | |
635 static void | |
15822 | 636 pounces_manager_delete_confirm_cb(PurplePounce *pounce) |
15817 | 637 { |
638 gnt_tree_remove(GNT_TREE(pounces_manager->tree), pounce); | |
639 | |
15822 | 640 purple_request_close_with_handle(pounce); |
641 purple_pounce_destroy(pounce); | |
15817 | 642 } |
643 | |
644 | |
645 static void | |
646 pounces_manager_delete_cb(GntButton *button, gpointer user_data) | |
647 { | |
648 PouncesManager *dialog = user_data; | |
15822 | 649 PurplePounce *pounce; |
650 PurpleAccount *account; | |
15817 | 651 const char *pouncer, *pouncee; |
652 char *buf; | |
653 | |
15822 | 654 pounce = (PurplePounce *)gnt_tree_get_selection_data(GNT_TREE(dialog->tree)); |
19374
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
655 if (pounce == NULL) |
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
656 return; |
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
657 |
15822 | 658 account = purple_pounce_get_pouncer(pounce); |
659 pouncer = purple_account_get_username(account); | |
660 pouncee = purple_pounce_get_pouncee(pounce); | |
15817 | 661 buf = g_strdup_printf(_("Are you sure you want to delete the pounce on %s for %s?"), pouncee, pouncer); |
16439
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
662 purple_request_action(pounce, NULL, buf, NULL, 0, |
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
663 account, pouncee, NULL, |
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
664 pounce, 2, |
15817 | 665 _("Delete"), pounces_manager_delete_confirm_cb, |
666 _("Cancel"), NULL); | |
667 g_free(buf); | |
668 } | |
669 | |
670 static void | |
671 pounces_manager_close_cb(GntButton *button, gpointer user_data) | |
672 { | |
673 finch_pounces_manager_hide(); | |
674 } | |
675 | |
676 | |
677 void | |
678 finch_pounces_manager_show(void) | |
679 { | |
680 PouncesManager *dialog; | |
681 GntWidget *bbox; | |
682 GntWidget *button; | |
683 GntWidget *tree; | |
684 GntWidget *win; | |
685 | |
686 if (pounces_manager != NULL) { | |
18345
2d4df5ef0090
If the action-windows are already there, then bring them to front when
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18137
diff
changeset
|
687 gnt_window_present(pounces_manager->window); |
15817 | 688 return; |
689 } | |
690 | |
691 pounces_manager = dialog = g_new0(PouncesManager, 1); | |
692 | |
693 dialog->window = win = gnt_vbox_new(FALSE); | |
694 gnt_box_set_toplevel(GNT_BOX(win), TRUE); | |
695 gnt_box_set_title(GNT_BOX(win), _("Buddy Pounces")); | |
696 gnt_box_set_pad(GNT_BOX(win), 0); | |
697 | |
698 g_signal_connect(G_OBJECT(win), "destroy", | |
699 G_CALLBACK(pounces_manager_destroy_cb), dialog); | |
700 | |
701 /* List of saved buddy pounces */ | |
702 dialog->tree = tree = GNT_WIDGET(gnt_tree_new_with_columns(2)); | |
703 gnt_tree_set_column_titles(GNT_TREE(tree), "Account", "Pouncee", NULL); | |
704 gnt_tree_set_show_title(GNT_TREE(tree), TRUE); | |
705 | |
706 gnt_box_add_widget(GNT_BOX(win), tree); | |
707 | |
708 /* Button box. */ | |
19374
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
709 bbox = gnt_hbox_new(FALSE); |
15817 | 710 |
711 /* Add button */ | |
712 button = gnt_button_new(_("Add")); | |
713 gnt_box_add_widget(GNT_BOX(bbox), button); | |
18511
7ee0e0597a26
Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18345
diff
changeset
|
714 gnt_util_set_trigger_widget(tree, GNT_KEY_INS, button); |
15817 | 715 |
716 g_signal_connect(G_OBJECT(button), "activate", | |
717 G_CALLBACK(pounces_manager_add_cb), dialog); | |
718 | |
719 /* Modify button */ | |
720 button = gnt_button_new(_("Modify")); | |
721 dialog->modify_button = button; | |
722 gnt_box_add_widget(GNT_BOX(bbox), button); | |
723 | |
724 g_signal_connect(G_OBJECT(button), "activate", | |
725 G_CALLBACK(pounces_manager_modify_cb), dialog); | |
726 | |
727 /* Delete button */ | |
728 button = gnt_button_new(_("Delete")); | |
729 dialog->delete_button = button; | |
730 gnt_box_add_widget(GNT_BOX(bbox), button); | |
18511
7ee0e0597a26
Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18345
diff
changeset
|
731 gnt_util_set_trigger_widget(tree, GNT_KEY_DEL, button); |
15817 | 732 |
733 g_signal_connect(G_OBJECT(button), "activate", | |
734 G_CALLBACK(pounces_manager_delete_cb), dialog); | |
735 | |
736 /* Close button */ | |
737 button = gnt_button_new(_("Close")); | |
738 gnt_box_add_widget(GNT_BOX(bbox), button); | |
739 gnt_widget_show(button); | |
740 | |
741 g_signal_connect(G_OBJECT(button), "activate", | |
742 G_CALLBACK(pounces_manager_close_cb), dialog); | |
743 | |
744 gnt_box_add_widget(GNT_BOX(win), bbox); | |
745 | |
746 gnt_widget_show(win); | |
747 populate_pounces_list(pounces_manager); | |
748 } | |
749 | |
750 void | |
751 finch_pounces_manager_hide(void) | |
752 { | |
753 if (pounces_manager == NULL) | |
754 return; | |
755 | |
756 if (pounces_manager->window != NULL) | |
757 gnt_widget_destroy(pounces_manager->window); | |
758 | |
15822 | 759 purple_signals_disconnect_by_handle(pounces_manager); |
15817 | 760 |
761 g_free(pounces_manager); | |
762 pounces_manager = NULL; | |
763 } | |
764 | |
765 static void | |
15822 | 766 pounce_cb(PurplePounce *pounce, PurplePounceEvent events, void *data) |
15817 | 767 { |
15822 | 768 PurpleConversation *conv; |
769 PurpleAccount *account; | |
770 PurpleBuddy *buddy; | |
15817 | 771 const char *pouncee; |
772 const char *alias; | |
773 | |
15822 | 774 pouncee = purple_pounce_get_pouncee(pounce); |
775 account = purple_pounce_get_pouncer(pounce); | |
15817 | 776 |
15822 | 777 buddy = purple_find_buddy(account, pouncee); |
15817 | 778 if (buddy != NULL) |
779 { | |
15822 | 780 alias = purple_buddy_get_alias(buddy); |
15817 | 781 if (alias == NULL) |
782 alias = pouncee; | |
783 } | |
784 else | |
785 alias = pouncee; | |
786 | |
15822 | 787 if (purple_pounce_action_is_enabled(pounce, "open-window")) |
15817 | 788 { |
15822 | 789 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, pouncee, account); |
15817 | 790 |
791 if (conv == NULL) | |
15822 | 792 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, pouncee); |
15817 | 793 } |
794 | |
15822 | 795 if (purple_pounce_action_is_enabled(pounce, "popup-notify")) |
15817 | 796 { |
797 char *tmp; | |
798 const char *name_shown; | |
799 const char *reason; | |
15822 | 800 reason = purple_pounce_action_get_attribute(pounce, "popup-notify", |
15817 | 801 "reason"); |
802 | |
803 /* | |
804 * Here we place the protocol name in the pounce dialog to lessen | |
805 * confusion about what protocol a pounce is for. | |
806 */ | |
807 tmp = g_strdup_printf( | |
15822 | 808 (events & PURPLE_POUNCE_TYPING) ? |
15817 | 809 _("%s has started typing to you (%s)") : |
15822 | 810 (events & PURPLE_POUNCE_TYPED) ? |
15817 | 811 _("%s has paused while typing to you (%s)") : |
15822 | 812 (events & PURPLE_POUNCE_SIGNON) ? |
15817 | 813 _("%s has signed on (%s)") : |
15822 | 814 (events & PURPLE_POUNCE_IDLE_RETURN) ? |
15817 | 815 _("%s has returned from being idle (%s)") : |
15822 | 816 (events & PURPLE_POUNCE_AWAY_RETURN) ? |
15817 | 817 _("%s has returned from being away (%s)") : |
15822 | 818 (events & PURPLE_POUNCE_TYPING_STOPPED) ? |
15817 | 819 _("%s has stopped typing to you (%s)") : |
15822 | 820 (events & PURPLE_POUNCE_SIGNOFF) ? |
15817 | 821 _("%s has signed off (%s)") : |
15822 | 822 (events & PURPLE_POUNCE_IDLE) ? |
15817 | 823 _("%s has become idle (%s)") : |
15822 | 824 (events & PURPLE_POUNCE_AWAY) ? |
15817 | 825 _("%s has gone away. (%s)") : |
15822 | 826 (events & PURPLE_POUNCE_MESSAGE_RECEIVED) ? |
15817 | 827 _("%s has sent you a message. (%s)") : |
828 _("Unknown pounce event. Please report this!"), | |
15822 | 829 alias, purple_account_get_protocol_name(account)); |
15817 | 830 |
831 /* | |
832 * Ok here is where I change the second argument, title, from | |
833 * NULL to the account alias if we have it or the account | |
834 * name if that's all we have | |
835 */ | |
15822 | 836 if ((name_shown = purple_account_get_alias(account)) == NULL) |
837 name_shown = purple_account_get_username(account); | |
15817 | 838 |
839 if (reason == NULL) | |
840 { | |
15822 | 841 purple_notify_info(NULL, name_shown, tmp, purple_date_format_full(NULL)); |
15817 | 842 } |
843 else | |
844 { | |
15822 | 845 char *tmp2 = g_strdup_printf("%s\n\n%s", reason, purple_date_format_full(NULL)); |
846 purple_notify_info(NULL, name_shown, tmp, tmp2); | |
15817 | 847 g_free(tmp2); |
848 } | |
849 g_free(tmp); | |
850 } | |
851 | |
15822 | 852 if (purple_pounce_action_is_enabled(pounce, "send-message")) |
15817 | 853 { |
854 const char *message; | |
855 | |
15822 | 856 message = purple_pounce_action_get_attribute(pounce, "send-message", |
15817 | 857 "message"); |
858 | |
859 if (message != NULL) | |
860 { | |
15822 | 861 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, pouncee, account); |
15817 | 862 |
863 if (conv == NULL) | |
15822 | 864 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, pouncee); |
15817 | 865 |
15822 | 866 purple_conversation_write(conv, NULL, message, |
867 PURPLE_MESSAGE_SEND, time(NULL)); | |
15817 | 868 |
869 serv_send_im(account->gc, (char *)pouncee, (char *)message, 0); | |
870 } | |
871 } | |
872 | |
15822 | 873 if (purple_pounce_action_is_enabled(pounce, "execute-command")) |
15817 | 874 { |
875 const char *command; | |
876 | |
15822 | 877 command = purple_pounce_action_get_attribute(pounce, |
15817 | 878 "execute-command", "command"); |
879 | |
880 if (command != NULL) | |
881 { | |
882 char *localecmd = g_locale_from_utf8(command, -1, NULL, | |
883 NULL, NULL); | |
884 | |
885 if (localecmd != NULL) | |
886 { | |
887 int pid = fork(); | |
888 | |
889 if (pid == 0) { | |
890 char *args[4]; | |
891 | |
892 args[0] = "sh"; | |
893 args[1] = "-c"; | |
894 args[2] = (char *)localecmd; | |
895 args[3] = NULL; | |
896 | |
897 execvp(args[0], args); | |
898 | |
899 _exit(0); | |
900 } | |
901 g_free(localecmd); | |
902 } | |
903 } | |
904 } | |
905 | |
15822 | 906 if (purple_pounce_action_is_enabled(pounce, "play-beep")) |
15817 | 907 { |
908 beep(); | |
909 } | |
910 } | |
911 | |
912 static void | |
15822 | 913 free_pounce(PurplePounce *pounce) |
15817 | 914 { |
915 update_pounces(); | |
916 } | |
917 | |
918 static void | |
15822 | 919 new_pounce(PurplePounce *pounce) |
15817 | 920 { |
15822 | 921 purple_pounce_action_register(pounce, "open-window"); |
922 purple_pounce_action_register(pounce, "popup-notify"); | |
923 purple_pounce_action_register(pounce, "send-message"); | |
924 purple_pounce_action_register(pounce, "execute-command"); | |
925 purple_pounce_action_register(pounce, "play-beep"); | |
15817 | 926 |
927 update_pounces(); | |
928 } | |
929 | |
930 void * | |
931 finch_pounces_get_handle() | |
932 { | |
933 static int handle; | |
934 | |
935 return &handle; | |
936 } | |
937 | |
938 void | |
939 finch_pounces_init(void) | |
940 { | |
15822 | 941 purple_pounces_register_handler(FINCH_UI, pounce_cb, new_pounce, |
15817 | 942 free_pounce); |
943 | |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
944 purple_prefs_add_none("/finch/pounces"); |
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
945 purple_prefs_add_none("/finch/pounces/default_actions"); |
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
946 purple_prefs_add_bool("/finch/pounces/default_actions/open-window", |
15817 | 947 FALSE); |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
948 purple_prefs_add_bool("/finch/pounces/default_actions/popup-notify", |
15817 | 949 TRUE); |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
950 purple_prefs_add_bool("/finch/pounces/default_actions/send-message", |
15817 | 951 FALSE); |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
952 purple_prefs_add_bool("/finch/pounces/default_actions/execute-command", |
15817 | 953 FALSE); |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
954 purple_prefs_add_bool("/finch/pounces/default_actions/play-beep", |
15817 | 955 FALSE); |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16287
diff
changeset
|
956 purple_prefs_add_none("/finch/pounces/dialog"); |
15817 | 957 |
15822 | 958 purple_signal_connect(purple_connections_get_handle(), "signed-on", |
15817 | 959 finch_pounces_get_handle(), |
15822 | 960 PURPLE_CALLBACK(signed_on_off_cb), NULL); |
961 purple_signal_connect(purple_connections_get_handle(), "signed-off", | |
15817 | 962 finch_pounces_get_handle(), |
15822 | 963 PURPLE_CALLBACK(signed_on_off_cb), NULL); |
15817 | 964 } |
965 | |
966 /* XXX: There's no such thing in pidgin. Perhaps there should be? */ | |
967 void finch_pounces_uninit() | |
968 { | |
15822 | 969 purple_pounces_register_handler(FINCH_UI, NULL, NULL, NULL); |
15817 | 970 |
15822 | 971 purple_signals_disconnect_by_handle(finch_pounces_get_handle()); |
15817 | 972 } |
973 |