Mercurial > pidgin
annotate finch/gntpounce.c @ 19531:ecc6019f0a82
Deactivate only an active status.
This fixes the online-counting, which was causing groups and contacts to
disappear from the buddylist. This probably also fixes #2853.
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Wed, 29 Aug 2007 20:20:45 +0000 |
parents | d65ce3df5be2 |
children | 44b4e8bd759b 315151da0dc6 |
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 | |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
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 |