Mercurial > pidgin.yaz
annotate finch/gntpounce.c @ 24900:2307f8124407
Only initialize dbus threading if glib threading is initialized. The idea is
that anything that will encounter the side effect of other libraries using dbus
from gthreads will have had to already initialize glib threading earlier.
Fixes #7538
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Wed, 07 Jan 2009 04:04:05 +0000 |
parents | 4ada5e2189d6 |
children | 4d752d07a126 |
rev | line source |
---|---|
15818 | 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:
15871
diff
changeset
|
3 * @ingroup finch |
20074
6bf32c9e15a7
remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents:
19680
diff
changeset
|
4 */ |
6bf32c9e15a7
remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents:
19680
diff
changeset
|
5 |
6bf32c9e15a7
remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents:
19680
diff
changeset
|
6 /* finch |
15818 | 7 * |
15871
66dff3dfdea6
Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@wiktel.com>
parents:
15823
diff
changeset
|
8 * Finch is the legal property of its developers, whose names are too numerous |
15818 | 9 * to list here. Please refer to the COPYRIGHT file distributed with this |
10 * source distribution. | |
11 * | |
12 * This program is free software; you can redistribute it and/or modify | |
13 * it under the terms of the GNU General Public License as published by | |
14 * the Free Software Foundation; either version 2 of the License, or | |
15 * (at your option) any later version. | |
16 * | |
17 * This program is distributed in the hope that it will be useful, | |
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 * GNU General Public License for more details. | |
21 * | |
22 * You should have received a copy of the GNU General Public License | |
23 * along with this program; if not, write to the Free Software | |
19680
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19374
diff
changeset
|
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
15818 | 25 * |
26 */ | |
27 #include <gnt.h> | |
28 #include <gntbox.h> | |
29 #include <gntbutton.h> | |
30 #include <gntcheckbox.h> | |
31 #include <gntcombobox.h> | |
32 #include <gntentry.h> | |
33 #include <gntlabel.h> | |
34 #include <gntline.h> | |
35 #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
|
36 #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
|
37 |
15823 | 38 #include "finch.h" |
15818 | 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 */ | |
15823 | 55 PurplePounce *pounce; |
56 PurpleAccount *account; | |
15818 | 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 | |
15823 | 95 } PurpleGntPounceDialog; |
15818 | 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 | |
15823 | 111 delete_win_cb(GntWidget *w, PurpleGntPounceDialog *dialog) |
15818 | 112 { |
113 gnt_widget_destroy(dialog->window); | |
114 g_free(dialog); | |
115 | |
116 return TRUE; | |
117 } | |
118 | |
119 static void | |
15823 | 120 cancel_cb(GntWidget *w, PurpleGntPounceDialog *dialog) |
15818 | 121 { |
122 gnt_widget_destroy(dialog->window); | |
123 } | |
124 | |
125 static void | |
15823 | 126 add_pounce_to_treeview(GntTree *tree, PurplePounce *pounce) |
15818 | 127 { |
15823 | 128 PurpleAccount *account; |
15818 | 129 const char *pouncer; |
130 const char *pouncee; | |
131 | |
15823 | 132 account = purple_pounce_get_pouncer(pounce); |
133 pouncer = purple_account_get_username(account); | |
134 pouncee = purple_pounce_get_pouncee(pounce); | |
15818 | 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; |
15818 | 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)) |
15818 | 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 | |
15823 | 164 signed_on_off_cb(PurpleConnection *gc, gpointer user_data) |
15818 | 165 { |
166 update_pounces(); | |
167 } | |
168 | |
169 static void | |
21279
47118f6062e9
Enable auto-complete in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21244
diff
changeset
|
170 setup_buddy_list_suggestion(GntEntry *entry, gboolean offline) |
47118f6062e9
Enable auto-complete in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21244
diff
changeset
|
171 { |
47118f6062e9
Enable auto-complete in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21244
diff
changeset
|
172 PurpleBlistNode *node = purple_blist_get_root(); |
47118f6062e9
Enable auto-complete in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21244
diff
changeset
|
173 for (; node; node = purple_blist_node_next(node, offline)) { |
47118f6062e9
Enable auto-complete in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21244
diff
changeset
|
174 if (!PURPLE_BLIST_NODE_IS_BUDDY(node)) |
47118f6062e9
Enable auto-complete in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21244
diff
changeset
|
175 continue; |
47118f6062e9
Enable auto-complete in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21244
diff
changeset
|
176 gnt_entry_add_suggest(entry, purple_buddy_get_name((PurpleBuddy*)node)); |
47118f6062e9
Enable auto-complete in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21244
diff
changeset
|
177 } |
47118f6062e9
Enable auto-complete in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21244
diff
changeset
|
178 } |
47118f6062e9
Enable auto-complete in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21244
diff
changeset
|
179 |
47118f6062e9
Enable auto-complete in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21244
diff
changeset
|
180 static void |
15823 | 181 save_pounce_cb(GntWidget *w, PurpleGntPounceDialog *dialog) |
15818 | 182 { |
183 const char *name; | |
184 const char *message, *command, *reason; | |
15823 | 185 PurplePounceEvent events = PURPLE_POUNCE_NONE; |
186 PurplePounceOption options = PURPLE_POUNCE_OPTION_NONE; | |
15818 | 187 |
188 name = gnt_entry_get_text(GNT_ENTRY(dialog->buddy_entry)); | |
189 | |
190 if (*name == '\0') | |
191 { | |
15823 | 192 purple_notify_error(NULL, NULL, |
15818 | 193 _("Please enter a buddy to pounce."), NULL); |
194 return; | |
195 } | |
196 | |
197 /* Options */ | |
198 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->on_away))) | |
15823 | 199 options |= PURPLE_POUNCE_OPTION_AWAY; |
15818 | 200 |
201 /* Events */ | |
202 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->signon))) | |
15823 | 203 events |= PURPLE_POUNCE_SIGNON; |
15818 | 204 |
205 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->signoff))) | |
15823 | 206 events |= PURPLE_POUNCE_SIGNOFF; |
15818 | 207 |
208 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->away))) | |
15823 | 209 events |= PURPLE_POUNCE_AWAY; |
15818 | 210 |
211 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->away_return))) | |
15823 | 212 events |= PURPLE_POUNCE_AWAY_RETURN; |
15818 | 213 |
214 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->idle))) | |
15823 | 215 events |= PURPLE_POUNCE_IDLE; |
15818 | 216 |
217 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->idle_return))) | |
15823 | 218 events |= PURPLE_POUNCE_IDLE_RETURN; |
15818 | 219 |
220 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->typing))) | |
15823 | 221 events |= PURPLE_POUNCE_TYPING; |
15818 | 222 |
223 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->typed))) | |
15823 | 224 events |= PURPLE_POUNCE_TYPED; |
15818 | 225 |
226 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->stop_typing))) | |
15823 | 227 events |= PURPLE_POUNCE_TYPING_STOPPED; |
15818 | 228 |
229 if (gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->message_recv))) | |
15823 | 230 events |= PURPLE_POUNCE_MESSAGE_RECEIVED; |
15818 | 231 |
232 /* Data fields */ | |
233 message = gnt_entry_get_text(GNT_ENTRY(dialog->send_msg_entry)); | |
234 command = gnt_entry_get_text(GNT_ENTRY(dialog->exec_cmd_entry)); | |
235 reason = gnt_entry_get_text(GNT_ENTRY(dialog->popup_entry)); | |
236 | |
237 if (*reason == '\0') reason = NULL; | |
238 if (*message == '\0') message = NULL; | |
239 if (*command == '\0') command = NULL; | |
240 | |
241 if (dialog->pounce == NULL) { | |
15823 | 242 dialog->pounce = purple_pounce_new(FINCH_UI, dialog->account, |
15818 | 243 name, events, options); |
244 } else { | |
15823 | 245 purple_pounce_set_events(dialog->pounce, events); |
246 purple_pounce_set_options(dialog->pounce, options); | |
247 purple_pounce_set_pouncer(dialog->pounce, dialog->account); | |
248 purple_pounce_set_pouncee(dialog->pounce, name); | |
15818 | 249 } |
250 | |
251 /* Actions */ | |
15823 | 252 purple_pounce_action_set_enabled(dialog->pounce, "open-window", |
15818 | 253 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->open_win))); |
15823 | 254 purple_pounce_action_set_enabled(dialog->pounce, "popup-notify", |
15818 | 255 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->popup))); |
15823 | 256 purple_pounce_action_set_enabled(dialog->pounce, "send-message", |
15818 | 257 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->send_msg))); |
15823 | 258 purple_pounce_action_set_enabled(dialog->pounce, "execute-command", |
15818 | 259 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->exec_cmd))); |
15823 | 260 purple_pounce_action_set_enabled(dialog->pounce, "play-beep", |
15818 | 261 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->play_sound))); |
262 | |
15823 | 263 purple_pounce_action_set_attribute(dialog->pounce, "send-message", |
15818 | 264 "message", message); |
15823 | 265 purple_pounce_action_set_attribute(dialog->pounce, "execute-command", |
15818 | 266 "command", command); |
15823 | 267 purple_pounce_action_set_attribute(dialog->pounce, "popup-notify", |
15818 | 268 "reason", reason); |
269 | |
270 /* Set the defaults for next time. */ | |
16427
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
|
271 purple_prefs_set_bool("/finch/pounces/default_actions/open-window", |
15818 | 272 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->open_win))); |
16427
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
|
273 purple_prefs_set_bool("/finch/pounces/default_actions/popup-notify", |
15818 | 274 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->popup))); |
16427
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
|
275 purple_prefs_set_bool("/finch/pounces/default_actions/send-message", |
15818 | 276 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->send_msg))); |
16427
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
|
277 purple_prefs_set_bool("/finch/pounces/default_actions/execute-command", |
15818 | 278 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->exec_cmd))); |
16427
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
|
279 purple_prefs_set_bool("/finch/pounces/default_actions/play-beep", |
15818 | 280 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->play_sound))); |
281 | |
15823 | 282 purple_pounce_set_save(dialog->pounce, |
15818 | 283 gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->save_pounce))); |
284 | |
15823 | 285 purple_pounce_set_pouncer(dialog->pounce, |
286 (PurpleAccount *)gnt_combo_box_get_selected_data(GNT_COMBO_BOX(dialog->account_menu))); | |
15818 | 287 |
288 update_pounces(); | |
289 | |
290 gnt_widget_destroy(dialog->window); | |
291 } | |
292 | |
293 | |
294 void | |
15823 | 295 finch_pounce_editor_show(PurpleAccount *account, const char *name, |
296 PurplePounce *cur_pounce) | |
15818 | 297 { |
15823 | 298 PurpleGntPounceDialog *dialog; |
15818 | 299 GntWidget *window; |
300 GntWidget *bbox; | |
16287
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
301 GntWidget *hbox, *vbox; |
15818 | 302 GntWidget *button; |
303 GntWidget *combo; | |
18063
926ccb104da0
disapproval of revision '1411afd7660760db59966c3a9f18e2adab8eb27e'
Richard Laager <rlaager@wiktel.com>
parents:
18058
diff
changeset
|
304 GList *list; |
15818 | 305 |
306 g_return_if_fail((cur_pounce != NULL) || | |
307 (account != NULL) || | |
15823 | 308 (purple_accounts_get_all() != NULL)); |
15818 | 309 |
15823 | 310 dialog = g_new0(PurpleGntPounceDialog, 1); |
15818 | 311 |
312 if (cur_pounce != NULL) { | |
313 dialog->pounce = cur_pounce; | |
15823 | 314 dialog->account = purple_pounce_get_pouncer(cur_pounce); |
15818 | 315 } else if (account != NULL) { |
316 dialog->pounce = NULL; | |
317 dialog->account = account; | |
318 } else { | |
18063
926ccb104da0
disapproval of revision '1411afd7660760db59966c3a9f18e2adab8eb27e'
Richard Laager <rlaager@wiktel.com>
parents:
18058
diff
changeset
|
319 GList *connections = purple_connections_get_all(); |
15823 | 320 PurpleConnection *gc; |
15818 | 321 |
322 if (connections != NULL) { | |
15823 | 323 gc = (PurpleConnection *)connections->data; |
324 dialog->account = purple_connection_get_account(gc); | |
15818 | 325 } else |
15823 | 326 dialog->account = purple_accounts_get_all()->data; |
15818 | 327 |
328 dialog->pounce = NULL; | |
329 } | |
330 | |
331 /* Create the window. */ | |
332 dialog->window = window = gnt_vbox_new(FALSE); | |
333 gnt_box_set_pad(GNT_BOX(window), 0); | |
334 gnt_box_set_toplevel(GNT_BOX(window), TRUE); | |
335 gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_LEFT); | |
336 gnt_box_set_title(GNT_BOX(window), | |
337 (cur_pounce == NULL | |
338 ? _("New Buddy Pounce") : _("Edit Buddy Pounce"))); | |
339 | |
340 g_signal_connect(G_OBJECT(window), "destroy", | |
341 G_CALLBACK(delete_win_cb), dialog); | |
342 | |
343 gnt_box_add_widget(GNT_BOX(window), gnt_label_new_with_format(_("Pounce Who"), GNT_TEXT_FLAG_BOLD)); | |
344 | |
345 /* Account: */ | |
346 gnt_box_add_widget(GNT_BOX(window), gnt_label_new(_("Account:"))); | |
347 dialog->account_menu = combo = gnt_combo_box_new(); | |
15823 | 348 list = purple_accounts_get_all(); |
15818 | 349 for (; list; list = list->next) |
350 { | |
15823 | 351 PurpleAccount *account; |
15818 | 352 char *text; |
353 | |
354 account = list->data; | |
355 text = g_strdup_printf("%s (%s)", | |
15823 | 356 purple_account_get_username(account), |
357 purple_account_get_protocol_name(account)); | |
15818 | 358 gnt_combo_box_add_data(GNT_COMBO_BOX(combo), account, text); |
359 g_free(text); | |
360 } | |
361 if (dialog->account) | |
362 gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), dialog->account); | |
363 | |
364 gnt_box_add_widget(GNT_BOX(window), combo); | |
365 | |
366 /* Buddy: */ | |
367 hbox = gnt_hbox_new(FALSE); | |
368 gnt_box_add_widget(GNT_BOX(hbox), gnt_label_new(_("Buddy name:"))); | |
369 | |
370 dialog->buddy_entry = gnt_entry_new(NULL); | |
371 gnt_box_add_widget(GNT_BOX(hbox), dialog->buddy_entry); | |
372 | |
21279
47118f6062e9
Enable auto-complete in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21244
diff
changeset
|
373 setup_buddy_list_suggestion(GNT_ENTRY(dialog->buddy_entry), TRUE); |
47118f6062e9
Enable auto-complete in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21244
diff
changeset
|
374 |
15818 | 375 gnt_box_add_widget(GNT_BOX(window), hbox); |
376 | |
377 if (cur_pounce != NULL) { | |
378 gnt_entry_set_text(GNT_ENTRY(dialog->buddy_entry), | |
15823 | 379 purple_pounce_get_pouncee(cur_pounce)); |
15818 | 380 } else if (name != NULL) { |
381 gnt_entry_set_text(GNT_ENTRY(dialog->buddy_entry), name); | |
382 } | |
383 | |
16287
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
384 /* Create the event frame */ |
15818 | 385 gnt_box_add_widget(GNT_BOX(window), gnt_line_new(FALSE)); |
386 gnt_box_add_widget(GNT_BOX(window), gnt_label_new_with_format(_("Pounce When Buddy..."), GNT_TEXT_FLAG_BOLD)); | |
387 | |
388 dialog->signon = gnt_check_box_new(_("Signs on")); | |
389 dialog->signoff = gnt_check_box_new(_("Signs off")); | |
390 dialog->away = gnt_check_box_new(_("Goes away")); | |
391 dialog->away_return = gnt_check_box_new(_("Returns from away")); | |
392 dialog->idle = gnt_check_box_new(_("Becomes idle")); | |
393 dialog->idle_return = gnt_check_box_new(_("Is no longer idle")); | |
394 dialog->typing = gnt_check_box_new(_("Starts typing")); | |
395 dialog->typed = gnt_check_box_new(_("Pauses while typing")); | |
396 dialog->stop_typing = gnt_check_box_new(_("Stops typing")); | |
397 dialog->message_recv = gnt_check_box_new(_("Sends a message")); | |
398 | |
16287
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
399 hbox = gnt_hbox_new(TRUE); |
15818 | 400 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
|
401 |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
402 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
|
403 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
|
404 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
|
405 |
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->signon); |
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->away); |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
408 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
|
409 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
|
410 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
|
411 |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
412 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
|
413 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
|
414 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
|
415 |
776bf7979b4f
Line up the event-checkboxes in the pounce dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
416 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
|
417 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
|
418 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
|
419 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
|
420 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
|
421 |
15818 | 422 gnt_box_add_widget(GNT_BOX(window), hbox); |
423 | |
424 /* Create the "Action" frame. */ | |
425 gnt_box_add_widget(GNT_BOX(window), gnt_line_new(FALSE)); | |
426 gnt_box_add_widget(GNT_BOX(window), gnt_label_new_with_format(_("Action"), GNT_TEXT_FLAG_BOLD)); | |
427 | |
428 dialog->open_win = gnt_check_box_new(_("Open an IM window")); | |
429 dialog->popup = gnt_check_box_new(_("Pop up a notification")); | |
430 dialog->send_msg = gnt_check_box_new(_("Send a message")); | |
431 dialog->exec_cmd = gnt_check_box_new(_("Execute a command")); | |
432 dialog->play_sound = gnt_check_box_new(_("Play a sound")); | |
433 | |
434 dialog->send_msg_entry = gnt_entry_new(NULL); | |
435 dialog->exec_cmd_entry = gnt_entry_new(NULL); | |
436 dialog->popup_entry = gnt_entry_new(NULL); | |
437 dialog->exec_cmd_entry = gnt_entry_new(NULL); | |
438 | |
439 hbox = gnt_hbox_new(FALSE); | |
440 gnt_box_add_widget(GNT_BOX(hbox), dialog->open_win); | |
441 gnt_box_add_widget(GNT_BOX(window), hbox); | |
442 hbox = gnt_hbox_new(FALSE); | |
443 gnt_box_add_widget(GNT_BOX(hbox), dialog->popup); | |
444 gnt_box_add_widget(GNT_BOX(hbox), dialog->popup_entry); | |
445 gnt_box_add_widget(GNT_BOX(window), hbox); | |
446 hbox = gnt_hbox_new(FALSE); | |
447 gnt_box_add_widget(GNT_BOX(hbox), dialog->send_msg); | |
448 gnt_box_add_widget(GNT_BOX(hbox), dialog->send_msg_entry); | |
449 gnt_box_add_widget(GNT_BOX(window), hbox); | |
450 hbox = gnt_hbox_new(FALSE); | |
451 gnt_box_add_widget(GNT_BOX(hbox), dialog->exec_cmd); | |
452 gnt_box_add_widget(GNT_BOX(hbox), dialog->exec_cmd_entry); | |
453 gnt_box_add_widget(GNT_BOX(window), hbox); | |
454 hbox = gnt_hbox_new(FALSE); | |
455 gnt_box_add_widget(GNT_BOX(hbox), dialog->play_sound); | |
456 gnt_box_add_widget(GNT_BOX(window), hbox); | |
457 | |
458 gnt_box_add_widget(GNT_BOX(window), gnt_line_new(FALSE)); | |
459 gnt_box_add_widget(GNT_BOX(window), gnt_label_new_with_format(_("Options"), GNT_TEXT_FLAG_BOLD)); | |
22249 | 460 dialog->on_away = gnt_check_box_new(_("Pounce only when my status is not Available")); |
15818 | 461 gnt_box_add_widget(GNT_BOX(window), dialog->on_away); |
462 dialog->save_pounce = gnt_check_box_new(_("Recurring")); | |
463 gnt_box_add_widget(GNT_BOX(window), dialog->save_pounce); | |
464 | |
465 | |
466 gnt_box_add_widget(GNT_BOX(window), gnt_line_new(FALSE)); | |
467 /* 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
|
468 bbox = gnt_hbox_new(FALSE); |
15818 | 469 |
470 /* Cancel button */ | |
471 button = gnt_button_new(_("Cancel")); | |
472 gnt_box_add_widget(GNT_BOX(bbox), button); | |
473 g_signal_connect(G_OBJECT(button), "activate", | |
474 G_CALLBACK(cancel_cb), dialog); | |
475 | |
476 /* Save button */ | |
477 dialog->save_button = button = gnt_button_new(_("Save")); | |
478 gnt_box_add_widget(GNT_BOX(bbox), button); | |
479 g_signal_connect(G_OBJECT(button), "activate", | |
480 G_CALLBACK(save_pounce_cb), dialog); | |
481 | |
482 gnt_box_add_widget(GNT_BOX(window), bbox); | |
483 | |
484 | |
485 /* Set the values of stuff. */ | |
486 if (cur_pounce != NULL) | |
487 { | |
15823 | 488 PurplePounceEvent events = purple_pounce_get_events(cur_pounce); |
489 PurplePounceOption options = purple_pounce_get_options(cur_pounce); | |
15818 | 490 const char *value; |
491 | |
492 /* Options */ | |
493 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->on_away), | |
15823 | 494 (options & PURPLE_POUNCE_OPTION_AWAY)); |
15818 | 495 |
496 /* Events */ | |
497 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->signon), | |
15823 | 498 (events & PURPLE_POUNCE_SIGNON)); |
15818 | 499 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->signoff), |
15823 | 500 (events & PURPLE_POUNCE_SIGNOFF)); |
15818 | 501 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->away), |
15823 | 502 (events & PURPLE_POUNCE_AWAY)); |
15818 | 503 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->away_return), |
15823 | 504 (events & PURPLE_POUNCE_AWAY_RETURN)); |
15818 | 505 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->idle), |
15823 | 506 (events & PURPLE_POUNCE_IDLE)); |
15818 | 507 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->idle_return), |
15823 | 508 (events & PURPLE_POUNCE_IDLE_RETURN)); |
15818 | 509 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->typing), |
15823 | 510 (events & PURPLE_POUNCE_TYPING)); |
15818 | 511 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->typed), |
15823 | 512 (events & PURPLE_POUNCE_TYPED)); |
15818 | 513 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->stop_typing), |
15823 | 514 (events & PURPLE_POUNCE_TYPING_STOPPED)); |
15818 | 515 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->message_recv), |
15823 | 516 (events & PURPLE_POUNCE_MESSAGE_RECEIVED)); |
15818 | 517 |
518 /* Actions */ | |
519 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->open_win), | |
15823 | 520 purple_pounce_action_is_enabled(cur_pounce, "open-window")); |
15818 | 521 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->popup), |
15823 | 522 purple_pounce_action_is_enabled(cur_pounce, "popup-notify")); |
15818 | 523 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->send_msg), |
15823 | 524 purple_pounce_action_is_enabled(cur_pounce, "send-message")); |
15818 | 525 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->exec_cmd), |
15823 | 526 purple_pounce_action_is_enabled(cur_pounce, "execute-command")); |
15818 | 527 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->play_sound), |
15823 | 528 purple_pounce_action_is_enabled(cur_pounce, "play-beep")); |
15818 | 529 |
530 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->save_pounce), | |
15823 | 531 purple_pounce_get_save(cur_pounce)); |
15818 | 532 |
15823 | 533 if ((value = purple_pounce_action_get_attribute(cur_pounce, |
15818 | 534 "send-message", |
535 "message")) != NULL) | |
536 { | |
537 gnt_entry_set_text(GNT_ENTRY(dialog->send_msg_entry), value); | |
538 } | |
539 | |
15823 | 540 if ((value = purple_pounce_action_get_attribute(cur_pounce, |
15818 | 541 "popup-notify", |
542 "reason")) != NULL) | |
543 { | |
544 gnt_entry_set_text(GNT_ENTRY(dialog->popup_entry), value); | |
545 } | |
546 | |
15823 | 547 if ((value = purple_pounce_action_get_attribute(cur_pounce, |
15818 | 548 "execute-command", |
549 "command")) != NULL) | |
550 { | |
551 gnt_entry_set_text(GNT_ENTRY(dialog->exec_cmd_entry), value); | |
552 } | |
553 } | |
554 else | |
555 { | |
15823 | 556 PurpleBuddy *buddy = NULL; |
15818 | 557 |
558 if (name != NULL) | |
15823 | 559 buddy = purple_find_buddy(account, name); |
15818 | 560 |
561 /* Set some defaults */ | |
562 if (buddy == NULL) { | |
563 gnt_check_box_set_checked( | |
564 GNT_CHECK_BOX(dialog->signon), TRUE); | |
565 } else { | |
15823 | 566 if (!PURPLE_BUDDY_IS_ONLINE(buddy)) { |
15818 | 567 gnt_check_box_set_checked( |
568 GNT_CHECK_BOX(dialog->signon), TRUE); | |
569 } else { | |
570 gboolean default_set = FALSE; | |
15823 | 571 PurplePresence *presence = purple_buddy_get_presence(buddy); |
15818 | 572 |
15823 | 573 if (purple_presence_is_idle(presence)) |
15818 | 574 { |
575 gnt_check_box_set_checked( | |
576 GNT_CHECK_BOX(dialog->idle_return), TRUE); | |
577 | |
578 default_set = TRUE; | |
579 } | |
580 | |
15823 | 581 if (!purple_presence_is_available(presence)) |
15818 | 582 { |
583 gnt_check_box_set_checked( | |
584 GNT_CHECK_BOX(dialog->away_return), TRUE); | |
585 | |
586 default_set = TRUE; | |
587 } | |
588 | |
589 if (!default_set) | |
590 { | |
591 gnt_check_box_set_checked( | |
592 GNT_CHECK_BOX(dialog->signon), TRUE); | |
593 } | |
594 } | |
595 } | |
596 | |
597 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->open_win), | |
16427
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
|
598 purple_prefs_get_bool("/finch/pounces/default_actions/open-window")); |
15818 | 599 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->popup), |
16427
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
|
600 purple_prefs_get_bool("/finch/pounces/default_actions/popup-notify")); |
15818 | 601 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->send_msg), |
16427
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
|
602 purple_prefs_get_bool("/finch/pounces/default_actions/send-message")); |
15818 | 603 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->exec_cmd), |
16427
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
|
604 purple_prefs_get_bool("/finch/pounces/default_actions/execute-command")); |
15818 | 605 gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->play_sound), |
16427
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
|
606 purple_prefs_get_bool("/finch/pounces/default_actions/play-beep")); |
15818 | 607 } |
608 | |
609 gnt_widget_show(window); | |
610 } | |
611 | |
612 | |
613 | |
614 static gboolean | |
615 pounces_manager_destroy_cb(GntWidget *widget, gpointer user_data) | |
616 { | |
617 PouncesManager *dialog = user_data; | |
618 | |
619 dialog->window = NULL; | |
620 finch_pounces_manager_hide(); | |
621 | |
622 return FALSE; | |
623 } | |
624 | |
625 | |
626 static void | |
627 pounces_manager_add_cb(GntButton *button, gpointer user_data) | |
628 { | |
19374
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
629 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
|
630 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
|
631 _("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
|
632 _("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
|
633 return; |
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
634 } |
15818 | 635 finch_pounce_editor_show(NULL, NULL, NULL); |
636 } | |
637 | |
638 | |
639 static void | |
640 pounces_manager_modify_cb(GntButton *button, gpointer user_data) | |
641 { | |
642 PouncesManager *dialog = user_data; | |
15823 | 643 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
|
644 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
|
645 finch_pounce_editor_show(NULL, NULL, pounce); |
15818 | 646 } |
647 | |
648 static void | |
15823 | 649 pounces_manager_delete_confirm_cb(PurplePounce *pounce) |
15818 | 650 { |
651 gnt_tree_remove(GNT_TREE(pounces_manager->tree), pounce); | |
652 | |
15823 | 653 purple_request_close_with_handle(pounce); |
654 purple_pounce_destroy(pounce); | |
15818 | 655 } |
656 | |
657 | |
658 static void | |
659 pounces_manager_delete_cb(GntButton *button, gpointer user_data) | |
660 { | |
661 PouncesManager *dialog = user_data; | |
15823 | 662 PurplePounce *pounce; |
663 PurpleAccount *account; | |
15818 | 664 const char *pouncer, *pouncee; |
665 char *buf; | |
666 | |
15823 | 667 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
|
668 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
|
669 return; |
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18511
diff
changeset
|
670 |
15823 | 671 account = purple_pounce_get_pouncer(pounce); |
672 pouncer = purple_account_get_username(account); | |
673 pouncee = purple_pounce_get_pouncee(pounce); | |
15818 | 674 buf = g_strdup_printf(_("Are you sure you want to delete the pounce on %s for %s?"), pouncee, pouncer); |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
675 purple_request_action(pounce, NULL, buf, NULL, 0, |
16442
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:
16427
diff
changeset
|
676 account, pouncee, NULL, |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
677 pounce, 2, |
15818 | 678 _("Delete"), pounces_manager_delete_confirm_cb, |
679 _("Cancel"), NULL); | |
680 g_free(buf); | |
681 } | |
682 | |
683 static void | |
684 pounces_manager_close_cb(GntButton *button, gpointer user_data) | |
685 { | |
686 finch_pounces_manager_hide(); | |
687 } | |
688 | |
689 | |
690 void | |
691 finch_pounces_manager_show(void) | |
692 { | |
693 PouncesManager *dialog; | |
694 GntWidget *bbox; | |
695 GntWidget *button; | |
696 GntWidget *tree; | |
697 GntWidget *win; | |
698 | |
699 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
|
700 gnt_window_present(pounces_manager->window); |
15818 | 701 return; |
702 } | |
703 | |
704 pounces_manager = dialog = g_new0(PouncesManager, 1); | |
705 | |
706 dialog->window = win = gnt_vbox_new(FALSE); | |
707 gnt_box_set_toplevel(GNT_BOX(win), TRUE); | |
708 gnt_box_set_title(GNT_BOX(win), _("Buddy Pounces")); | |
709 gnt_box_set_pad(GNT_BOX(win), 0); | |
710 | |
711 g_signal_connect(G_OBJECT(win), "destroy", | |
712 G_CALLBACK(pounces_manager_destroy_cb), dialog); | |
713 | |
714 /* List of saved buddy pounces */ | |
715 dialog->tree = tree = GNT_WIDGET(gnt_tree_new_with_columns(2)); | |
716 gnt_tree_set_column_titles(GNT_TREE(tree), "Account", "Pouncee", NULL); | |
717 gnt_tree_set_show_title(GNT_TREE(tree), TRUE); | |
718 | |
719 gnt_box_add_widget(GNT_BOX(win), tree); | |
720 | |
721 /* 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
|
722 bbox = gnt_hbox_new(FALSE); |
15818 | 723 |
724 /* Add button */ | |
725 button = gnt_button_new(_("Add")); | |
726 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
|
727 gnt_util_set_trigger_widget(tree, GNT_KEY_INS, button); |
15818 | 728 |
729 g_signal_connect(G_OBJECT(button), "activate", | |
730 G_CALLBACK(pounces_manager_add_cb), dialog); | |
731 | |
732 /* Modify button */ | |
733 button = gnt_button_new(_("Modify")); | |
734 dialog->modify_button = button; | |
735 gnt_box_add_widget(GNT_BOX(bbox), button); | |
736 | |
737 g_signal_connect(G_OBJECT(button), "activate", | |
738 G_CALLBACK(pounces_manager_modify_cb), dialog); | |
739 | |
740 /* Delete button */ | |
741 button = gnt_button_new(_("Delete")); | |
742 dialog->delete_button = button; | |
743 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
|
744 gnt_util_set_trigger_widget(tree, GNT_KEY_DEL, button); |
15818 | 745 |
746 g_signal_connect(G_OBJECT(button), "activate", | |
747 G_CALLBACK(pounces_manager_delete_cb), dialog); | |
748 | |
749 /* Close button */ | |
750 button = gnt_button_new(_("Close")); | |
751 gnt_box_add_widget(GNT_BOX(bbox), button); | |
752 gnt_widget_show(button); | |
753 | |
754 g_signal_connect(G_OBJECT(button), "activate", | |
755 G_CALLBACK(pounces_manager_close_cb), dialog); | |
756 | |
757 gnt_box_add_widget(GNT_BOX(win), bbox); | |
758 | |
759 gnt_widget_show(win); | |
760 populate_pounces_list(pounces_manager); | |
761 } | |
762 | |
763 void | |
764 finch_pounces_manager_hide(void) | |
765 { | |
766 if (pounces_manager == NULL) | |
767 return; | |
768 | |
769 if (pounces_manager->window != NULL) | |
770 gnt_widget_destroy(pounces_manager->window); | |
771 | |
15823 | 772 purple_signals_disconnect_by_handle(pounces_manager); |
15818 | 773 |
774 g_free(pounces_manager); | |
775 pounces_manager = NULL; | |
776 } | |
777 | |
778 static void | |
15823 | 779 pounce_cb(PurplePounce *pounce, PurplePounceEvent events, void *data) |
15818 | 780 { |
15823 | 781 PurpleConversation *conv; |
782 PurpleAccount *account; | |
783 PurpleBuddy *buddy; | |
15818 | 784 const char *pouncee; |
785 const char *alias; | |
786 | |
15823 | 787 pouncee = purple_pounce_get_pouncee(pounce); |
788 account = purple_pounce_get_pouncer(pounce); | |
15818 | 789 |
15823 | 790 buddy = purple_find_buddy(account, pouncee); |
15818 | 791 if (buddy != NULL) |
792 { | |
15823 | 793 alias = purple_buddy_get_alias(buddy); |
15818 | 794 if (alias == NULL) |
795 alias = pouncee; | |
796 } | |
797 else | |
798 alias = pouncee; | |
799 | |
15823 | 800 if (purple_pounce_action_is_enabled(pounce, "open-window")) |
15818 | 801 { |
15823 | 802 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, pouncee, account); |
15818 | 803 |
804 if (conv == NULL) | |
15823 | 805 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, pouncee); |
15818 | 806 } |
807 | |
15823 | 808 if (purple_pounce_action_is_enabled(pounce, "popup-notify")) |
15818 | 809 { |
22213
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
810 char *tmp = NULL; |
15818 | 811 const char *name_shown; |
812 const char *reason; | |
22213
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
813 struct { |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
814 PurplePounceEvent event; |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
815 const char *format; |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
816 } messages[] = { |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
817 {PURPLE_POUNCE_TYPING, _("%s has started typing to you (%s)")}, |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
818 {PURPLE_POUNCE_TYPED, _("%s has paused while typing to you (%s)")}, |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
819 {PURPLE_POUNCE_SIGNON, _("%s has signed on (%s)")}, |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
820 {PURPLE_POUNCE_IDLE_RETURN, _("%s has returned from being idle (%s)")}, |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
821 {PURPLE_POUNCE_AWAY_RETURN, _("%s has returned from being away (%s)")}, |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
822 {PURPLE_POUNCE_TYPING_STOPPED, _("%s has stopped typing to you (%s)")}, |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
823 {PURPLE_POUNCE_SIGNOFF, _("%s has signed off (%s)")}, |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
824 {PURPLE_POUNCE_IDLE, _("%s has become idle (%s)")}, |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
825 {PURPLE_POUNCE_AWAY, _("%s has gone away. (%s)")}, |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
826 {PURPLE_POUNCE_MESSAGE_RECEIVED, _("%s has sent you a message. (%s)")}, |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
827 {0, NULL} |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
828 }; |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
829 int i; |
15823 | 830 reason = purple_pounce_action_get_attribute(pounce, "popup-notify", |
22213
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
831 "reason"); |
15818 | 832 |
833 /* | |
834 * Here we place the protocol name in the pounce dialog to lessen | |
835 * confusion about what protocol a pounce is for. | |
836 */ | |
22213
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
837 for (i = 0; messages[i].format != NULL; i++) { |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
838 if (messages[i].event & events) { |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
839 tmp = g_strdup_printf(messages[i].format, alias, |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
840 purple_account_get_protocol_name(account)); |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
841 break; |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
842 } |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
843 } |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
844 if (tmp == NULL) |
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
845 tmp = g_strdup(_("Unknown pounce event. Please report this!")); |
15818 | 846 |
847 /* | |
848 * Ok here is where I change the second argument, title, from | |
849 * NULL to the account alias if we have it or the account | |
850 * name if that's all we have | |
851 */ | |
15823 | 852 if ((name_shown = purple_account_get_alias(account)) == NULL) |
853 name_shown = purple_account_get_username(account); | |
15818 | 854 |
855 if (reason == NULL) | |
856 { | |
15823 | 857 purple_notify_info(NULL, name_shown, tmp, purple_date_format_full(NULL)); |
15818 | 858 } |
859 else | |
860 { | |
15823 | 861 char *tmp2 = g_strdup_printf("%s\n\n%s", reason, purple_date_format_full(NULL)); |
862 purple_notify_info(NULL, name_shown, tmp, tmp2); | |
15818 | 863 g_free(tmp2); |
864 } | |
865 g_free(tmp); | |
866 } | |
867 | |
15823 | 868 if (purple_pounce_action_is_enabled(pounce, "send-message")) |
15818 | 869 { |
870 const char *message; | |
871 | |
15823 | 872 message = purple_pounce_action_get_attribute(pounce, "send-message", |
15818 | 873 "message"); |
874 | |
875 if (message != NULL) | |
876 { | |
15823 | 877 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, pouncee, account); |
15818 | 878 |
879 if (conv == NULL) | |
15823 | 880 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, pouncee); |
15818 | 881 |
15823 | 882 purple_conversation_write(conv, NULL, message, |
883 PURPLE_MESSAGE_SEND, time(NULL)); | |
15818 | 884 |
22213
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21560
diff
changeset
|
885 serv_send_im(purple_account_get_connection(account), (char *)pouncee, (char *)message, 0); |
15818 | 886 } |
887 } | |
888 | |
15823 | 889 if (purple_pounce_action_is_enabled(pounce, "execute-command")) |
15818 | 890 { |
891 const char *command; | |
892 | |
15823 | 893 command = purple_pounce_action_get_attribute(pounce, |
15818 | 894 "execute-command", "command"); |
895 | |
896 if (command != NULL) | |
897 { | |
898 char *localecmd = g_locale_from_utf8(command, -1, NULL, | |
899 NULL, NULL); | |
900 | |
901 if (localecmd != NULL) | |
902 { | |
903 int pid = fork(); | |
904 | |
905 if (pid == 0) { | |
906 char *args[4]; | |
907 | |
908 args[0] = "sh"; | |
909 args[1] = "-c"; | |
910 args[2] = (char *)localecmd; | |
911 args[3] = NULL; | |
912 | |
913 execvp(args[0], args); | |
914 | |
915 _exit(0); | |
916 } | |
917 g_free(localecmd); | |
918 } | |
919 } | |
920 } | |
921 | |
15823 | 922 if (purple_pounce_action_is_enabled(pounce, "play-beep")) |
15818 | 923 { |
924 beep(); | |
925 } | |
926 } | |
927 | |
928 static void | |
15823 | 929 free_pounce(PurplePounce *pounce) |
15818 | 930 { |
931 update_pounces(); | |
932 } | |
933 | |
934 static void | |
15823 | 935 new_pounce(PurplePounce *pounce) |
15818 | 936 { |
15823 | 937 purple_pounce_action_register(pounce, "open-window"); |
938 purple_pounce_action_register(pounce, "popup-notify"); | |
939 purple_pounce_action_register(pounce, "send-message"); | |
940 purple_pounce_action_register(pounce, "execute-command"); | |
941 purple_pounce_action_register(pounce, "play-beep"); | |
15818 | 942 |
943 update_pounces(); | |
944 } | |
945 | |
946 void * | |
947 finch_pounces_get_handle() | |
948 { | |
949 static int handle; | |
950 | |
951 return &handle; | |
952 } | |
953 | |
954 void | |
955 finch_pounces_init(void) | |
956 { | |
15823 | 957 purple_pounces_register_handler(FINCH_UI, pounce_cb, new_pounce, |
15818 | 958 free_pounce); |
959 | |
16427
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
|
960 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
|
961 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
|
962 purple_prefs_add_bool("/finch/pounces/default_actions/open-window", |
15818 | 963 FALSE); |
16427
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
|
964 purple_prefs_add_bool("/finch/pounces/default_actions/popup-notify", |
15818 | 965 TRUE); |
16427
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
|
966 purple_prefs_add_bool("/finch/pounces/default_actions/send-message", |
15818 | 967 FALSE); |
16427
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
|
968 purple_prefs_add_bool("/finch/pounces/default_actions/execute-command", |
15818 | 969 FALSE); |
16427
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
|
970 purple_prefs_add_bool("/finch/pounces/default_actions/play-beep", |
15818 | 971 FALSE); |
16427
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
|
972 purple_prefs_add_none("/finch/pounces/dialog"); |
15818 | 973 |
15823 | 974 purple_signal_connect(purple_connections_get_handle(), "signed-on", |
15818 | 975 finch_pounces_get_handle(), |
15823 | 976 PURPLE_CALLBACK(signed_on_off_cb), NULL); |
977 purple_signal_connect(purple_connections_get_handle(), "signed-off", | |
15818 | 978 finch_pounces_get_handle(), |
15823 | 979 PURPLE_CALLBACK(signed_on_off_cb), NULL); |
15818 | 980 } |
981 | |
982 /* XXX: There's no such thing in pidgin. Perhaps there should be? */ | |
983 void finch_pounces_uninit() | |
984 { | |
24009
4ada5e2189d6
Use the more appropriate _unregister_handler function.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22249
diff
changeset
|
985 purple_pounces_unregister_handler(FINCH_UI); |
15818 | 986 |
15823 | 987 purple_signals_disconnect_by_handle(finch_pounces_get_handle()); |
15818 | 988 } |
989 |