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