| 58 } |
58 } |
| 59 |
59 |
| 60 void purge_away_queue() |
60 void purge_away_queue() |
| 61 { |
61 { |
| 62 struct conversation *cnv; |
62 struct conversation *cnv; |
| 63 GSList *templist = message_queue; |
|
| 64 |
63 |
| 65 gtk_clist_freeze(GTK_CLIST(clistqueue)); |
64 gtk_clist_freeze(GTK_CLIST(clistqueue)); |
| 66 gtk_clist_clear(GTK_CLIST(clistqueue)); |
65 gtk_clist_clear(GTK_CLIST(clistqueue)); |
| 67 |
66 |
| 68 while (templist) |
67 while (message_queue) { |
| 69 { |
68 struct queued_message *qm = message_queue->data; |
| 70 struct queued_message *qm = (struct queued_message *)templist->data; |
|
| 71 |
69 |
| 72 cnv = find_conversation(qm->name); |
70 cnv = find_conversation(qm->name); |
| 73 |
|
| 74 if (!cnv) |
71 if (!cnv) |
| 75 cnv = new_conversation(qm->name); |
72 cnv = new_conversation(qm->name); |
| 76 |
73 if (g_slist_index(connections, qm->gc) >= 0) { |
| 77 cnv->gc = qm->gc; |
74 cnv->gc = qm->gc; |
| 78 |
75 gtk_option_menu_set_history(GTK_OPTION_MENU(cnv->menu), |
| 79 write_to_conv(cnv, qm->message, WFLAG_RECV, NULL, qm->tm); |
76 g_slist_index(connections, qm->gc)); |
| 80 |
77 update_buttons_by_protocol(cnv); |
| 81 free(qm->message); |
78 } |
| 82 |
79 |
| 83 templist = g_slist_remove(templist, qm); |
80 write_to_conv(cnv, qm->message, qm->flags, NULL, qm->tm); |
| 84 |
81 |
| |
82 message_queue = g_slist_remove(message_queue, qm); |
| |
83 |
| |
84 g_free(qm->message); |
| 85 g_free(qm); |
85 g_free(qm); |
| 86 } |
86 } |
| 87 |
87 |
| 88 templist = away_time_queue; |
|
| 89 |
|
| 90 while (templist) |
|
| 91 { |
|
| 92 struct queued_away_response *qar = (struct queued_away_response *)templist->data; |
|
| 93 |
|
| 94 templist = g_slist_remove(templist, qar); |
|
| 95 g_free(qar); |
|
| 96 } |
|
| 97 |
|
| 98 gtk_clist_thaw(GTK_CLIST(clistqueue)); |
88 gtk_clist_thaw(GTK_CLIST(clistqueue)); |
| 99 |
|
| 100 message_queue = NULL; |
|
| 101 away_time_queue = NULL; |
|
| 102 } |
89 } |
| 103 |
90 |
| 104 void toggle_away_queue() |
91 void toggle_away_queue() |
| 105 { |
92 { |
| 106 if (!clistqueue || !clistqueuesw) |
93 if (!clistqueue || !clistqueuesw) |
| 107 return; |
94 return; |
| 108 |
95 |
| 109 if (general_options & OPT_GEN_QUEUE_WHEN_AWAY) |
96 if (general_options & OPT_GEN_QUEUE_WHEN_AWAY) { |
| 110 { |
|
| 111 gtk_widget_show(clistqueue); |
97 gtk_widget_show(clistqueue); |
| 112 gtk_widget_show(clistqueuesw); |
98 gtk_widget_show(clistqueuesw); |
| 113 } |
99 } else { |
| 114 else |
|
| 115 { |
|
| 116 gtk_widget_hide(clistqueue); |
100 gtk_widget_hide(clistqueue); |
| 117 gtk_widget_hide(clistqueuesw); |
101 gtk_widget_hide(clistqueuesw); |
| 118 purge_away_queue(); |
102 purge_away_queue(); |
| 119 } |
103 } |
| 120 |
|
| 121 } |
104 } |
| 122 |
105 |
| 123 void do_im_back(GtkWidget *w, GtkWidget *x) |
106 void do_im_back(GtkWidget *w, GtkWidget *x) |
| 124 { |
107 { |
| 125 if (imaway) { |
108 if (imaway) { |
| 206 /* Handle closes right */ |
195 /* Handle closes right */ |
| 207 gtk_signal_connect(GTK_OBJECT(imaway), "destroy", GTK_SIGNAL_FUNC(do_im_back), imaway); |
196 gtk_signal_connect(GTK_OBJECT(imaway), "destroy", GTK_SIGNAL_FUNC(do_im_back), imaway); |
| 208 gtk_signal_connect(GTK_OBJECT(back), "clicked", GTK_SIGNAL_FUNC(do_im_back), imaway); |
197 gtk_signal_connect(GTK_OBJECT(back), "clicked", GTK_SIGNAL_FUNC(do_im_back), imaway); |
| 209 |
198 |
| 210 /* Finish up */ |
199 /* Finish up */ |
| 211 if (general_options & OPT_GEN_QUEUE_WHEN_AWAY) |
200 if (general_options & OPT_GEN_QUEUE_WHEN_AWAY) { |
| 212 { |
|
| 213 gtk_widget_show(clistqueuesw); |
201 gtk_widget_show(clistqueuesw); |
| 214 gtk_widget_show(clistqueue); |
202 gtk_widget_show(clistqueue); |
| 215 } |
203 } |
| 216 |
204 |
| 217 gtk_widget_show(back); |
205 gtk_widget_show(back); |
| 236 "away", _("Back"), (AppletCallbackFunc)do_im_back, NULL); |
224 "away", _("Back"), (AppletCallbackFunc)do_im_back, NULL); |
| 237 set_user_state(away); |
225 set_user_state(away); |
| 238 #endif |
226 #endif |
| 239 |
227 |
| 240 /* New away message... Clear out the old sent_aways */ |
228 /* New away message... Clear out the old sent_aways */ |
| 241 while (cnv) { |
229 while (away_time_queue) { |
| 242 c = (struct conversation *)cnv->data; |
230 struct queued_away_response *qar = away_time_queue->data; |
| 243 c->sent_away = 0; |
231 away_time_queue = g_slist_remove(away_time_queue, qar); |
| 244 cnv = cnv->next; |
232 g_free(qar); |
| 245 } |
233 } |
| 246 |
|
| 247 |
234 |
| 248 buf2 = g_malloc(strlen(awaymessage->message) * 4 + 1); |
235 buf2 = g_malloc(strlen(awaymessage->message) * 4 + 1); |
| 249 strncpy_withhtml(buf2, awaymessage->message, strlen(awaymessage->message) * 4 + 1); |
236 strncpy_withhtml(buf2, awaymessage->message, strlen(awaymessage->message) * 4 + 1); |
| 250 serv_set_away_all(buf2); |
237 serv_set_away_all(buf2); |
| 251 g_free(buf2); |
238 g_free(buf2); |