Mercurial > pidgin
annotate src/away.c @ 9837:dafebadcf8d2
[gaim-migrate @ 10714]
this should at least mostly work...
adda xmlnode_to_formatted_str() function that makes the XML readable,
rather than spitting it out all on 1 line, which the parser may be OK with,
but most of us humans have a harder time with
this is the result of grim kicking my ass into gear, and much discussion
with him, so he gets a sizeable chunk of the credit for this, if it works.
committer: Tailor Script <tailor@pidgin.im>
| author | Nathan Walp <nwalp@pidgin.im> |
|---|---|
| date | Mon, 23 Aug 2004 05:06:38 +0000 |
| parents | 430ef8fc963d |
| children | e4a27c9aec4c |
| rev | line source |
|---|---|
| 1 | 1 /* |
| 2 * gaim | |
| 3 * | |
| 8046 | 4 * Gaim is the legal property of its developers, whose names are too numerous |
| 5 * to list here. Please refer to the COPYRIGHT file distributed with this | |
| 6 * source distribution. | |
| 1 | 7 * |
| 8 * This program is free software; you can redistribute it and/or modify | |
| 9 * it under the terms of the GNU General Public License as published by | |
| 10 * the Free Software Foundation; either version 2 of the License, or | |
| 11 * (at your option) any later version. | |
| 12 * | |
| 13 * This program is distributed in the hope that it will be useful, | |
| 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 * GNU General Public License for more details. | |
| 17 * | |
| 18 * You should have received a copy of the GNU General Public License | |
| 19 * along with this program; if not, write to the Free Software | |
| 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
21 * |
| 1 | 22 */ |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
23 #include "internal.h" |
| 9791 | 24 #include "gtkgaim.h" |
| 1 | 25 |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
26 #include "conversation.h" |
|
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
27 #include "debug.h" |
| 9730 | 28 #include "notify.h" |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
29 #include "plugin.h" |
|
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5314
diff
changeset
|
30 #include "prefs.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
31 #include "prpl.h" |
| 6727 | 32 #include "status.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
33 #include "util.h" |
| 8807 | 34 #include "request.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
35 |
|
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6284
diff
changeset
|
36 /* XXX CORE/UI: Until we can get rid of the message queue stuff... */ |
| 9730 | 37 #include "away.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
38 #include "gaim.h" |
|
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
39 #include "gtkblist.h" |
| 9709 | 40 #include "gtkdialogs.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
41 #include "gtkimhtml.h" |
| 9730 | 42 #include "gtkimhtmltoolbar.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
43 #include "gtkprefs.h" |
|
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
44 #include "gtkutils.h" |
| 1 | 45 |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
46 GtkWidget *imaway = NULL; |
|
652
4d3285caa191
[gaim-migrate @ 662]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
621
diff
changeset
|
47 GtkWidget *awaymenu = NULL; |
| 4412 | 48 GtkWidget *awayqueue = NULL; |
| 49 GtkListStore *awayqueuestore = NULL; | |
| 50 GtkWidget *awayqueuesw; | |
| 1773 | 51 |
| 6479 | 52 GSList *message_queue = NULL; |
| 53 GSList *unread_message_queue = NULL; | |
| 54 | |
| 55 GSList *away_messages = NULL; | |
| 1 | 56 struct away_message *awaymessage = NULL; |
| 57 | |
| 4412 | 58 static void dequeue_message(GtkTreeIter *iter) |
| 59 { | |
| 60 gchar *name; | |
| 61 GSList *templist; | |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5593
diff
changeset
|
62 GaimConversation *cnv; |
| 9550 | 63 gboolean orig_while_away; |
| 64 | |
| 65 orig_while_away = gaim_prefs_get_bool("/core/sound/while_away"); | |
| 66 if (orig_while_away) | |
| 67 gaim_prefs_set_bool("/core/sound/while_away", FALSE); | |
| 4412 | 68 |
| 69 gtk_tree_model_get(GTK_TREE_MODEL(awayqueuestore), iter, 0, &name, -1); | |
| 4491 | 70 |
|
8735
92cbf9713795
[gaim-migrate @ 9490]
Christian Hammond <chipx86@chipx86.com>
parents:
8413
diff
changeset
|
71 gaim_debug(GAIM_DEBUG_INFO, "away", "Dequeueing messages from %s.\n", |
|
5213
1cf4eb75e3ee
[gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
72 name); |
| 4491 | 73 |
| 4412 | 74 templist = message_queue; |
| 4491 | 75 |
| 4412 | 76 while (templist) { |
| 77 struct queued_message *qm = templist->data; | |
| 78 if (templist->data) { | |
| 4793 | 79 if (!gaim_utf8_strcasecmp(qm->name, name)) { |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
80 GaimAccount *account = NULL; |
|
4476
62c1e5e656d0
[gaim-migrate @ 4751]
Christian Hammond <chipx86@chipx86.com>
parents:
4412
diff
changeset
|
81 |
|
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5573
diff
changeset
|
82 if (g_list_index(gaim_accounts_get_all(), qm->account) >= 0) |
| 4608 | 83 account = qm->account; |
|
4476
62c1e5e656d0
[gaim-migrate @ 4751]
Christian Hammond <chipx86@chipx86.com>
parents:
4412
diff
changeset
|
84 |
|
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
85 cnv = gaim_find_conversation_with_account(name, account); |
| 4412 | 86 |
| 87 if (!cnv) | |
| 4491 | 88 cnv = gaim_conversation_new(GAIM_CONV_IM, account, qm->name); |
|
4476
62c1e5e656d0
[gaim-migrate @ 4751]
Christian Hammond <chipx86@chipx86.com>
parents:
4412
diff
changeset
|
89 else |
| 4491 | 90 gaim_conversation_set_account(cnv, account); |
| 4412 | 91 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
92 gaim_conv_im_write(GAIM_CONV_IM(cnv), NULL, qm->message, |
| 4412 | 93 qm->flags, qm->tm); |
| 94 g_free(qm->message); | |
| 95 g_free(qm); | |
| 96 templist = message_queue = g_slist_remove(message_queue, qm); | |
| 4491 | 97 |
| 4412 | 98 } else { |
| 99 templist = templist->next; | |
| 100 } | |
| 101 } | |
| 102 } | |
|
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
103 |
| 4412 | 104 g_free(name); |
| 105 /* In GTK 2.2, _store_remove actually returns whether iter is valid or not | |
| 106 * after the remove, but in GTK 2.0 it is a void function. */ | |
| 107 gtk_list_store_remove(awayqueuestore, iter); | |
| 9550 | 108 |
| 109 if (orig_while_away) | |
| 110 gaim_prefs_set_bool("/core/sound/while_away", orig_while_away); | |
| 4412 | 111 } |
| 112 | |
| 4274 | 113 void purge_away_queue(GSList **queue) |
| 1773 | 114 { |
| 4274 | 115 GSList *q = *queue; |
| 116 struct queued_message *qm; | |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5593
diff
changeset
|
117 GaimConversation *cnv; |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
118 GaimAccount *account; |
| 9550 | 119 gboolean orig_while_away; |
| 120 | |
| 121 orig_while_away = gaim_prefs_get_bool("/core/sound/while_away"); | |
| 122 if (orig_while_away) | |
| 123 gaim_prefs_set_bool("/core/sound/while_away", FALSE); | |
| 1773 | 124 |
| 4274 | 125 while (q) { |
| 126 qm = q->data; | |
| 4167 | 127 |
| 4491 | 128 account = NULL; |
|
4476
62c1e5e656d0
[gaim-migrate @ 4751]
Christian Hammond <chipx86@chipx86.com>
parents:
4412
diff
changeset
|
129 |
|
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5573
diff
changeset
|
130 if (g_list_index(gaim_accounts_get_all(), qm->account) >= 0) |
| 4608 | 131 account = qm->account; |
|
4476
62c1e5e656d0
[gaim-migrate @ 4751]
Christian Hammond <chipx86@chipx86.com>
parents:
4412
diff
changeset
|
132 |
|
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
133 cnv = gaim_find_conversation_with_account(qm->name, account); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4274
diff
changeset
|
134 |
| 4167 | 135 if (!cnv) |
| 4491 | 136 cnv = gaim_conversation_new(GAIM_CONV_IM, account, qm->name); |
|
4476
62c1e5e656d0
[gaim-migrate @ 4751]
Christian Hammond <chipx86@chipx86.com>
parents:
4412
diff
changeset
|
137 else |
| 4491 | 138 gaim_conversation_set_account(cnv, account); |
| 4274 | 139 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
140 gaim_conv_im_write(GAIM_CONV_IM(cnv), NULL, qm->message, qm->flags, qm->tm); |
| 4167 | 141 |
| 142 g_free(qm->message); | |
| 143 g_free(qm); | |
| 4274 | 144 |
| 145 q->data = NULL; | |
| 146 q = q->next; | |
| 4167 | 147 } |
| 148 | |
| 4274 | 149 g_slist_free(*queue); |
| 150 *queue = NULL; | |
| 9550 | 151 |
| 152 if (orig_while_away) | |
| 153 gaim_prefs_set_bool("/core/sound/while_away", orig_while_away); | |
| 4167 | 154 } |
| 155 | |
| 4412 | 156 gint dequeue_cb(GtkWidget *treeview, GdkEventButton *event, gpointer data) { |
| 157 GtkTreeIter iter; | |
| 158 GtkTreeSelection *select; | |
| 4491 | 159 |
| 4167 | 160 if(!(event->type == GDK_2BUTTON_PRESS && event->button == 1)) |
|
8735
92cbf9713795
[gaim-migrate @ 9490]
Christian Hammond <chipx86@chipx86.com>
parents:
8413
diff
changeset
|
161 return FALSE; /* Double clicking on the list will dequeue that user's messages. */ |
| 4491 | 162 |
| 4412 | 163 select = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)); |
| 164 if(gtk_tree_selection_get_selected(select, NULL, &iter)) | |
| 165 dequeue_message(&iter); | |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4274
diff
changeset
|
166 |
| 4412 | 167 return FALSE; |
| 4167 | 168 } |
| 4491 | 169 |
| 2573 | 170 |
| 171 | |
| 1773 | 172 void toggle_away_queue() |
| 173 { | |
| 4412 | 174 if (!awayqueue || !awayqueuesw) |
| 1773 | 175 return; |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
176 |
|
5573
5e7de337a053
[gaim-migrate @ 5976]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
177 if (gaim_prefs_get_bool("/gaim/gtk/away/queue_messages")) { |
| 4412 | 178 gtk_widget_show(awayqueue); |
| 179 gtk_widget_show(awayqueuesw); | |
|
1775
9ca22174da76
[gaim-migrate @ 1785]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1774
diff
changeset
|
180 } else { |
| 4412 | 181 gtk_widget_hide(awayqueue); |
| 182 gtk_widget_hide(awayqueuesw); | |
| 4274 | 183 purge_away_queue(&message_queue); |
| 1773 | 184 } |
| 185 } | |
| 186 | |
| 1 | 187 void do_im_back(GtkWidget *w, GtkWidget *x) |
| 188 { | |
| 189 if (imaway) { | |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
190 GtkWidget *tmp = imaway; |
| 1768 | 191 |
| 4274 | 192 purge_away_queue(&message_queue); |
| 193 | |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
194 imaway = NULL; |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
195 gtk_widget_destroy(tmp); |
|
1614
3d3362903e1d
[gaim-migrate @ 1624]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1607
diff
changeset
|
196 if (w != tmp) |
|
3d3362903e1d
[gaim-migrate @ 1624]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1607
diff
changeset
|
197 return; |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
198 } |
| 1 | 199 |
| 200 awaymessage = NULL; | |
| 4412 | 201 awayqueue = NULL; |
| 202 awayqueuesw = NULL; | |
| 9674 | 203 if (awayqueuestore != NULL) |
| 204 g_object_unref(G_OBJECT(awayqueuestore)); | |
| 4412 | 205 awayqueuestore = NULL; |
| 3514 | 206 serv_set_away_all(NULL); |
| 1 | 207 } |
| 208 | |
| 1044 | 209 |
| 1 | 210 void do_away_message(GtkWidget *w, struct away_message *a) |
| 211 { | |
| 212 GtkWidget *back; | |
| 9827 | 213 GtkWidget *edit; |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
214 GtkWidget *awaytext; |
|
1888
dedcd9e6f3e8
[gaim-migrate @ 1898]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
215 GtkWidget *sw; |
| 1 | 216 GtkWidget *vbox; |
| 9827 | 217 GtkWidget *hbox; |
| 4412 | 218 GtkTreeViewColumn *column; |
| 219 GtkCellRenderer *renderer; | |
|
1888
dedcd9e6f3e8
[gaim-migrate @ 1898]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
220 char *buf; |
| 1 | 221 |
|
1254
9da444224f0e
[gaim-migrate @ 1264]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
222 if (!a) |
|
9da444224f0e
[gaim-migrate @ 1264]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
223 return; |
|
9da444224f0e
[gaim-migrate @ 1264]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
224 |
| 6284 | 225 if(imaway) |
| 226 gtk_widget_destroy(imaway); | |
| 227 | |
| 228 GAIM_DIALOG(imaway); | |
| 229 gtk_window_set_role(GTK_WINDOW(imaway), "imaway"); | |
| 230 if (strlen(a->name)) | |
| 231 gtk_window_set_title(GTK_WINDOW(imaway), a->name); | |
| 232 else | |
| 7859 | 233 gtk_window_set_title(GTK_WINDOW(imaway), _("Away!")); |
| 6284 | 234 g_signal_connect(G_OBJECT(imaway), "destroy", |
| 235 G_CALLBACK(do_im_back), imaway); | |
|
1888
dedcd9e6f3e8
[gaim-migrate @ 1898]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
236 |
| 6284 | 237 vbox = gtk_vbox_new(FALSE, 5); |
| 238 gtk_container_add(GTK_CONTAINER(imaway), vbox); | |
| 239 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); | |
| 240 gtk_widget_show(vbox); | |
| 1044 | 241 |
| 9827 | 242 hbox = gtk_hbox_new(FALSE, 5); |
| 243 gtk_container_set_border_width(GTK_CONTAINER(hbox), 0); | |
| 244 gtk_widget_show(hbox); | |
| 245 | |
| 6284 | 246 sw = gtk_scrolled_window_new(NULL, NULL); |
| 247 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, | |
| 8973 | 248 GTK_POLICY_AUTOMATIC); |
| 6284 | 249 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); |
| 250 gtk_widget_set_size_request(sw, 245, 120); | |
| 251 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); | |
| 252 gtk_widget_show(sw); | |
|
1888
dedcd9e6f3e8
[gaim-migrate @ 1898]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
253 |
| 6284 | 254 awaytext = gtk_imhtml_new(NULL, NULL); |
| 255 gtk_container_add(GTK_CONTAINER(sw), awaytext); | |
| 256 gaim_setup_imhtml(awaytext); | |
| 257 gtk_widget_show(awaytext); | |
| 258 buf = stylize(a->message, BUF_LONG); | |
| 6982 | 259 gtk_imhtml_append_text(GTK_IMHTML(awaytext), buf, GTK_IMHTML_NO_TITLE | |
| 6284 | 260 GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_SCROLL); |
| 261 g_free(buf); | |
| 6982 | 262 gtk_imhtml_append_text(GTK_IMHTML(awaytext), "<BR>", |
| 6284 | 263 GTK_IMHTML_NO_TITLE | GTK_IMHTML_NO_COMMENTS | |
| 264 GTK_IMHTML_NO_SCROLL); | |
| 1773 | 265 |
| 6284 | 266 awayqueuesw = gtk_scrolled_window_new(NULL, NULL); |
| 267 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(awayqueuesw), | |
| 268 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); | |
| 269 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(awayqueuesw), | |
| 270 GTK_SHADOW_IN); | |
| 271 gtk_box_pack_start(GTK_BOX(vbox), awayqueuesw, TRUE, TRUE, 0); | |
| 272 | |
|
8413
f5b0e1a4b0c7
[gaim-migrate @ 9143]
Christian Hammond <chipx86@chipx86.com>
parents:
8235
diff
changeset
|
273 awayqueuestore = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); |
| 6284 | 274 awayqueue = gtk_tree_view_new_with_model(GTK_TREE_MODEL(awayqueuestore)); |
| 275 renderer = gtk_cell_renderer_text_new(); | |
| 276 | |
| 277 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(awayqueue), FALSE); | |
| 278 column = gtk_tree_view_column_new_with_attributes (NULL, renderer, | |
| 279 "text", 0, | |
| 280 NULL); | |
| 281 gtk_tree_view_append_column(GTK_TREE_VIEW(awayqueue), column); | |
| 282 column = gtk_tree_view_column_new_with_attributes(NULL, renderer, | |
| 283 "text", 1, | |
| 284 NULL); | |
| 285 gtk_tree_view_append_column(GTK_TREE_VIEW(awayqueue), column); | |
|
8413
f5b0e1a4b0c7
[gaim-migrate @ 9143]
Christian Hammond <chipx86@chipx86.com>
parents:
8235
diff
changeset
|
286 column = gtk_tree_view_column_new_with_attributes(NULL, renderer, |
|
f5b0e1a4b0c7
[gaim-migrate @ 9143]
Christian Hammond <chipx86@chipx86.com>
parents:
8235
diff
changeset
|
287 "text", 2, |
|
f5b0e1a4b0c7
[gaim-migrate @ 9143]
Christian Hammond <chipx86@chipx86.com>
parents:
8235
diff
changeset
|
288 NULL); |
|
f5b0e1a4b0c7
[gaim-migrate @ 9143]
Christian Hammond <chipx86@chipx86.com>
parents:
8235
diff
changeset
|
289 gtk_tree_view_append_column(GTK_TREE_VIEW(awayqueue), column); |
| 6284 | 290 |
| 291 gtk_container_add(GTK_CONTAINER(awayqueuesw), awayqueue); | |
| 292 | |
| 293 g_signal_connect(G_OBJECT(awayqueue), "button_press_event", G_CALLBACK(dequeue_cb), NULL); | |
| 2573 | 294 |
| 1773 | 295 |
| 6284 | 296 if (gaim_prefs_get_bool("/gaim/gtk/away/queue_messages")) { |
| 297 gtk_widget_show(awayqueuesw); | |
| 298 gtk_widget_show(awayqueue); | |
| 299 } | |
| 1773 | 300 |
| 9827 | 301 awaymessage = a; |
| 302 | |
| 303 edit = gaim_pixbuf_button_from_stock(_("Edit This Message"), GTK_STOCK_CONVERT, GAIM_BUTTON_HORIZONTAL); | |
| 304 gtk_box_pack_start(GTK_BOX(hbox), edit, TRUE, TRUE, 0); | |
| 305 g_signal_connect(G_OBJECT(edit), "clicked", G_CALLBACK(create_away_mess), awaymessage); | |
| 306 gtk_widget_show(edit); | |
| 307 | |
| 6284 | 308 back = gaim_pixbuf_button_from_stock(_("I'm Back!"), GTK_STOCK_JUMP_TO, GAIM_BUTTON_HORIZONTAL); |
| 9827 | 309 gtk_box_pack_start(GTK_BOX(hbox), back, TRUE, TRUE, 0); |
| 6284 | 310 g_signal_connect(G_OBJECT(back), "clicked", G_CALLBACK(do_im_back), imaway); |
| 311 gtk_window_set_focus(GTK_WINDOW(imaway), back); | |
| 312 gtk_widget_show(back); | |
|
1888
dedcd9e6f3e8
[gaim-migrate @ 1898]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
313 |
| 9827 | 314 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
| 1 | 315 |
|
1779
0da2a831c0ae
[gaim-migrate @ 1789]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1775
diff
changeset
|
316 gtk_widget_show(imaway); |
| 6019 | 317 serv_set_away_all(awaymessage->message); |
| 1 | 318 } |
| 319 | |
| 8807 | 320 void do_rem_away_mess(gchar *name) |
| 1 | 321 { |
| 8820 | 322 struct away_message *a = NULL; |
| 6216 | 323 struct away_message *default_away = NULL; |
| 324 const char *default_away_name; | |
| 325 GSList *l; | |
| 326 | |
| 8807 | 327 /* Lookup the away message based on the title */ |
| 328 for (l = away_messages; l != NULL; l = l->next) { | |
| 329 a = l->data; | |
| 330 if (!strcmp(a->name, name)) | |
| 331 break; | |
| 332 } | |
| 333 g_free(name); | |
| 334 | |
| 8820 | 335 if (l == NULL || a == NULL) { |
| 8807 | 336 /* Could not find away message! */ |
| 337 return; | |
| 338 } | |
| 339 | |
| 6216 | 340 default_away_name = gaim_prefs_get_string("/core/away/default_message"); |
| 341 | |
| 342 for(l = away_messages; l; l = l->next) { | |
| 343 if(!strcmp(default_away_name, ((struct away_message *)l->data)->name)) { | |
| 344 default_away = l->data; | |
| 345 break; | |
| 346 } | |
|
1254
9da444224f0e
[gaim-migrate @ 1264]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
347 } |
| 6216 | 348 |
| 349 if(!default_away && away_messages) | |
| 350 default_away = away_messages->data; | |
| 351 | |
|
1306
868f9c98db13
[gaim-migrate @ 1316]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1292
diff
changeset
|
352 away_messages = g_slist_remove(away_messages, a); |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
353 g_free(a); |
|
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
354 do_away_menu(); |
| 6727 | 355 gaim_status_sync(); |
| 1 | 356 } |
| 357 | |
| 8807 | 358 void rem_away_mess(GtkWidget *w, struct away_message *a) |
| 359 { | |
| 360 gchar *text; | |
| 361 | |
| 362 text = g_strdup_printf(_("Are you sure you want to remove the away message \"%s\"?"), a->name); | |
| 363 | |
| 364 gaim_request_action(NULL, NULL, _("Remove Away Message"), text, -1, g_strdup(a->name), 2, | |
| 365 _("Remove"), G_CALLBACK(do_rem_away_mess), | |
| 366 _("Cancel"), G_CALLBACK(g_free)); | |
| 367 | |
| 368 g_free(text); | |
| 369 } | |
| 370 | |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
371 static void set_gc_away(GObject *obj, GaimConnection *gc) |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
372 { |
| 4635 | 373 struct away_message *awy = g_object_get_data(obj, "away_message"); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
374 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
375 if (awy) |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
376 serv_set_away(gc, GAIM_AWAY_CUSTOM, awy->message); |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
377 else |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
378 serv_set_away(gc, GAIM_AWAY_CUSTOM, NULL); |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
379 } |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
380 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
381 static void set_gc_state(GObject *obj, GaimConnection *gc) |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
382 { |
| 4635 | 383 char *awy = g_object_get_data(obj, "away_state"); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
384 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
385 serv_set_away(gc, awy, NULL); |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
386 } |
| 1 | 387 |
|
5560
b7319c094153
[gaim-migrate @ 5961]
Christian Hammond <chipx86@chipx86.com>
parents:
5545
diff
changeset
|
388 /* XXX This needs to be fixed, NOW! */ |
|
b7319c094153
[gaim-migrate @ 5961]
Christian Hammond <chipx86@chipx86.com>
parents:
5545
diff
changeset
|
389 extern GtkListStore *prefs_away_store; |
|
b7319c094153
[gaim-migrate @ 5961]
Christian Hammond <chipx86@chipx86.com>
parents:
5545
diff
changeset
|
390 extern GtkWidget *prefs_away_menu; |
|
b7319c094153
[gaim-migrate @ 5961]
Christian Hammond <chipx86@chipx86.com>
parents:
5545
diff
changeset
|
391 |
| 1 | 392 void do_away_menu() |
| 393 { | |
| 394 GtkWidget *menuitem; | |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
395 GtkWidget *remmenu; |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
396 GtkWidget *submenu, *submenu2; |
| 1 | 397 GtkWidget *remitem; |
| 5160 | 398 GtkWidget *image; |
| 399 GdkPixbuf *pixbuf, *scale; | |
| 1 | 400 GList *l; |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
401 GSList *awy = away_messages; |
|
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
402 struct away_message *a; |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
403 GList *con; |
|
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
404 GaimConnection *gc = NULL; |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
405 GaimPluginProtocolInfo *prpl_info = NULL; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
406 |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
407 int count = 0; |
| 1 | 408 |
| 4635 | 409 if (prefs_away_store != NULL) { |
| 410 gtk_list_store_clear(prefs_away_store); | |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
411 while (awy) { |
| 4635 | 412 GtkTreeIter iter; |
| 1 | 413 a = (struct away_message *)awy->data; |
| 4635 | 414 gtk_list_store_append(prefs_away_store, &iter); |
| 415 gtk_list_store_set(prefs_away_store, &iter, | |
| 416 0, a->name, | |
| 417 1, a, | |
| 418 -1); | |
| 940 | 419 awy = g_slist_next(awy); |
| 1 | 420 } |
| 421 } | |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
422 |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
423 if (awaymenu) { |
| 4635 | 424 l = gtk_container_get_children(GTK_CONTAINER(awaymenu)); |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
425 |
|
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
426 while (l) { |
|
1530
0b6e4d52de63
[gaim-migrate @ 1540]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1499
diff
changeset
|
427 gtk_container_remove(GTK_CONTAINER(awaymenu), GTK_WIDGET(l->data)); |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
428 l = l->next; |
|
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
429 } |
| 1 | 430 |
| 8235 | 431 g_list_free(l); |
| 1 | 432 |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
433 remmenu = gtk_menu_new(); |
| 1 | 434 |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
435 menuitem = gtk_menu_item_new_with_label(_("New Away Message")); |
| 4635 | 436 gtk_menu_shell_append(GTK_MENU_SHELL(awaymenu), menuitem); |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
437 gtk_widget_show(menuitem); |
|
5314
1f901484599d
[gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents:
5228
diff
changeset
|
438 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(create_away_mess), |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
439 NULL); |
|
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
440 |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
441 awy = away_messages; |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
442 while (awy) { |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
443 a = (struct away_message *)awy->data; |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
444 |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
445 remitem = gtk_menu_item_new_with_label(a->name); |
| 4635 | 446 gtk_menu_shell_append(GTK_MENU_SHELL(remmenu), remitem); |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
447 gtk_widget_show(remitem); |
|
5314
1f901484599d
[gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents:
5228
diff
changeset
|
448 g_signal_connect(G_OBJECT(remitem), "activate", |
|
4162
d3c8d2b40494
[gaim-migrate @ 4391]
Christian Hammond <chipx86@chipx86.com>
parents:
4124
diff
changeset
|
449 G_CALLBACK(rem_away_mess), a); |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
450 |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
451 awy = g_slist_next(awy); |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
452 |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
453 } |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
454 |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
455 menuitem = gtk_menu_item_new_with_label(_("Remove Away Message")); |
| 4635 | 456 gtk_menu_shell_append(GTK_MENU_SHELL(awaymenu), menuitem); |
| 1 | 457 gtk_widget_show(menuitem); |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
458 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), remmenu); |
|
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
459 gtk_widget_show(remmenu); |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
460 |
| 5160 | 461 gaim_separator(awaymenu); |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
462 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
463 for (con = gaim_connections_get_all(); con != NULL; con = con->next) { |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
464 gc = con->data; |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
465 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
466 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
467 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
468 if (prpl_info->away_states != NULL && prpl_info->set_away != NULL) |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
469 count++; |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
470 } |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
471 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
472 if (count == 0) { |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
473 } else if (count == 1) { |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
474 GList *msgs, *tmp; |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
475 |
|
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
476 for (con = gaim_connections_get_all(); con != NULL; con = con->next) { |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
477 gc = con->data; |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
478 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
479 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
480 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
481 if (prpl_info->away_states && prpl_info->set_away) |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
482 break; |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
483 } |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
484 |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
485 tmp = msgs = prpl_info->away_states(gc); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
486 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
487 if ((g_list_length(msgs) == 1) && !strcmp(msgs->data, GAIM_AWAY_CUSTOM)) { |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
488 awy = away_messages; |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
489 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
490 while (awy) { |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
491 a = (struct away_message *)awy->data; |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
492 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
493 menuitem = gtk_menu_item_new_with_label(a->name); |
| 4635 | 494 g_object_set_data(G_OBJECT(menuitem), "away_message", a); |
| 495 gtk_menu_shell_append(GTK_MENU_SHELL(awaymenu), menuitem); | |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
496 gtk_widget_show(menuitem); |
|
5314
1f901484599d
[gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents:
5228
diff
changeset
|
497 g_signal_connect(G_OBJECT(menuitem), "activate", |
|
4162
d3c8d2b40494
[gaim-migrate @ 4391]
Christian Hammond <chipx86@chipx86.com>
parents:
4124
diff
changeset
|
498 G_CALLBACK(do_away_message), a); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
499 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
500 awy = g_slist_next(awy); |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
501 } |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
502 } else |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
503 while (msgs) { |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
504 awy = away_messages; |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
505 |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
506 menuitem = gtk_menu_item_new_with_label(msgs->data); |
| 4635 | 507 g_object_set_data(G_OBJECT(menuitem), "away_state", msgs->data); |
| 508 gtk_menu_shell_append(GTK_MENU_SHELL(awaymenu), menuitem); | |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
509 gtk_widget_show(menuitem); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
510 |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
511 if (strcmp(msgs->data, GAIM_AWAY_CUSTOM)) { |
|
5314
1f901484599d
[gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents:
5228
diff
changeset
|
512 g_signal_connect(G_OBJECT(menuitem), "activate", |
|
4162
d3c8d2b40494
[gaim-migrate @ 4391]
Christian Hammond <chipx86@chipx86.com>
parents:
4124
diff
changeset
|
513 G_CALLBACK(set_gc_state), gc); |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
514 } else { |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
515 submenu = gtk_menu_new(); |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
516 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
517 submenu); |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
518 gtk_widget_show(submenu); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
519 |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
520 while (awy) { |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
521 a = (struct away_message *)awy->data; |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
522 |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
523 menuitem = gtk_menu_item_new_with_label(a->name); |
| 4635 | 524 g_object_set_data(G_OBJECT(menuitem), "away_message", |
| 525 a); | |
| 526 gtk_menu_shell_append(GTK_MENU_SHELL(submenu), | |
| 527 menuitem); | |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
528 gtk_widget_show(menuitem); |
|
5314
1f901484599d
[gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents:
5228
diff
changeset
|
529 g_signal_connect(G_OBJECT(menuitem), |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
530 "activate", |
|
4162
d3c8d2b40494
[gaim-migrate @ 4391]
Christian Hammond <chipx86@chipx86.com>
parents:
4124
diff
changeset
|
531 G_CALLBACK |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
532 (do_away_message), a); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
533 |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
534 awy = g_slist_next(awy); |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
535 } |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
536 } |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
537 msgs = g_list_next(msgs); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
538 } |
|
1499
de0b946e86a4
[gaim-migrate @ 1509]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
539 |
|
de0b946e86a4
[gaim-migrate @ 1509]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
540 g_list_free(tmp); |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
541 } |
|
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
542 else { |
|
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
543 for (con = gaim_connections_get_all(); con != NULL; con = con->next) { |
|
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
544 GaimAccount *account; |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
545 char buf[256]; |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
546 GList *msgs, *tmp; |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
547 gc = con->data; |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
548 |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
549 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
550 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
551 if (!prpl_info->away_states || !prpl_info->set_away) |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
552 continue; |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
553 |
|
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
554 account = gaim_connection_get_account(gc); |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
555 |
| 5161 | 556 g_snprintf(buf, sizeof(buf), "%s (%s)", |
| 9699 | 557 gaim_account_get_username(account), |
| 558 gaim_account_get_protocol_name(account)); | |
| 5161 | 559 menuitem = gtk_image_menu_item_new_with_label(buf); |
| 560 | |
| 5160 | 561 pixbuf = create_prpl_icon(gc->account); |
| 562 if (pixbuf) { | |
| 563 scale = gdk_pixbuf_scale_simple(pixbuf, 16, 16, GDK_INTERP_BILINEAR); | |
| 564 image = gtk_image_new_from_pixbuf(scale); | |
| 565 g_object_unref(G_OBJECT(pixbuf)); | |
| 566 g_object_unref(G_OBJECT(scale)); | |
| 5161 | 567 gtk_widget_show(image); |
| 568 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), | |
| 569 image); | |
| 5160 | 570 } |
| 571 | |
| 4635 | 572 gtk_menu_shell_append(GTK_MENU_SHELL(awaymenu), menuitem); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
573 gtk_widget_show(menuitem); |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
574 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
575 submenu = gtk_menu_new(); |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
576 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
577 gtk_widget_show(submenu); |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
578 |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
579 tmp = msgs = prpl_info->away_states(gc); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
580 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
581 if ((g_list_length(msgs) == 1) && |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
582 (!strcmp(msgs->data, GAIM_AWAY_CUSTOM))) { |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
583 menuitem = gtk_menu_item_new_with_label(_("Back")); |
| 4635 | 584 gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
585 gtk_widget_show(menuitem); |
|
5314
1f901484599d
[gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents:
5228
diff
changeset
|
586 g_signal_connect(G_OBJECT(menuitem), "activate", |
|
4162
d3c8d2b40494
[gaim-migrate @ 4391]
Christian Hammond <chipx86@chipx86.com>
parents:
4124
diff
changeset
|
587 G_CALLBACK(set_gc_away), gc); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
588 |
| 5160 | 589 gaim_separator(submenu); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
590 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
591 awy = away_messages; |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
592 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
593 while (awy) { |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
594 a = (struct away_message *)awy->data; |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
595 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
596 menuitem = gtk_menu_item_new_with_label(a->name); |
| 4635 | 597 g_object_set_data(G_OBJECT(menuitem), "away_message", a); |
| 598 gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); | |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
599 gtk_widget_show(menuitem); |
|
5314
1f901484599d
[gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents:
5228
diff
changeset
|
600 g_signal_connect(G_OBJECT(menuitem), "activate", |
|
4162
d3c8d2b40494
[gaim-migrate @ 4391]
Christian Hammond <chipx86@chipx86.com>
parents:
4124
diff
changeset
|
601 G_CALLBACK(set_gc_away), gc); |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
602 |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
603 awy = g_slist_next(awy); |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
604 } |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
605 } else |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
606 while (msgs) { |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
607 awy = away_messages; |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
608 |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
609 menuitem = gtk_menu_item_new_with_label(msgs->data); |
| 4635 | 610 g_object_set_data(G_OBJECT(menuitem), "away_state", |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
611 msgs->data); |
| 4635 | 612 gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
613 gtk_widget_show(menuitem); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
614 |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
615 if (strcmp(msgs->data, GAIM_AWAY_CUSTOM)) { |
|
5314
1f901484599d
[gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents:
5228
diff
changeset
|
616 g_signal_connect(G_OBJECT(menuitem), |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
617 "activate", |
|
4162
d3c8d2b40494
[gaim-migrate @ 4391]
Christian Hammond <chipx86@chipx86.com>
parents:
4124
diff
changeset
|
618 G_CALLBACK(set_gc_state), |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
619 gc); |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
620 } else { |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
621 submenu2 = gtk_menu_new(); |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
622 gtk_menu_item_set_submenu(GTK_MENU_ITEM |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
623 (menuitem), submenu2); |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
624 gtk_widget_show(submenu2); |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
625 |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
626 while (awy) { |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
627 a = (struct away_message *)awy->data; |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
628 |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
629 menuitem = |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
630 gtk_menu_item_new_with_label(a-> |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
631 name); |
| 4635 | 632 g_object_set_data(G_OBJECT(menuitem), |
| 633 "away_message", a); | |
| 634 gtk_menu_shell_append(GTK_MENU_SHELL(submenu2), | |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
635 menuitem); |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
636 gtk_widget_show(menuitem); |
|
5314
1f901484599d
[gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents:
5228
diff
changeset
|
637 g_signal_connect(G_OBJECT(menuitem), |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
638 "activate", |
|
4162
d3c8d2b40494
[gaim-migrate @ 4391]
Christian Hammond <chipx86@chipx86.com>
parents:
4124
diff
changeset
|
639 G_CALLBACK |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
640 (set_gc_away), gc); |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
641 |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
642 awy = g_slist_next(awy); |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
643 } |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
644 } |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2313
diff
changeset
|
645 msgs = g_list_next(msgs); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
646 } |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
647 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
648 g_list_free(tmp); |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
649 } |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
650 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
651 menuitem = gtk_menu_item_new_with_label(_("Set All Away")); |
| 4635 | 652 gtk_menu_shell_append(GTK_MENU_SHELL(awaymenu), menuitem); |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
653 gtk_widget_show(menuitem); |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
654 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
655 submenu = gtk_menu_new(); |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
656 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
657 gtk_widget_show(submenu); |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
658 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
659 awy = away_messages; |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
660 |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
661 while (awy) { |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
662 a = (struct away_message *)awy->data; |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
663 |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
664 menuitem = gtk_menu_item_new_with_label(a->name); |
| 4635 | 665 g_object_set_data(G_OBJECT(menuitem), "away_message", a); |
| 666 gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); | |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
667 gtk_widget_show(menuitem); |
|
5314
1f901484599d
[gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents:
5228
diff
changeset
|
668 g_signal_connect(G_OBJECT(menuitem), "activate", |
|
4162
d3c8d2b40494
[gaim-migrate @ 4391]
Christian Hammond <chipx86@chipx86.com>
parents:
4124
diff
changeset
|
669 G_CALLBACK(do_away_message), a); |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
670 |
|
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
671 awy = g_slist_next(awy); |
|
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1306
diff
changeset
|
672 } |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
673 } |
|
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
674 } |
|
5560
b7319c094153
[gaim-migrate @ 5961]
Christian Hammond <chipx86@chipx86.com>
parents:
5545
diff
changeset
|
675 |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
676 if (prefs_away_menu) { |
| 4635 | 677 l = gtk_container_get_children(GTK_CONTAINER(prefs_away_menu)); |
|
1250
b5783215b245
[gaim-migrate @ 1260]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1191
diff
changeset
|
678 while (l) { |
|
1109
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
679 gtk_widget_destroy(GTK_WIDGET(l->data)); |
|
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
680 l = l->next; |
|
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
681 } |
|
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
682 gtk_widget_hide(GTK_WIDGET(prefs_away_menu)); |
|
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
683 default_away_menu_init(GTK_WIDGET(prefs_away_menu)); |
|
c73736fa0b7c
[gaim-migrate @ 1119]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1044
diff
changeset
|
684 gtk_widget_show(prefs_away_menu); |
| 1 | 685 } |
| 686 } | |
| 9730 | 687 |
| 688 /*------------------------------------------------------------------------*/ | |
| 689 /* The dialog for new away messages (from dialogs.c) */ | |
| 690 /*------------------------------------------------------------------------*/ | |
| 691 struct create_away { | |
| 692 GtkWidget *window; | |
| 693 GtkWidget *toolbar; | |
| 694 GtkWidget *entry; | |
| 695 GtkWidget *text; | |
| 696 struct away_message *mess; | |
| 697 }; | |
| 698 | |
| 699 static void | |
| 700 away_mess_destroy(GtkWidget *widget, struct create_away *ca) | |
| 701 { | |
| 702 gtk_widget_destroy(ca->window); | |
| 703 g_free(ca); | |
| 704 } | |
| 705 | |
| 706 static void | |
| 707 away_mess_destroy_ca(GtkWidget *widget, GdkEvent *event, struct create_away *ca) | |
| 708 { | |
| 709 away_mess_destroy(NULL, ca); | |
| 710 } | |
| 711 | |
| 712 static gint | |
| 713 sort_awaymsg_list(gconstpointer a, gconstpointer b) | |
| 714 { | |
| 715 struct away_message *msg_a; | |
| 716 struct away_message *msg_b; | |
| 717 | |
| 718 msg_a = (struct away_message *)a; | |
| 719 msg_b = (struct away_message *)b; | |
| 720 | |
| 721 return (strcmp(msg_a->name, msg_b->name)); | |
| 722 } | |
| 723 | |
| 724 static struct | |
| 725 away_message *save_away_message(struct create_away *ca) | |
| 726 { | |
| 727 struct away_message *am; | |
| 728 gchar *away_message; | |
| 729 | |
| 730 if (!ca->mess) | |
| 731 am = g_new0(struct away_message, 1); | |
| 732 else { | |
| 733 am = ca->mess; | |
| 734 } | |
| 735 | |
| 736 g_snprintf(am->name, sizeof(am->name), "%s", gtk_entry_get_text(GTK_ENTRY(ca->entry))); | |
| 737 away_message = gtk_imhtml_get_markup(GTK_IMHTML(ca->text)); | |
| 738 | |
| 739 g_snprintf(am->message, sizeof(am->message), "%s", away_message); | |
| 740 g_free(away_message); | |
| 741 | |
| 742 if (!ca->mess) | |
| 743 away_messages = g_slist_insert_sorted(away_messages, am, sort_awaymsg_list); | |
| 744 | |
| 745 do_away_menu(NULL); | |
| 746 gaim_status_sync(); | |
| 747 | |
| 748 return am; | |
| 749 } | |
| 750 | |
| 751 int | |
| 752 check_away_mess(struct create_away *ca, int type) | |
| 753 { | |
| 754 gchar *msg; | |
| 755 if ((strlen(gtk_entry_get_text(GTK_ENTRY(ca->entry))) == 0) && (type == 1)) { | |
| 756 /* We shouldn't allow a blank title */ | |
| 757 gaim_notify_error(NULL, NULL, | |
| 758 _("You cannot save an away message with a " | |
| 759 "blank title"), | |
| 760 _("Please give the message a title, or choose " | |
| 761 "\"Use\" to use without saving.")); | |
| 762 return 0; | |
| 763 } | |
| 764 | |
| 765 msg = gtk_imhtml_get_text(GTK_IMHTML(ca->text), NULL, NULL); | |
| 766 | |
| 767 if ((type <= 1) && ((msg == NULL) || (*msg == '\0'))) { | |
| 768 /* We shouldn't allow a blank message */ | |
| 769 gaim_notify_error(NULL, NULL, | |
| 770 _("You cannot create an empty away message"), NULL); | |
| 771 return 0; | |
| 772 } | |
| 773 | |
| 774 g_free(msg); | |
| 775 | |
| 776 return 1; | |
| 777 } | |
| 778 | |
| 779 void | |
| 780 save_away_mess(GtkWidget *widget, struct create_away *ca) | |
| 781 { | |
| 782 if (!check_away_mess(ca, 1)) | |
| 783 return; | |
| 784 | |
| 785 save_away_message(ca); | |
| 786 | |
| 787 away_mess_destroy(NULL, ca); | |
| 788 } | |
| 789 | |
| 790 void | |
| 791 use_away_mess(GtkWidget *widget, struct create_away *ca) | |
| 792 { | |
| 793 static struct away_message am; | |
| 794 gchar *away_message; | |
| 795 | |
| 796 if (!check_away_mess(ca, 0)) | |
| 797 return; | |
| 798 | |
| 799 g_snprintf(am.name, sizeof(am.name), "%s", gtk_entry_get_text(GTK_ENTRY(ca->entry))); | |
| 800 away_message = gtk_imhtml_get_markup(GTK_IMHTML(ca->text)); | |
| 801 | |
| 802 g_snprintf(am.message, sizeof(am.message), "%s", away_message); | |
| 803 g_free(away_message); | |
| 804 | |
| 805 do_away_message(NULL, &am); | |
| 806 | |
| 807 away_mess_destroy(NULL, ca); | |
| 808 } | |
| 809 | |
| 810 void | |
| 811 su_away_mess(GtkWidget *widget, struct create_away *ca) | |
| 812 { | |
| 813 if (!check_away_mess(ca, 1)) | |
| 814 return; | |
| 815 | |
| 816 do_away_message(NULL, save_away_message(ca)); | |
| 817 | |
| 818 away_mess_destroy(NULL, ca); | |
| 819 } | |
| 820 | |
| 821 void | |
| 822 create_away_mess(GtkWidget *widget, void *dummy) | |
| 823 { | |
| 824 GtkWidget *vbox, *hbox; | |
| 825 GtkWidget *label; | |
| 826 GtkWidget *sw; | |
| 827 GtkWidget *button; | |
| 828 GList *focus_chain = NULL; | |
| 829 struct create_away *ca = g_new0(struct create_away, 1); | |
| 830 | |
| 831 /* Set up window */ | |
| 832 GAIM_DIALOG(ca->window); | |
| 833 gtk_widget_set_size_request(ca->window, -1, 250); | |
| 834 gtk_window_set_role(GTK_WINDOW(ca->window), "away_mess"); | |
| 835 gtk_window_set_title(GTK_WINDOW(ca->window), _("New away message")); | |
| 836 g_signal_connect(G_OBJECT(ca->window), "delete_event", | |
| 837 G_CALLBACK(away_mess_destroy_ca), ca); | |
| 838 | |
| 839 hbox = gtk_hbox_new(FALSE, 12); | |
| 840 gtk_container_set_border_width(GTK_CONTAINER(hbox), 12); | |
| 841 gtk_container_add(GTK_CONTAINER(ca->window), hbox); | |
| 842 | |
| 843 vbox = gtk_vbox_new(FALSE, 12); | |
| 844 gtk_container_add(GTK_CONTAINER(hbox), vbox); | |
| 845 | |
| 846 /* Away message title */ | |
| 847 hbox = gtk_hbox_new(FALSE, 0); | |
| 848 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | |
| 849 | |
| 850 label = gtk_label_new(_("Away title: ")); | |
| 851 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | |
| 852 | |
| 853 ca->entry = gtk_entry_new(); | |
| 854 gtk_box_pack_start(GTK_BOX(hbox), ca->entry, TRUE, TRUE, 0); | |
| 855 gaim_set_accessible_label (ca->entry, label); | |
| 856 focus_chain = g_list_append(focus_chain, hbox); | |
| 857 | |
| 858 /* Toolbar */ | |
| 859 ca->toolbar = gtk_imhtmltoolbar_new(); | |
| 860 gtk_box_pack_start(GTK_BOX(vbox), ca->toolbar, FALSE, FALSE, 0); | |
| 861 | |
| 862 /* Away message text */ | |
| 863 sw = gtk_scrolled_window_new(NULL, NULL); | |
| 864 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), | |
| 865 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); | |
| 866 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); | |
| 867 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); | |
| 868 | |
| 869 ca->text = gtk_imhtml_new(NULL, NULL); | |
| 870 gtk_imhtml_set_editable(GTK_IMHTML(ca->text), TRUE); | |
| 871 gtk_imhtml_set_format_functions(GTK_IMHTML(ca->text), GTK_IMHTML_ALL ^ GTK_IMHTML_IMAGE); | |
| 872 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(ca->text), GTK_WRAP_WORD_CHAR); | |
| 873 | |
| 874 gtk_imhtml_smiley_shortcuts(GTK_IMHTML(ca->text), | |
| 875 gaim_prefs_get_bool("/gaim/gtk/conversations/smiley_shortcuts")); | |
| 876 gtk_imhtml_html_shortcuts(GTK_IMHTML(ca->text), | |
| 877 gaim_prefs_get_bool("/gaim/gtk/conversations/html_shortcuts")); | |
| 878 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck")) | |
| 879 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(ca->text)); | |
| 880 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(ca->toolbar), ca->text); | |
| 881 gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(ca->toolbar), "default"); | |
| 882 gaim_setup_imhtml(ca->text); | |
| 883 | |
| 884 gtk_container_add(GTK_CONTAINER(sw), ca->text); | |
| 885 focus_chain = g_list_append(focus_chain, sw); | |
| 886 | |
| 887 if (dummy) { | |
| 9827 | 888 /* If anything is passed here, it is an away_message pointer */ |
| 889 struct away_message *amt = (struct away_message *) dummy ; | |
| 9730 | 890 gtk_entry_set_text(GTK_ENTRY(ca->entry), amt->name); |
| 891 gtk_imhtml_append_text_with_images(GTK_IMHTML(ca->text), amt->message, 0, NULL); | |
| 892 ca->mess = amt; | |
| 893 } | |
| 894 | |
| 895 hbox = gtk_hbox_new(FALSE, 5); | |
| 896 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | |
| 897 | |
| 898 button = gaim_pixbuf_button_from_stock(_("_Save"), GTK_STOCK_SAVE, GAIM_BUTTON_HORIZONTAL); | |
| 899 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(save_away_mess), ca); | |
| 900 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
| 901 | |
| 902 button = gaim_pixbuf_button_from_stock(_("Sa_ve & Use"), GTK_STOCK_OK, GAIM_BUTTON_HORIZONTAL); | |
| 903 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(su_away_mess), ca); | |
| 904 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
| 905 | |
| 906 button = gaim_pixbuf_button_from_stock(_("_Use"), GTK_STOCK_EXECUTE, GAIM_BUTTON_HORIZONTAL); | |
| 907 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(use_away_mess), ca); | |
| 908 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
| 909 | |
| 910 button = gaim_pixbuf_button_from_stock(_("_Cancel"), GTK_STOCK_CANCEL, GAIM_BUTTON_HORIZONTAL); | |
| 911 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(away_mess_destroy), ca); | |
| 912 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
| 913 focus_chain = g_list_prepend(focus_chain, hbox); | |
| 914 | |
| 915 gtk_widget_show_all(ca->window); | |
| 916 gtk_container_set_focus_chain(GTK_CONTAINER(vbox), focus_chain); | |
| 917 } |
