Mercurial > pidgin.yaz
annotate src/gtknotify.c @ 11620:fbc4eeab2227
[gaim-migrate @ 13894]
this lets you leave a highlighted tab by control-tab (forward) or
control-shift-tab (backwards). its not 100% intuitive though, because it
leaves the tab highlighed, which means that in the case of 1 highlighted
tab, the current one, you will leave the tab on the first control-tab,
then immediately return to it on the second one. For this reason, removing
the highlighting of current tabs would be a better permanent solution.
In talking with Tim however, he suggested we do both, on the off chance we
change our minds about the tab highlighting and go back to the
autoswitching.
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Thu, 06 Oct 2005 15:01:08 +0000 |
parents | c9b815aeddc1 |
children | 9537977703bb |
rev | line source |
---|---|
5437 | 1 /** |
2 * @file gtknotify.c GTK+ Notification API | |
3 * @ingroup gtkui | |
4 * | |
5 * gaim | |
6 * | |
8046 | 7 * Gaim is the legal property of its developers, whose names are too numerous |
8 * to list here. Please refer to the COPYRIGHT file distributed with this | |
9 * source distribution. | |
6465
fb64cc87bc96
[gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents:
6381
diff
changeset
|
10 * |
5437 | 11 * This program is free software; you can redistribute it and/or modify |
12 * it under the terms of the GNU General Public License as published by | |
13 * the Free Software Foundation; either version 2 of the License, or | |
14 * (at your option) any later version. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
20 * | |
21 * You should have received a copy of the GNU General Public License | |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
24 */ | |
9791 | 25 #include "internal.h" |
26 #include "gtkgaim.h" | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5794
diff
changeset
|
27 |
7455 | 28 #include <gdk/gdkkeysyms.h> |
29 | |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
30 #include "connection.h" |
8284 | 31 #include "debug.h" |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
32 #include "prefs.h" |
10297
ec140184437b
[gaim-migrate @ 11480]
Luke Schierer <lschiere@pidgin.im>
parents:
10260
diff
changeset
|
33 #include "gtkstock.h" |
6465
fb64cc87bc96
[gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents:
6381
diff
changeset
|
34 #include "util.h" |
5437 | 35 |
10439 | 36 #include "gtkblist.h" |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
37 #include "gtkimhtml.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5794
diff
changeset
|
38 #include "gtknotify.h" |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
39 #include "gtkutils.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5794
diff
changeset
|
40 |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
41 typedef struct |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
42 { |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5543
diff
changeset
|
43 GaimConnection *gc; |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
44 char *url; |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
45 GtkWidget *dialog; |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
46 GtkWidget *label; |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
47 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
48 } GaimNotifyMailData; |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
49 |
10439 | 50 typedef struct |
51 { | |
52 GaimAccount *account; | |
53 GtkListStore *model; | |
54 GtkWidget *treeview; | |
55 GtkWidget *window; | |
56 | |
57 } GaimNotifySearchResultsData; | |
58 | |
11359 | 59 typedef struct |
10439 | 60 { |
11359 | 61 GaimNotifySearchButton *button; |
62 GaimNotifySearchResultsData *data; | |
63 | |
64 } GaimNotifySearchResultsButtonData; | |
10439 | 65 |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
66 static void *gaim_gtk_notify_emails(size_t count, gboolean detailed, |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
67 const char **subjects, |
5476
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
68 const char **froms, const char **tos, |
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
69 const char **urls, GCallback cb, |
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
70 void *user_data); |
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
71 |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
72 static void |
6354
76af8c066f8c
[gaim-migrate @ 6853]
Christian Hammond <chipx86@chipx86.com>
parents:
6106
diff
changeset
|
73 message_response_cb(GtkDialog *dialog, gint id, GtkWidget *widget) |
6104 | 74 { |
6357 | 75 gaim_notify_close(GAIM_NOTIFY_MESSAGE, widget); |
6104 | 76 } |
77 | |
78 static void | |
5794
5e93fc46d1af
[gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
79 email_response_cb(GtkDialog *dialog, gint id, GaimNotifyMailData *data) |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
80 { |
10260 | 81 if (id == GTK_RESPONSE_YES) |
10240
95ca0db2d01d
[gaim-migrate @ 11377]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
10209
diff
changeset
|
82 gaim_notify_uri(NULL, data->url); |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
83 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
84 gaim_notify_close(GAIM_NOTIFY_EMAILS, data); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
85 } |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
86 |
7007
da1430478acf
[gaim-migrate @ 7564]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
87 static void |
da1430478acf
[gaim-migrate @ 7564]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
88 formatted_close_cb(GtkWidget *win, GdkEvent *event, void *user_data) |
da1430478acf
[gaim-migrate @ 7564]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
89 { |
da1430478acf
[gaim-migrate @ 7564]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
90 gaim_notify_close(GAIM_NOTIFY_FORMATTED, win); |
da1430478acf
[gaim-migrate @ 7564]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
91 } |
da1430478acf
[gaim-migrate @ 7564]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
92 |
10439 | 93 static void |
94 searchresults_close_cb(GaimNotifySearchResultsData *data, GdkEvent *event, void *user_data) | |
95 { | |
96 gaim_notify_close(GAIM_NOTIFY_SEARCHRESULTS, data); | |
97 } | |
98 | |
99 static void | |
11359 | 100 searchresults_callback_wrapper_cb(GtkWidget *widget, GaimNotifySearchResultsButtonData *bd) |
10439 | 101 { |
11359 | 102 GaimNotifySearchResultsData *data = bd->data; |
103 | |
10439 | 104 GtkTreeSelection *selection; |
105 GtkTreeModel *model; | |
106 GtkTreeIter iter; | |
11359 | 107 GaimNotifySearchButton *button; |
108 GList *row = NULL; | |
109 gchar *str; | |
110 int i; | |
10439 | 111 |
112 g_return_if_fail(data != NULL); | |
113 | |
114 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->treeview)); | |
115 | |
116 if (gtk_tree_selection_get_selected(selection, &model, &iter)) | |
117 { | |
11359 | 118 for (i = 1; i < gtk_tree_model_get_n_columns(GTK_TREE_MODEL(model)); i++) { |
119 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, i, &str, -1); | |
120 row = g_list_append(row, str); | |
121 } | |
10439 | 122 } |
11359 | 123 |
124 button = bd->button; | |
125 button->callback(gaim_account_get_connection(data->account), row); | |
10439 | 126 } |
127 | |
5437 | 128 static void * |
129 gaim_gtk_notify_message(GaimNotifyMsgType type, const char *title, | |
130 const char *primary, const char *secondary, | |
131 GCallback cb, void *user_data) | |
132 { | |
133 GtkWidget *dialog; | |
134 GtkWidget *hbox; | |
135 GtkWidget *label; | |
136 GtkWidget *img = NULL; | |
137 char label_text[2048]; | |
138 const char *icon_name = NULL; | |
10774 | 139 char *primary_esc, *secondary_esc; |
5437 | 140 |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
141 switch (type) |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
142 { |
5437 | 143 case GAIM_NOTIFY_MSG_ERROR: |
144 icon_name = GAIM_STOCK_DIALOG_ERROR; | |
145 break; | |
146 | |
147 case GAIM_NOTIFY_MSG_WARNING: | |
148 icon_name = GAIM_STOCK_DIALOG_WARNING; | |
149 break; | |
150 | |
151 case GAIM_NOTIFY_MSG_INFO: | |
152 icon_name = GAIM_STOCK_DIALOG_INFO; | |
153 break; | |
154 | |
155 default: | |
156 icon_name = NULL; | |
157 break; | |
158 } | |
159 | |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
160 if (icon_name != NULL) |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
161 { |
5437 | 162 img = gtk_image_new_from_stock(icon_name, GTK_ICON_SIZE_DIALOG); |
163 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
164 } | |
165 | |
7678 | 166 dialog = gtk_dialog_new_with_buttons(title ? title : GAIM_ALERT_TITLE, |
10260 | 167 NULL, 0, GTK_STOCK_CLOSE, |
168 GTK_RESPONSE_CLOSE, NULL); | |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
169 |
8523
013d256e8ded
[gaim-migrate @ 9262]
Christian Hammond <chipx86@chipx86.com>
parents:
8356
diff
changeset
|
170 gtk_window_set_role(GTK_WINDOW(dialog), "notify_dialog"); |
013d256e8ded
[gaim-migrate @ 9262]
Christian Hammond <chipx86@chipx86.com>
parents:
8356
diff
changeset
|
171 |
5437 | 172 g_signal_connect(G_OBJECT(dialog), "response", |
6104 | 173 G_CALLBACK(message_response_cb), dialog); |
5437 | 174 |
11243 | 175 gtk_container_set_border_width(GTK_CONTAINER(dialog), GAIM_HIG_BORDER); |
5437 | 176 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
177 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); | |
11243 | 178 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), GAIM_HIG_BORDER); |
179 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), GAIM_HIG_BOX_SPACE); | |
5437 | 180 |
11243 | 181 hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); |
5437 | 182 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); |
183 | |
184 if (img != NULL) | |
185 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | |
186 | |
10774 | 187 primary_esc = g_markup_escape_text(primary, -1); |
188 secondary_esc = (secondary != NULL) ? g_markup_escape_text(secondary, -1) : NULL; | |
5437 | 189 g_snprintf(label_text, sizeof(label_text), |
190 "<span weight=\"bold\" size=\"larger\">%s</span>\n\n%s", | |
10774 | 191 primary_esc, (secondary ? secondary_esc : "")); |
192 g_free(primary_esc); | |
193 g_free(secondary_esc); | |
5437 | 194 |
195 label = gtk_label_new(NULL); | |
196 | |
197 gtk_label_set_markup(GTK_LABEL(label), label_text); | |
198 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
199 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
200 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | |
201 | |
202 gtk_widget_show_all(dialog); | |
203 | |
204 return dialog; | |
205 } | |
206 | |
207 static void * | |
208 gaim_gtk_notify_email(const char *subject, const char *from, | |
209 const char *to, const char *url, | |
210 GCallback cb, void *user_data) | |
211 { | |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
212 return gaim_gtk_notify_emails(1, TRUE, |
5524
101384b068c1
[gaim-migrate @ 5924]
Christian Hammond <chipx86@chipx86.com>
parents:
5519
diff
changeset
|
213 (subject == NULL ? NULL : &subject), |
101384b068c1
[gaim-migrate @ 5924]
Christian Hammond <chipx86@chipx86.com>
parents:
5519
diff
changeset
|
214 (from == NULL ? NULL : &from), |
101384b068c1
[gaim-migrate @ 5924]
Christian Hammond <chipx86@chipx86.com>
parents:
5519
diff
changeset
|
215 (to == NULL ? NULL : &to), |
101384b068c1
[gaim-migrate @ 5924]
Christian Hammond <chipx86@chipx86.com>
parents:
5519
diff
changeset
|
216 (url == NULL ? NULL : &url), |
101384b068c1
[gaim-migrate @ 5924]
Christian Hammond <chipx86@chipx86.com>
parents:
5519
diff
changeset
|
217 cb, user_data); |
5437 | 218 } |
219 | |
220 static void * | |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
221 gaim_gtk_notify_emails(size_t count, gboolean detailed, |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
222 const char **subjects, const char **froms, |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
223 const char **tos, const char **urls, |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
224 GCallback cb, void *user_data) |
5437 | 225 { |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
226 GaimNotifyMailData *data; |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
227 GtkWidget *dialog; |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
228 GtkWidget *vbox; |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
229 GtkWidget *hbox; |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
230 GtkWidget *label; |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
231 GtkWidget *img; |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
232 char *detail_text; |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
233 char *label_text; |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
234 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
235 data = g_new0(GaimNotifyMailData, 1); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
236 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
237 data->url = g_strdup(urls[0]); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
238 |
10260 | 239 /* Create the dialog */ |
240 dialog = gtk_dialog_new_with_buttons("New Mail", NULL, 0, | |
241 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, | |
242 NULL); | |
243 data->dialog = dialog; | |
5524
101384b068c1
[gaim-migrate @ 5924]
Christian Hammond <chipx86@chipx86.com>
parents:
5519
diff
changeset
|
244 |
101384b068c1
[gaim-migrate @ 5924]
Christian Hammond <chipx86@chipx86.com>
parents:
5519
diff
changeset
|
245 if (urls != NULL) |
10260 | 246 gtk_dialog_add_button(GTK_DIALOG(dialog), |
247 GAIM_STOCK_OPEN_MAIL, GTK_RESPONSE_YES); | |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
248 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
249 g_signal_connect(G_OBJECT(dialog), "response", |
5794
5e93fc46d1af
[gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
250 G_CALLBACK(email_response_cb), data); |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
251 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
252 /* Setup the dialog */ |
11243 | 253 gtk_container_set_border_width(GTK_CONTAINER(dialog), GAIM_HIG_BOX_SPACE); |
254 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), GAIM_HIG_BOX_SPACE); | |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
255 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
256 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); |
11243 | 257 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), GAIM_HIG_BORDER); |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
258 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
259 /* Setup the main horizontal box */ |
11243 | 260 hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
261 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
262 |
10260 | 263 /* Dialog icon */ |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
264 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_INFO, |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
265 GTK_ICON_SIZE_DIALOG); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
266 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
267 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
268 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
269 /* Vertical box */ |
11243 | 270 vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
271 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
272 gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
273 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
274 /* Descriptive label */ |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
275 detail_text = g_strdup_printf(ngettext("%s has %d new message.", |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
276 "%s has %d new messages.", |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
277 (int)count), |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
278 *tos, (int)count); |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
279 |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
280 if (count == 1) |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
281 { |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
282 char *from_text = NULL, *subject_text = NULL; |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
283 |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
284 if (froms != NULL) |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
285 { |
8920 | 286 char *from_enc; |
287 from_enc = g_markup_escape_text(*froms, -1); | |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
288 from_text = g_strdup_printf( |
8920 | 289 _("<span weight=\"bold\">From:</span> %s\n"), from_enc); |
290 g_free(from_enc); | |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
291 } |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
292 |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
293 if (subjects != NULL) |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
294 { |
8920 | 295 char *subject_enc; |
296 subject_enc = g_markup_escape_text(*subjects, -1); | |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
297 subject_text = g_strdup_printf( |
8920 | 298 _("<span weight=\"bold\">Subject:</span> %s\n"), subject_enc); |
299 g_free(subject_enc); | |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
300 } |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
301 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
302 label_text = g_strdup_printf( |
5543 | 303 _("<span weight=\"bold\" size=\"larger\">You have mail!</span>" |
304 "\n\n%s%s%s%s"), | |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
305 detail_text, |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
306 (from_text == NULL && subject_text == NULL ? "" : "\n\n"), |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
307 (from_text == NULL ? "" : from_text), |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
308 (subject_text == NULL ? "" : subject_text)); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
309 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
310 if (from_text != NULL) |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
311 g_free(from_text); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
312 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
313 if (subject_text != NULL) |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
314 g_free(subject_text); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
315 } |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
316 else |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
317 { |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
318 label_text = g_strdup_printf( |
5543 | 319 _("<span weight=\"bold\" size=\"larger\">You have mail!</span>" |
320 "\n\n%s"), detail_text); | |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
321 } |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
322 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
323 g_free(detail_text); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
324 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
325 label = gtk_label_new(NULL); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
326 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
327 gtk_label_set_markup(GTK_LABEL(label), label_text); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
328 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
329 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
330 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
331 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
332 g_free(label_text); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
333 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
334 /* Show everything. */ |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
335 gtk_widget_show_all(dialog); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
336 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
337 return data; |
5437 | 338 } |
339 | |
8337
65ae6930b45a
[gaim-migrate @ 9061]
Christian Hammond <chipx86@chipx86.com>
parents:
8284
diff
changeset
|
340 static gboolean |
10875
a118e50116df
[gaim-migrate @ 12566]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10774
diff
changeset
|
341 formatted_input_cb(GtkWidget *win, GdkEventKey *event, gpointer data) |
7455 | 342 { |
8337
65ae6930b45a
[gaim-migrate @ 9061]
Christian Hammond <chipx86@chipx86.com>
parents:
8284
diff
changeset
|
343 if (event->keyval == GDK_Escape) |
65ae6930b45a
[gaim-migrate @ 9061]
Christian Hammond <chipx86@chipx86.com>
parents:
8284
diff
changeset
|
344 { |
10875
a118e50116df
[gaim-migrate @ 12566]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10774
diff
changeset
|
345 gaim_notify_close(GAIM_NOTIFY_FORMATTED, win); |
8337
65ae6930b45a
[gaim-migrate @ 9061]
Christian Hammond <chipx86@chipx86.com>
parents:
8284
diff
changeset
|
346 |
7455 | 347 return TRUE; |
348 } | |
8337
65ae6930b45a
[gaim-migrate @ 9061]
Christian Hammond <chipx86@chipx86.com>
parents:
8284
diff
changeset
|
349 |
7455 | 350 return FALSE; |
351 } | |
352 | |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
353 static void * |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
354 gaim_gtk_notify_formatted(const char *title, const char *primary, |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
355 const char *secondary, const char *text, |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
356 GCallback cb, void *user_data) |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
357 { |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
358 GtkWidget *window; |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
359 GtkWidget *vbox; |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
360 GtkWidget *label; |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
361 GtkWidget *button; |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
362 GtkWidget *imhtml; |
10181 | 363 GtkWidget *frame; |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
364 int options = 0; |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
365 char label_text[2048]; |
10774 | 366 char *linked_text, *primary_esc, *secondary_esc; |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
367 |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
368 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
8345 | 369 gtk_window_set_title(GTK_WINDOW(window), title); |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
370 gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG); |
11243 | 371 gtk_container_set_border_width(GTK_CONTAINER(window), GAIM_HIG_BORDER); |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
372 |
7007
da1430478acf
[gaim-migrate @ 7564]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
373 g_signal_connect(G_OBJECT(window), "delete_event", |
da1430478acf
[gaim-migrate @ 7564]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
374 G_CALLBACK(formatted_close_cb), NULL); |
da1430478acf
[gaim-migrate @ 7564]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
375 |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
376 /* Setup the main vbox */ |
11243 | 377 vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
378 gtk_container_add(GTK_CONTAINER(window), vbox); |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
379 gtk_widget_show(vbox); |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
380 |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
381 /* Setup the descriptive label */ |
10774 | 382 primary_esc = g_markup_escape_text(primary, -1); |
383 secondary_esc = (secondary != NULL) ? g_markup_escape_text(secondary, -1) : NULL; | |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
384 g_snprintf(label_text, sizeof(label_text), |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
385 "<span weight=\"bold\" size=\"larger\">%s</span>%s%s", |
10774 | 386 primary_esc, |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
387 (secondary ? "\n" : ""), |
10774 | 388 (secondary ? secondary_esc : "")); |
389 g_free(primary_esc); | |
390 g_free(secondary_esc); | |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
391 |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
392 label = gtk_label_new(NULL); |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
393 |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
394 gtk_label_set_markup(GTK_LABEL(label), label_text); |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
395 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
396 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
397 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
398 gtk_widget_show(label); |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
399 |
10181 | 400 /* Add the imhtml */ |
401 frame = gaim_gtk_create_imhtml(FALSE, &imhtml, NULL); | |
9005 | 402 gtk_widget_set_name(imhtml, "gaim_gtknotify_imhtml"); |
10181 | 403 gtk_widget_set_size_request(imhtml, 300, 250); |
404 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); | |
405 gtk_widget_show(frame); | |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
406 |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
407 /* Add the Close button. */ |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
408 button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
409 gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
410 gtk_widget_show(button); |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
411 |
6872 | 412 g_signal_connect_swapped(G_OBJECT(button), "clicked", |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
413 G_CALLBACK(formatted_close_cb), window); |
7455 | 414 g_signal_connect(G_OBJECT(window), "key_press_event", |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
415 G_CALLBACK(formatted_input_cb), NULL); |
7455 | 416 |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
417 /* Add the text to the gtkimhtml */ |
11293 | 418 if (!gaim_prefs_get_bool("/gaim/gtk/conversations/show_incoming_formatting")) |
10497 | 419 options |= GTK_IMHTML_NO_COLOURS | GTK_IMHTML_NO_FONTS | GTK_IMHTML_NO_SIZES; |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
420 |
10503 | 421 options |= GTK_IMHTML_NO_COMMENTS; |
422 options |= GTK_IMHTML_NO_TITLE; | |
423 options |= GTK_IMHTML_NO_NEWLINE; | |
424 options |= GTK_IMHTML_NO_SCROLL; | |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
425 |
8882 | 426 /* Make sure URLs are clickable */ |
427 linked_text = gaim_markup_linkify(text); | |
10181 | 428 gtk_imhtml_append_text(GTK_IMHTML(imhtml), linked_text, options); |
8882 | 429 g_free(linked_text); |
7078 | 430 |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
431 /* Show the window */ |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
432 gtk_widget_show(window); |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
433 |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
434 return window; |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
435 } |
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
436 |
11359 | 437 static void |
438 gaim_gtk_notify_searchresults_new_rows(GaimConnection *gc, GaimNotifySearchResults *results, | |
439 void *data_, void *user_data) | |
440 { | |
441 GaimNotifySearchResultsData *data = data_; | |
442 GtkListStore *model = data->model; | |
443 GtkTreeIter iter; | |
444 GdkPixbuf *icon, *scaled; | |
445 int col_num; | |
446 int i, j; | |
447 | |
448 gtk_list_store_clear(data->model); | |
449 | |
450 icon = gaim_gtk_create_prpl_icon(gaim_connection_get_account(gc)); | |
451 scaled = gdk_pixbuf_scale_simple(icon, 16, 16, GDK_INTERP_BILINEAR); | |
452 | |
453 /* +1 is for the automagically created Status column. */ | |
454 col_num = gaim_notify_searchresults_get_columns_count(results) + 1; | |
455 | |
456 for (i = 0; i < gaim_notify_searchresults_get_rows_count(results); i++) { | |
457 GList *row = gaim_notify_searchresults_row_get(results, i); | |
458 | |
459 gtk_list_store_append(model, &iter); | |
460 gtk_list_store_set(model, &iter, 0, scaled, -1); | |
461 | |
462 for (j = 1; j < col_num; j++) { | |
463 GValue v = {0, }; | |
464 char *escaped = g_markup_escape_text(g_list_nth_data(row, j - 1), -1); | |
465 | |
466 g_value_init(&v, G_TYPE_STRING); | |
467 g_value_set_string(&v, escaped); | |
468 gtk_list_store_set_value(model, &iter, j, &v); | |
469 g_free(escaped); | |
470 } | |
471 } | |
472 } | |
473 | |
9797 | 474 static void * |
10439 | 475 gaim_gtk_notify_searchresults(GaimConnection *gc, const char *title, |
476 const char *primary, const char *secondary, | |
11359 | 477 GaimNotifySearchResults *results, GCallback cb, |
10439 | 478 void *user_data) |
479 { | |
480 GtkWidget *window; | |
11359 | 481 GtkWidget *treeview; |
482 GtkWidget *button, *close_button; | |
483 GType *col_types; | |
484 GtkListStore *model; | |
485 GtkCellRenderer *renderer; | |
486 int col_num; | |
487 int i; | |
488 GList *buttons = NULL; | |
489 | |
10439 | 490 GtkWidget *vbox; |
491 GtkWidget *button_area; | |
492 GtkWidget *label; | |
493 GtkWidget *sw; | |
494 GaimNotifySearchResultsData *data; | |
495 char *label_text; | |
10774 | 496 char *primary_esc, *secondary_esc; |
10439 | 497 |
498 data = g_malloc(sizeof(GaimNotifySearchResultsData)); | |
499 | |
500 /* Create the window */ | |
501 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
502 gtk_window_set_title(GTK_WINDOW(window), (title ? title :_("Search Results"))); | |
503 gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG); | |
11243 | 504 gtk_container_set_border_width(GTK_CONTAINER(window), GAIM_HIG_BORDER); |
10439 | 505 |
506 g_signal_connect_swapped(G_OBJECT(window), "delete_event", | |
507 G_CALLBACK(searchresults_close_cb), data); | |
508 | |
509 /* Setup the main vbox */ | |
11243 | 510 vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); |
10439 | 511 gtk_container_add(GTK_CONTAINER(window), vbox); |
512 gtk_widget_show(vbox); | |
513 | |
514 /* Setup the descriptive label */ | |
10774 | 515 primary_esc = (primary != NULL) ? g_markup_escape_text(primary, -1) : NULL; |
516 secondary_esc = (secondary != NULL) ? g_markup_escape_text(secondary, -1) : NULL; | |
10439 | 517 label_text = g_strdup_printf( |
518 "<span weight=\"bold\" size=\"larger\">%s</span>%s%s", | |
10774 | 519 (primary ? primary_esc : ""), |
10439 | 520 (primary && secondary ? "\n" : ""), |
10774 | 521 (secondary ? secondary_esc : "")); |
522 g_free(primary_esc); | |
523 g_free(secondary_esc); | |
10439 | 524 label = gtk_label_new(NULL); |
525 gtk_label_set_markup(GTK_LABEL(label), label_text); | |
526 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
527 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
528 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); | |
529 gtk_widget_show(label); | |
530 g_free(label_text); | |
531 | |
11359 | 532 /* +1 is for the automagically created Status column. */ |
533 col_num = gaim_notify_searchresults_get_columns_count(results) + 1; | |
534 | |
10439 | 535 /* Setup the list model */ |
11359 | 536 col_types = g_new0(GType, col_num); |
537 | |
538 /* There always is this first column. */ | |
539 col_types[0] = GDK_TYPE_PIXBUF; | |
540 for (i = 1; i < col_num; i++) { | |
541 col_types[i] = G_TYPE_STRING; | |
542 } | |
543 model = gtk_list_store_newv(col_num, col_types); | |
10439 | 544 |
545 /* Setup the scrolled window containing the treeview */ | |
546 sw = gtk_scrolled_window_new(NULL, NULL); | |
547 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), | |
548 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); | |
549 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), | |
550 GTK_SHADOW_IN); | |
551 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); | |
552 gtk_widget_show(sw); | |
553 | |
554 /* Setup the treeview */ | |
555 treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model)); | |
556 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE); | |
11359 | 557 gtk_widget_set_size_request(treeview, 500, 400); |
10439 | 558 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)), |
559 GTK_SELECTION_SINGLE); | |
11359 | 560 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), TRUE); |
10439 | 561 gtk_container_add(GTK_CONTAINER(sw), treeview); |
562 gtk_widget_show(treeview); | |
563 | |
11359 | 564 renderer = gtk_cell_renderer_pixbuf_new(); |
10439 | 565 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview), |
11359 | 566 -1, "", renderer, "pixbuf", 0, NULL); |
10439 | 567 |
11359 | 568 for (i = 1; i < col_num; i++) { |
569 renderer = gtk_cell_renderer_text_new(); | |
10439 | 570 |
11359 | 571 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview), -1, |
572 gaim_notify_searchresults_column_get_title(results, i-1), | |
573 renderer, "text", i, NULL); | |
574 } | |
575 | |
10439 | 576 /* Setup the button area */ |
577 button_area = gtk_hbutton_box_new(); | |
578 gtk_box_pack_start(GTK_BOX(vbox), button_area, FALSE, FALSE, 0); | |
579 gtk_button_box_set_layout(GTK_BUTTON_BOX(button_area), GTK_BUTTONBOX_END); | |
11243 | 580 gtk_box_set_spacing(GTK_BOX(button_area), GAIM_HIG_BORDER); |
10439 | 581 gtk_widget_show(button_area); |
582 | |
11359 | 583 for (i = 0; i < g_list_length(results->buttons); i++) { |
584 GaimNotifySearchButton *b = g_list_nth_data(results->buttons, i); | |
585 button = NULL; | |
586 switch (b->type) { | |
587 case GAIM_NOTIFY_BUTTON_CONTINUE: | |
588 button = gtk_button_new_from_stock(GTK_STOCK_GO_FORWARD); | |
589 break; | |
590 case GAIM_NOTIFY_BUTTON_ADD_BUDDY: | |
591 button = gtk_button_new_from_stock(GTK_STOCK_ADD); | |
592 break; | |
593 default: | |
594 gaim_debug_warning("gtknotify", "Incorrect button type: %d\n", b->type); | |
595 } | |
596 if (button != NULL) { | |
597 gtk_box_pack_start(GTK_BOX(button_area), button, FALSE, FALSE, 0); | |
598 gtk_widget_show(button); | |
599 buttons = g_list_append(buttons, button); | |
600 } | |
601 } | |
10439 | 602 |
603 /* Add the Close button */ | |
604 close_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); | |
605 gtk_box_pack_start(GTK_BOX(button_area), close_button, FALSE, FALSE, 0); | |
606 gtk_widget_show(close_button); | |
607 | |
608 data->account = gc->account; | |
609 data->model = model; | |
610 data->treeview = treeview; | |
611 data->window = window; | |
612 | |
11359 | 613 /* Insert rows. */ |
614 gaim_gtk_notify_searchresults_new_rows(gc, results, data, NULL); | |
615 | |
10439 | 616 /* Connect Signals */ |
11359 | 617 for (i = 0; i < g_list_length(results->buttons); i++) { |
618 GaimNotifySearchResultsButtonData *bd = g_new0(GaimNotifySearchResultsButtonData, 1); | |
619 bd->button = g_list_nth_data(results->buttons, i); | |
620 bd->data = data; | |
621 g_signal_connect(G_OBJECT(g_list_nth_data(buttons, i)), "clicked", | |
622 G_CALLBACK(searchresults_callback_wrapper_cb), bd); | |
623 } | |
624 | |
10439 | 625 g_signal_connect_swapped(G_OBJECT(close_button), "clicked", |
626 G_CALLBACK(searchresults_close_cb), data); | |
627 | |
628 /* Show the window */ | |
629 gtk_widget_show(window); | |
630 return data; | |
631 } | |
632 | |
633 static void * | |
9797 | 634 gaim_gtk_notify_userinfo(GaimConnection *gc, const char *who, |
11533
c9b815aeddc1
[gaim-migrate @ 13782]
Richard Laager <rlaager@wiktel.com>
parents:
11359
diff
changeset
|
635 const char *text, |
9797 | 636 GCallback cb, void *user_data) |
637 { | |
11533
c9b815aeddc1
[gaim-migrate @ 13782]
Richard Laager <rlaager@wiktel.com>
parents:
11359
diff
changeset
|
638 char *primary; |
c9b815aeddc1
[gaim-migrate @ 13782]
Richard Laager <rlaager@wiktel.com>
parents:
11359
diff
changeset
|
639 void *ui_handle; |
c9b815aeddc1
[gaim-migrate @ 13782]
Richard Laager <rlaager@wiktel.com>
parents:
11359
diff
changeset
|
640 |
c9b815aeddc1
[gaim-migrate @ 13782]
Richard Laager <rlaager@wiktel.com>
parents:
11359
diff
changeset
|
641 primary = g_strdup_printf(_("Info for %s"), who); |
c9b815aeddc1
[gaim-migrate @ 13782]
Richard Laager <rlaager@wiktel.com>
parents:
11359
diff
changeset
|
642 ui_handle = gaim_gtk_notify_formatted(_("Buddy Information"), primary, NULL, |
9800 | 643 text, cb, user_data); |
11533
c9b815aeddc1
[gaim-migrate @ 13782]
Richard Laager <rlaager@wiktel.com>
parents:
11359
diff
changeset
|
644 g_free(primary); |
c9b815aeddc1
[gaim-migrate @ 13782]
Richard Laager <rlaager@wiktel.com>
parents:
11359
diff
changeset
|
645 return ui_handle; |
9797 | 646 } |
647 | |
5437 | 648 static void |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
649 gaim_gtk_close_notify(GaimNotifyType type, void *ui_handle) |
5437 | 650 { |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
651 if (type == GAIM_NOTIFY_EMAIL || type == GAIM_NOTIFY_EMAILS) |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
652 { |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
653 GaimNotifyMailData *data = (GaimNotifyMailData *)ui_handle; |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
654 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
655 gtk_widget_destroy(data->dialog); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
656 |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
657 g_free(data->url); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
658 g_free(data); |
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
659 } |
10439 | 660 else if (type == GAIM_NOTIFY_SEARCHRESULTS) |
661 { | |
662 GaimNotifySearchResultsData *data = (GaimNotifySearchResultsData *)ui_handle; | |
663 | |
664 gtk_widget_destroy(data->window); | |
665 | |
666 g_free(data); | |
667 } | |
10750
d5a00882d118
[gaim-migrate @ 12353]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10732
diff
changeset
|
668 else if (ui_handle != NULL) |
5519
42a20beb80a7
[gaim-migrate @ 5919]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
669 gtk_widget_destroy(GTK_WIDGET(ui_handle)); |
5437 | 670 } |
671 | |
8272 | 672 #ifndef _WIN32 |
673 static gint | |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
674 uri_command(const char *command, gboolean sync) |
8272 | 675 { |
9777 | 676 gchar *escaped, *tmp; |
8272 | 677 GError *error = NULL; |
678 gint ret = 0; | |
679 | |
10732
c4cb90065e1d
[gaim-migrate @ 12334]
Luke Schierer <lschiere@pidgin.im>
parents:
10503
diff
changeset
|
680 escaped = g_markup_escape_text(command, -1); |
9777 | 681 gaim_debug_misc("gtknotify", "Executing %s\n", escaped); |
8278 | 682 |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
683 if (!gaim_program_is_valid(command)) |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
684 { |
9777 | 685 tmp = g_strdup_printf(_("The browser command <b>%s</b> is invalid."), |
686 escaped ? escaped : "(none)"); | |
8272 | 687 gaim_notify_error(NULL, NULL, _("Unable to open URL"), tmp); |
688 g_free(tmp); | |
689 | |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
690 } |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
691 else if (sync) |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
692 { |
8272 | 693 gint status; |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
694 |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
695 if (!g_spawn_command_line_sync(command, NULL, NULL, &status, &error)) |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
696 { |
9777 | 697 tmp = g_strdup_printf(_("Error launching <b>%s</b>: %s"), |
698 escaped, error->message); | |
8272 | 699 gaim_notify_error(NULL, NULL, _("Unable to open URL"), tmp); |
700 g_free(tmp); | |
701 g_error_free(error); | |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
702 } |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
703 else |
8272 | 704 ret = status; |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
705 } |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
706 else |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
707 { |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
708 if (!g_spawn_command_line_async(command, &error)) |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
709 { |
9777 | 710 tmp = g_strdup_printf(_("Error launching <b>%s</b>: %s"), |
711 escaped, error->message); | |
8272 | 712 gaim_notify_error(NULL, NULL, _("Unable to open URL"), tmp); |
713 g_free(tmp); | |
714 g_error_free(error); | |
715 } | |
716 } | |
717 | |
9777 | 718 g_free(escaped); |
719 | |
8272 | 720 return ret; |
721 } | |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
722 #endif /* _WIN32 */ |
8272 | 723 |
7136 | 724 static void * |
10240
95ca0db2d01d
[gaim-migrate @ 11377]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
10209
diff
changeset
|
725 gaim_gtk_notify_uri(const char *uri) |
7136 | 726 { |
727 #ifndef _WIN32 | |
728 char *command = NULL; | |
8272 | 729 char *remote_command = NULL; |
7136 | 730 const char *web_browser; |
8272 | 731 int place; |
7136 | 732 |
733 web_browser = gaim_prefs_get_string("/gaim/gtk/browsers/browser"); | |
8272 | 734 place = gaim_prefs_get_int("/gaim/gtk/browsers/place"); |
7136 | 735 |
10060 | 736 /* if they are running gnome, use the gnome web browser */ |
10061 | 737 if (gaim_running_gnome() == TRUE) |
10060 | 738 { |
739 command = g_strdup_printf("gnome-open \"%s\"", uri); | |
10061 | 740 } |
10060 | 741 else if (!strcmp(web_browser, "epiphany") || |
9405 | 742 !strcmp(web_browser, "galeon")) |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
743 { |
8272 | 744 if (place == GAIM_BROWSER_NEW_WINDOW) |
9405 | 745 command = g_strdup_printf("%s -w \"%s\"", web_browser, uri); |
8272 | 746 else if (place == GAIM_BROWSER_NEW_TAB) |
9405 | 747 command = g_strdup_printf("%s -n \"%s\"", web_browser, uri); |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
748 else |
9405 | 749 command = g_strdup_printf("%s \"%s\"", web_browser, uri); |
750 } | |
751 else if (!strcmp(web_browser, "gnome-open")) | |
752 { | |
753 command = g_strdup_printf("gnome-open \"%s\"", uri); | |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
754 } |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
755 else if (!strcmp(web_browser, "kfmclient")) |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
756 { |
7136 | 757 command = g_strdup_printf("kfmclient openURL \"%s\"", uri); |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
758 /* |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
759 * Does Konqueror have options to open in new tab |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
760 * and/or current window? |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
761 */ |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
762 } |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
763 else if (!strcmp(web_browser, "mozilla") || |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
764 !strcmp(web_browser, "mozilla-firebird") || |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
765 !strcmp(web_browser, "firefox")) |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
766 { |
9399 | 767 char *args = ""; |
768 | |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
769 command = g_strdup_printf("%s \"%s\"", web_browser, uri); |
8272 | 770 |
9399 | 771 /* |
772 * Firefox 0.9 and higher require a "-a firefox" option when | |
773 * using -remote commands. This breaks older versions of | |
774 * mozilla. So we include this other handly little string | |
775 * when calling firefox. If the API for remote calls changes | |
776 * any more in firefox then firefox should probably be split | |
777 * apart from mozilla-firebird and mozilla... but this is good | |
778 * for now. | |
779 */ | |
780 if (!strcmp(web_browser, "firefox")) | |
781 args = "-a firefox"; | |
782 | |
8272 | 783 if (place == GAIM_BROWSER_NEW_WINDOW) |
9399 | 784 remote_command = g_strdup_printf("%s %s -remote " |
9777 | 785 "\"openURL(%s,new-window)\"", |
9399 | 786 web_browser, args, uri); |
8272 | 787 else if (place == GAIM_BROWSER_NEW_TAB) |
9399 | 788 remote_command = g_strdup_printf("%s %s -remote " |
9777 | 789 "\"openURL(%s,new-tab)\"", |
9399 | 790 web_browser, args, uri); |
8272 | 791 else if (place == GAIM_BROWSER_CURRENT) |
9399 | 792 remote_command = g_strdup_printf("%s %s -remote " |
9777 | 793 "\"openURL(%s)\"", |
9399 | 794 web_browser, args, uri); |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
795 } |
9405 | 796 else if (!strcmp(web_browser, "netscape")) |
797 { | |
798 command = g_strdup_printf("netscape \"%s\"", uri); | |
799 | |
800 if (place == GAIM_BROWSER_NEW_WINDOW) | |
801 { | |
802 remote_command = g_strdup_printf("netscape -remote " | |
9777 | 803 "\"openURL(%s,new-window)\"", |
9405 | 804 uri); |
805 } | |
806 else if (place == GAIM_BROWSER_CURRENT) | |
807 { | |
808 remote_command = g_strdup_printf("netscape -remote " | |
9777 | 809 "\"openURL(%s)\"", uri); |
9405 | 810 } |
811 } | |
812 else if (!strcmp(web_browser, "opera")) | |
813 { | |
814 if (place == GAIM_BROWSER_NEW_WINDOW) | |
815 command = g_strdup_printf("opera -newwindow \"%s\"", uri); | |
816 else if (place == GAIM_BROWSER_NEW_TAB) | |
817 command = g_strdup_printf("opera -newpage \"%s\"", uri); | |
818 else if (place == GAIM_BROWSER_CURRENT) | |
819 { | |
820 remote_command = g_strdup_printf("opera -remote " | |
9777 | 821 "\"openURL(%s)\"", uri); |
9405 | 822 command = g_strdup_printf("opera \"%s\"", uri); |
823 } | |
824 else | |
825 command = g_strdup_printf("opera \"%s\"", uri); | |
826 | |
827 } | |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
828 else if (!strcmp(web_browser, "custom")) |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
829 { |
7136 | 830 const char *web_command; |
831 | |
832 web_command = gaim_prefs_get_string("/gaim/gtk/browsers/command"); | |
833 | |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
834 if (web_command == NULL || *web_command == '\0') |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
835 { |
7136 | 836 gaim_notify_error(NULL, NULL, _("Unable to open URL"), |
837 _("The 'Manual' browser command has been " | |
838 "chosen, but no command has been set.")); | |
839 return NULL; | |
840 } | |
841 | |
842 if (strstr(web_command, "%s")) | |
843 command = gaim_strreplace(web_command, "%s", uri); | |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
844 else |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
845 { |
7136 | 846 /* |
847 * There is no "%s" in the browser command. Assume the user | |
848 * wanted the URL tacked on to the end of the command. | |
849 */ | |
850 command = g_strdup_printf("%s %s", web_command, uri); | |
851 } | |
852 } | |
853 | |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
854 if (remote_command != NULL) |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
855 { |
8272 | 856 /* try the remote command first */ |
857 if (uri_command(remote_command, TRUE) != 0) | |
858 uri_command(command, FALSE); | |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
859 |
8272 | 860 g_free(remote_command); |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
861 |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
862 } |
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
863 else |
8272 | 864 uri_command(command, FALSE); |
7136 | 865 |
866 g_free(command); | |
867 | |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
868 #else /* !_WIN32 */ |
10240
95ca0db2d01d
[gaim-migrate @ 11377]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
10209
diff
changeset
|
869 wgaim_notify_uri(uri); |
8338
354bba6ad254
[gaim-migrate @ 9062]
Christian Hammond <chipx86@chipx86.com>
parents:
8337
diff
changeset
|
870 #endif /* !_WIN32 */ |
7136 | 871 |
872 return NULL; | |
873 } | |
874 | |
5437 | 875 static GaimNotifyUiOps ops = |
876 { | |
877 gaim_gtk_notify_message, | |
878 gaim_gtk_notify_email, | |
879 gaim_gtk_notify_emails, | |
6381
e006685f75aa
[gaim-migrate @ 6886]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
880 gaim_gtk_notify_formatted, |
10439 | 881 gaim_gtk_notify_searchresults, |
11359 | 882 gaim_gtk_notify_searchresults_new_rows, |
9797 | 883 gaim_gtk_notify_userinfo, |
6465
fb64cc87bc96
[gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents:
6381
diff
changeset
|
884 gaim_gtk_notify_uri, |
5437 | 885 gaim_gtk_close_notify |
886 }; | |
887 | |
888 GaimNotifyUiOps * | |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7007
diff
changeset
|
889 gaim_gtk_notify_get_ui_ops(void) |
5437 | 890 { |
891 return &ops; | |
892 } |