Mercurial > pidgin
annotate finch/gntnotify.c @ 23509:c4ec724b3b53
Make sure xmlnode_copy also copies the prefix and namespace_map from
the source xmlnode.
This should fix operations on MSN member role lists. That means
blocking and unblocking should work now. And removing new buddies from
the pending list too, so you shouldn't get asked to add them every time
you log in.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Sat, 28 Jun 2008 06:55:30 +0000 |
parents | 41171963c986 |
children | ff29208e03ef 4df8161acc3b |
rev | line source |
---|---|
15817 | 1 /** |
2 * @file gntnotify.c GNT Notify 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:
18347
diff
changeset
|
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
15817 | 25 */ |
26 #include <gnt.h> | |
27 #include <gntbox.h> | |
28 #include <gntbutton.h> | |
29 #include <gntlabel.h> | |
30 #include <gnttree.h> | |
16925
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
31 #include <gntutils.h> |
22843
a9141d049266
Show the url, instead of silently ignoring a url-open request.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22007
diff
changeset
|
32 #include <gntwindow.h> |
15817 | 33 |
18210
b8572b937c09
#include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents:
17805
diff
changeset
|
34 #include "finch.h" |
b8572b937c09
#include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents:
17805
diff
changeset
|
35 |
15817 | 36 #include <util.h> |
37 | |
38 #include "gntnotify.h" | |
39 | |
40 static struct | |
41 { | |
42 GntWidget *window; | |
43 GntWidget *tree; | |
44 } emaildialog; | |
45 | |
46 static void | |
15822 | 47 notify_msg_window_destroy_cb(GntWidget *window, PurpleNotifyMsgType type) |
15817 | 48 { |
15822 | 49 purple_notify_close(type, window); |
15817 | 50 } |
51 | |
52 static void * | |
15822 | 53 finch_notify_message(PurpleNotifyMsgType type, const char *title, |
15817 | 54 const char *primary, const char *secondary) |
55 { | |
56 GntWidget *window, *button; | |
57 GntTextFormatFlags pf = 0, sf = 0; | |
58 | |
59 switch (type) | |
60 { | |
15822 | 61 case PURPLE_NOTIFY_MSG_ERROR: |
15817 | 62 sf |= GNT_TEXT_FLAG_BOLD; |
15822 | 63 case PURPLE_NOTIFY_MSG_WARNING: |
15817 | 64 pf |= GNT_TEXT_FLAG_UNDERLINE; |
15822 | 65 case PURPLE_NOTIFY_MSG_INFO: |
15817 | 66 pf |= GNT_TEXT_FLAG_BOLD; |
67 break; | |
68 } | |
69 | |
22843
a9141d049266
Show the url, instead of silently ignoring a url-open request.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22007
diff
changeset
|
70 window = gnt_window_box_new(FALSE, TRUE); |
15817 | 71 gnt_box_set_title(GNT_BOX(window), title); |
72 gnt_box_set_fill(GNT_BOX(window), FALSE); | |
73 gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID); | |
17805
7f652ef12ed6
Remove the confusing 'OK' button from the auth dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17804
diff
changeset
|
74 gnt_box_set_pad(GNT_BOX(window), 0); |
15817 | 75 |
76 if (primary) | |
77 gnt_box_add_widget(GNT_BOX(window), | |
78 gnt_label_new_with_format(primary, pf)); | |
79 | |
80 button = gnt_button_new(_("OK")); | |
16925
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
81 |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
82 if (secondary) { |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
83 GntWidget *msg; |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
84 if (type == PURPLE_NOTIFY_FORMATTED) { |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
85 int width = -1, height = -1; |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
86 msg = gnt_text_view_new(); |
20780
e587a7be2916
Top align the notification message.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20100
diff
changeset
|
87 gnt_text_view_set_flag(GNT_TEXT_VIEW(msg), GNT_TEXT_VIEW_TOP_ALIGN); |
16925
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
88 gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(msg), secondary, sf); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
89 gnt_text_view_attach_scroll_widget(GNT_TEXT_VIEW(msg), button); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
90 gnt_util_get_text_bound(secondary, &width, &height); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
91 gnt_widget_set_size(msg, width + 3, height + 1); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
92 } else { |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
93 msg = gnt_label_new_with_format(secondary, sf); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
94 } |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
95 gnt_box_add_widget(GNT_BOX(window), msg); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
96 g_object_set_data(G_OBJECT(window), "info-widget", msg); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
97 } |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
98 |
15817 | 99 gnt_box_add_widget(GNT_BOX(window), button); |
100 g_signal_connect_swapped(G_OBJECT(button), "activate", | |
101 G_CALLBACK(gnt_widget_destroy), window); | |
102 g_signal_connect(G_OBJECT(window), "destroy", | |
103 G_CALLBACK(notify_msg_window_destroy_cb), GINT_TO_POINTER(type)); | |
104 | |
105 gnt_widget_show(window); | |
106 return window; | |
107 } | |
108 | |
109 /* handle is, in all/most occasions, a GntWidget * */ | |
15822 | 110 static void finch_close_notify(PurpleNotifyType type, void *handle) |
15817 | 111 { |
112 GntWidget *widget = handle; | |
113 | |
114 if (!widget) | |
115 return; | |
116 | |
117 while (widget->parent) | |
118 widget = widget->parent; | |
119 | |
15822 | 120 if (type == PURPLE_NOTIFY_SEARCHRESULTS) |
121 purple_notify_searchresults_free(g_object_get_data(handle, "notify-results")); | |
15817 | 122 #if 1 |
123 /* This did not seem to be necessary */ | |
124 g_signal_handlers_disconnect_by_func(G_OBJECT(widget), | |
125 G_CALLBACK(notify_msg_window_destroy_cb), GINT_TO_POINTER(type)); | |
126 #endif | |
127 gnt_widget_destroy(widget); | |
128 } | |
129 | |
130 static void *finch_notify_formatted(const char *title, const char *primary, | |
131 const char *secondary, const char *text) | |
132 { | |
133 /* XXX: For now, simply strip the html and use _notify_message. For future use, | |
134 * there should be some way of parsing the makrups from GntTextView */ | |
15822 | 135 char *unformat = purple_markup_strip_html(text); |
15817 | 136 char *t = g_strdup_printf("%s%s%s", |
137 secondary ? secondary : "", | |
138 secondary ? "\n" : "", | |
139 unformat ? unformat : ""); | |
140 | |
15822 | 141 void *ret = finch_notify_message(PURPLE_NOTIFY_FORMATTED, title, primary, t); |
15817 | 142 |
143 g_free(t); | |
144 g_free(unformat); | |
145 | |
146 return ret; | |
147 } | |
148 | |
149 static void | |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
20908
diff
changeset
|
150 reset_email_dialog(void) |
15817 | 151 { |
152 emaildialog.window = NULL; | |
153 emaildialog.tree = NULL; | |
154 } | |
155 | |
156 static void | |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
20908
diff
changeset
|
157 setup_email_dialog(void) |
15817 | 158 { |
159 GntWidget *box, *tree, *button; | |
160 if (emaildialog.window) | |
161 return; | |
162 | |
163 emaildialog.window = box = gnt_vbox_new(FALSE); | |
164 gnt_box_set_toplevel(GNT_BOX(box), TRUE); | |
165 gnt_box_set_title(GNT_BOX(box), _("Emails")); | |
166 gnt_box_set_fill(GNT_BOX(box), FALSE); | |
167 gnt_box_set_alignment(GNT_BOX(box), GNT_ALIGN_MID); | |
168 gnt_box_set_pad(GNT_BOX(box), 0); | |
169 | |
170 gnt_box_add_widget(GNT_BOX(box), | |
171 gnt_label_new_with_format(_("You have mail!"), GNT_TEXT_FLAG_BOLD)); | |
172 | |
173 emaildialog.tree = tree = gnt_tree_new_with_columns(3); | |
17747 | 174 gnt_tree_set_column_titles(GNT_TREE(tree), _("Account"), _("Sender"), _("Subject")); |
15817 | 175 gnt_tree_set_show_title(GNT_TREE(tree), TRUE); |
176 gnt_tree_set_col_width(GNT_TREE(tree), 0, 15); | |
177 gnt_tree_set_col_width(GNT_TREE(tree), 1, 25); | |
178 gnt_tree_set_col_width(GNT_TREE(tree), 2, 25); | |
179 | |
180 gnt_box_add_widget(GNT_BOX(box), tree); | |
181 | |
182 button = gnt_button_new(_("Close")); | |
183 gnt_box_add_widget(GNT_BOX(box), button); | |
184 | |
185 g_signal_connect_swapped(G_OBJECT(button), "activate", G_CALLBACK(gnt_widget_destroy), box); | |
186 g_signal_connect(G_OBJECT(box), "destroy", G_CALLBACK(reset_email_dialog), NULL); | |
187 } | |
188 | |
189 static void * | |
15822 | 190 finch_notify_emails(PurpleConnection *gc, size_t count, gboolean detailed, |
15817 | 191 const char **subjects, const char **froms, const char **tos, |
192 const char **urls) | |
193 { | |
15822 | 194 PurpleAccount *account = purple_connection_get_account(gc); |
15817 | 195 GString *message = g_string_new(NULL); |
196 void *ret; | |
20908
9ec0382e6c8d
Fix the searchresult thingy nosnilmot fixed in pidgin.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20780
diff
changeset
|
197 static int key = 0; |
15817 | 198 |
199 if (!detailed) | |
200 { | |
201 g_string_append_printf(message, | |
202 ngettext("%s (%s) has %d new message.", | |
203 "%s (%s) has %d new messages.", | |
204 (int)count), | |
15822 | 205 tos ? *tos : purple_account_get_username(account), |
206 purple_account_get_protocol_name(account), (int)count); | |
15817 | 207 } |
208 else | |
209 { | |
210 char *to; | |
23176
41171963c986
Highlight the mail window for new mails.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22843
diff
changeset
|
211 gboolean newwin = (emaildialog.window == NULL); |
15817 | 212 |
23176
41171963c986
Highlight the mail window for new mails.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22843
diff
changeset
|
213 if (newwin) |
41171963c986
Highlight the mail window for new mails.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22843
diff
changeset
|
214 setup_email_dialog(); |
15817 | 215 |
15822 | 216 to = g_strdup_printf("%s (%s)", tos ? *tos : purple_account_get_username(account), |
217 purple_account_get_protocol_name(account)); | |
20908
9ec0382e6c8d
Fix the searchresult thingy nosnilmot fixed in pidgin.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20780
diff
changeset
|
218 gnt_tree_add_row_after(GNT_TREE(emaildialog.tree), GINT_TO_POINTER(++key), |
15817 | 219 gnt_tree_create_row(GNT_TREE(emaildialog.tree), to, |
220 froms ? *froms : "[Unknown sender]", | |
221 *subjects), | |
222 NULL, NULL); | |
223 g_free(to); | |
23176
41171963c986
Highlight the mail window for new mails.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22843
diff
changeset
|
224 if (newwin) |
41171963c986
Highlight the mail window for new mails.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22843
diff
changeset
|
225 gnt_widget_show(emaildialog.window); |
41171963c986
Highlight the mail window for new mails.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22843
diff
changeset
|
226 else |
41171963c986
Highlight the mail window for new mails.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22843
diff
changeset
|
227 gnt_window_present(emaildialog.window); |
15817 | 228 return NULL; |
229 } | |
230 | |
15822 | 231 ret = finch_notify_message(PURPLE_NOTIFY_EMAIL, _("New Mail"), _("You have mail!"), message->str); |
15817 | 232 g_string_free(message, TRUE); |
233 return ret; | |
234 } | |
235 | |
236 static void * | |
15822 | 237 finch_notify_email(PurpleConnection *gc, const char *subject, const char *from, |
15817 | 238 const char *to, const char *url) |
239 { | |
240 return finch_notify_emails(gc, 1, subject != NULL, | |
241 subject ? &subject : NULL, | |
242 from ? &from : NULL, | |
243 to ? &to : NULL, | |
244 url ? &url : NULL); | |
245 } | |
246 | |
16925
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
247 /** User information. **/ |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
248 static GHashTable *userinfo; |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
249 |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
250 static char * |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
251 userinfo_hash(PurpleAccount *account, const char *who) |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
252 { |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
253 char key[256]; |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
254 snprintf(key, sizeof(key), "%s - %s", purple_account_get_username(account), purple_normalize(account, who)); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
255 return g_utf8_strup(key, -1); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
256 } |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
257 |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
258 static void |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
259 remove_userinfo(GntWidget *widget, gpointer key) |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
260 { |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
261 g_hash_table_remove(userinfo, key); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
262 } |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
263 |
15817 | 264 static void * |
15822 | 265 finch_notify_userinfo(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info) |
15817 | 266 { |
267 char *primary; | |
268 char *info; | |
269 void *ui_handle; | |
16925
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
270 char *key = userinfo_hash(purple_connection_get_account(gc), who); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
271 |
15822 | 272 info = purple_notify_user_info_get_text_with_newline(user_info, "<BR>"); |
16925
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
273 |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
274 ui_handle = g_hash_table_lookup(userinfo, key); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
275 if (ui_handle != NULL) { |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
276 GntTextView *msg = GNT_TEXT_VIEW(g_object_get_data(G_OBJECT(ui_handle), "info-widget")); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
277 char *strip = purple_markup_strip_html(info); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
278 int tvw, tvh, width, height, ntvw, ntvh; |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
279 |
17804
464840043c66
Show information about the user requesting authorization.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17747
diff
changeset
|
280 while (GNT_WIDGET(ui_handle)->parent) |
464840043c66
Show information about the user requesting authorization.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17747
diff
changeset
|
281 ui_handle = GNT_WIDGET(ui_handle)->parent; |
16925
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
282 gnt_widget_get_size(GNT_WIDGET(ui_handle), &width, &height); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
283 gnt_widget_get_size(GNT_WIDGET(msg), &tvw, &tvh); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
284 |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
285 gnt_text_view_clear(msg); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
286 gnt_text_view_append_text_with_flags(msg, strip, GNT_TEXT_FLAG_NORMAL); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
287 gnt_text_view_scroll(msg, 0); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
288 gnt_util_get_text_bound(strip, &ntvw, &ntvh); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
289 ntvw += 3; |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
290 ntvh++; |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
291 |
17804
464840043c66
Show information about the user requesting authorization.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17747
diff
changeset
|
292 gnt_screen_resize_widget(GNT_WIDGET(ui_handle), width + MAX(0, ntvw - tvw), height + MAX(0, ntvh - tvh)); |
16925
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
293 g_free(strip); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
294 g_free(key); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
295 } else { |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
296 primary = g_strdup_printf(_("Info for %s"), who); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
297 ui_handle = finch_notify_formatted(_("Buddy Information"), primary, NULL, info); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
298 g_hash_table_insert(userinfo, key, ui_handle); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
299 g_free(primary); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
300 g_signal_connect(G_OBJECT(ui_handle), "destroy", G_CALLBACK(remove_userinfo), key); |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
301 } |
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
302 |
15817 | 303 g_free(info); |
304 return ui_handle; | |
305 } | |
306 | |
307 static void | |
15822 | 308 notify_button_activated(GntWidget *widget, PurpleNotifySearchButton *b) |
15817 | 309 { |
310 GList *list = NULL; | |
15822 | 311 PurpleAccount *account = g_object_get_data(G_OBJECT(widget), "notify-account"); |
15817 | 312 gpointer data = g_object_get_data(G_OBJECT(widget), "notify-data"); |
313 | |
18347
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
314 list = gnt_tree_get_selection_text_list(GNT_TREE(g_object_get_data(G_OBJECT(widget), "notify-tree"))); |
15817 | 315 |
15822 | 316 b->callback(purple_account_get_connection(account), list, data); |
15817 | 317 g_list_foreach(list, (GFunc)g_free, NULL); |
318 g_list_free(list); | |
319 } | |
320 | |
321 static void | |
15822 | 322 finch_notify_sr_new_rows(PurpleConnection *gc, |
323 PurpleNotifySearchResults *results, void *data) | |
15817 | 324 { |
325 GntTree *tree = GNT_TREE(data); | |
326 GList *o; | |
327 | |
328 /* XXX: Do I need to empty the tree here? */ | |
329 | |
330 for (o = results->rows; o; o = o->next) | |
331 { | |
332 gnt_tree_add_row_after(GNT_TREE(tree), o->data, | |
333 gnt_tree_create_row_from_list(GNT_TREE(tree), o->data), | |
334 NULL, NULL); | |
335 } | |
336 } | |
337 | |
338 static void * | |
15822 | 339 finch_notify_searchresults(PurpleConnection *gc, const char *title, |
15817 | 340 const char *primary, const char *secondary, |
15822 | 341 PurpleNotifySearchResults *results, gpointer data) |
15817 | 342 { |
343 GntWidget *window, *tree, *box, *button; | |
344 GList *iter; | |
18347
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
345 int columns, i; |
15817 | 346 |
347 window = gnt_vbox_new(FALSE); | |
348 gnt_box_set_toplevel(GNT_BOX(window), TRUE); | |
349 gnt_box_set_title(GNT_BOX(window), title); | |
18347
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
350 gnt_box_set_fill(GNT_BOX(window), TRUE); |
15817 | 351 gnt_box_set_pad(GNT_BOX(window), 0); |
352 gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID); | |
353 | |
18347
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
354 if (primary) |
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
355 gnt_box_add_widget(GNT_BOX(window), |
15817 | 356 gnt_label_new_with_format(primary, GNT_TEXT_FLAG_BOLD)); |
18347
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
357 if (secondary) |
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
358 gnt_box_add_widget(GNT_BOX(window), |
15817 | 359 gnt_label_new_with_format(secondary, GNT_TEXT_FLAG_NORMAL)); |
360 | |
20100
a3f07fa68e90
Access search results directly instead of going through the API because
Mark Doliner <mark@kingant.net>
parents:
20074
diff
changeset
|
361 columns = g_list_length(results->columns); |
18347
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
362 tree = gnt_tree_new_with_columns(columns); |
15817 | 363 gnt_tree_set_show_title(GNT_TREE(tree), TRUE); |
364 gnt_box_add_widget(GNT_BOX(window), tree); | |
365 | |
20100
a3f07fa68e90
Access search results directly instead of going through the API because
Mark Doliner <mark@kingant.net>
parents:
20074
diff
changeset
|
366 i = 0; |
a3f07fa68e90
Access search results directly instead of going through the API because
Mark Doliner <mark@kingant.net>
parents:
20074
diff
changeset
|
367 for (iter = results->columns; iter; iter = iter->next) |
a3f07fa68e90
Access search results directly instead of going through the API because
Mark Doliner <mark@kingant.net>
parents:
20074
diff
changeset
|
368 { |
20908
9ec0382e6c8d
Fix the searchresult thingy nosnilmot fixed in pidgin.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20780
diff
changeset
|
369 PurpleNotifySearchColumn *column = iter->data; |
9ec0382e6c8d
Fix the searchresult thingy nosnilmot fixed in pidgin.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20780
diff
changeset
|
370 gnt_tree_set_column_title(GNT_TREE(tree), i, column->title); |
20100
a3f07fa68e90
Access search results directly instead of going through the API because
Mark Doliner <mark@kingant.net>
parents:
20074
diff
changeset
|
371 i++; |
a3f07fa68e90
Access search results directly instead of going through the API because
Mark Doliner <mark@kingant.net>
parents:
20074
diff
changeset
|
372 } |
18347
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
373 |
15817 | 374 box = gnt_hbox_new(TRUE); |
375 | |
376 for (iter = results->buttons; iter; iter = iter->next) | |
377 { | |
15822 | 378 PurpleNotifySearchButton *b = iter->data; |
15817 | 379 const char *text; |
380 | |
381 switch (b->type) | |
382 { | |
15822 | 383 case PURPLE_NOTIFY_BUTTON_LABELED: |
15817 | 384 text = b->label; |
385 break; | |
15822 | 386 case PURPLE_NOTIFY_BUTTON_CONTINUE: |
15817 | 387 text = _("Continue"); |
388 break; | |
15822 | 389 case PURPLE_NOTIFY_BUTTON_ADD: |
15817 | 390 text = _("Add"); |
391 break; | |
15822 | 392 case PURPLE_NOTIFY_BUTTON_INFO: |
15817 | 393 text = _("Info"); |
394 break; | |
15822 | 395 case PURPLE_NOTIFY_BUTTON_IM: |
15817 | 396 text = _("IM"); |
397 break; | |
15822 | 398 case PURPLE_NOTIFY_BUTTON_JOIN: |
15817 | 399 text = _("Join"); |
400 break; | |
15822 | 401 case PURPLE_NOTIFY_BUTTON_INVITE: |
15817 | 402 text = _("Invite"); |
403 break; | |
404 default: | |
405 text = _("(none)"); | |
406 } | |
407 | |
408 button = gnt_button_new(text); | |
15822 | 409 g_object_set_data(G_OBJECT(button), "notify-account", purple_connection_get_account(gc)); |
15817 | 410 g_object_set_data(G_OBJECT(button), "notify-data", data); |
18347
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
411 g_object_set_data(G_OBJECT(button), "notify-tree", tree); |
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
412 g_signal_connect(G_OBJECT(button), "activate", |
15817 | 413 G_CALLBACK(notify_button_activated), b); |
414 | |
415 gnt_box_add_widget(GNT_BOX(box), button); | |
416 } | |
417 | |
418 gnt_box_add_widget(GNT_BOX(window), box); | |
419 | |
420 finch_notify_sr_new_rows(gc, results, tree); | |
421 | |
422 gnt_widget_show(window); | |
423 g_object_set_data(G_OBJECT(window), "notify-results", results); | |
424 | |
425 return tree; | |
426 } | |
427 | |
22843
a9141d049266
Show the url, instead of silently ignoring a url-open request.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22007
diff
changeset
|
428 static void * |
a9141d049266
Show the url, instead of silently ignoring a url-open request.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22007
diff
changeset
|
429 finch_notify_uri(const char *url) |
a9141d049266
Show the url, instead of silently ignoring a url-open request.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22007
diff
changeset
|
430 { |
a9141d049266
Show the url, instead of silently ignoring a url-open request.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22007
diff
changeset
|
431 return finch_notify_message(PURPLE_NOTIFY_URI, _("URI"), url, NULL); |
a9141d049266
Show the url, instead of silently ignoring a url-open request.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22007
diff
changeset
|
432 } |
a9141d049266
Show the url, instead of silently ignoring a url-open request.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22007
diff
changeset
|
433 |
15822 | 434 static PurpleNotifyUiOps ops = |
15817 | 435 { |
17091
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16925
diff
changeset
|
436 finch_notify_message, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16925
diff
changeset
|
437 finch_notify_email, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16925
diff
changeset
|
438 finch_notify_emails, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16925
diff
changeset
|
439 finch_notify_formatted, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16925
diff
changeset
|
440 finch_notify_searchresults, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16925
diff
changeset
|
441 finch_notify_sr_new_rows, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16925
diff
changeset
|
442 finch_notify_userinfo, |
22843
a9141d049266
Show the url, instead of silently ignoring a url-open request.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22007
diff
changeset
|
443 finch_notify_uri, |
17091
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16925
diff
changeset
|
444 finch_close_notify, /* The rest of the notify-uiops return a GntWidget. |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16925
diff
changeset
|
445 These widgets should be destroyed from here. */ |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16925
diff
changeset
|
446 NULL, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16925
diff
changeset
|
447 NULL, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16925
diff
changeset
|
448 NULL, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16925
diff
changeset
|
449 NULL |
15817 | 450 |
451 }; | |
452 | |
15822 | 453 PurpleNotifyUiOps *finch_notify_get_ui_ops() |
15817 | 454 { |
455 return &ops; | |
456 } | |
457 | |
458 void finch_notify_init() | |
459 { | |
16925
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
460 userinfo = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); |
15817 | 461 } |
462 | |
463 void finch_notify_uninit() | |
464 { | |
16925
9a568611fa4a
When getting information, show "Information: Retrieving..." before the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
465 g_hash_table_destroy(userinfo); |
15817 | 466 } |
467 | |
468 |