comparison src/away.c @ 4274:906f61f27479

[gaim-migrate @ 4525] (01:26:02) Robot101: guess which bugs I fixed (01:26:14) Me: i can't (01:26:26) Robot101: really common crash... (01:26:35) Robot101: I fixed the return from away crash! =) committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Fri, 10 Jan 2003 06:32:14 +0000
parents 7002b6f16bdf
children 5fb47ec9bfe4
comparison
equal deleted inserted replaced
4273:a345395c8794 4274:906f61f27479
51 clistqueue = NULL; 51 clistqueue = NULL;
52 clistqueuesw = NULL; 52 clistqueuesw = NULL;
53 imaway = NULL; 53 imaway = NULL;
54 } 54 }
55 55
56 void purge_away_queue(GSList *queue) 56 void purge_away_queue(GSList **queue)
57 { 57 {
58 GSList *q = *queue;
59 struct queued_message *qm;
58 struct conversation *cnv; 60 struct conversation *cnv;
59 61
60 gtk_clist_freeze(GTK_CLIST(clistqueue)); 62 while (q) {
61 gtk_clist_clear(GTK_CLIST(clistqueue)); 63 qm = q->data;
62
63 while (queue) {
64 struct queued_message *qm = queue->data;
65 64
66 cnv = find_conversation(qm->name); 65 cnv = find_conversation(qm->name);
67 if (!cnv) 66 if (!cnv)
68 cnv = new_conversation(qm->name); 67 cnv = new_conversation(qm->name);
68
69 if (g_slist_index(connections, qm->gc) >= 0) 69 if (g_slist_index(connections, qm->gc) >= 0)
70 set_convo_gc(cnv, qm->gc); 70 set_convo_gc(cnv, qm->gc);
71
71 write_to_conv(cnv, qm->message, qm->flags, NULL, qm->tm, qm->len); 72 write_to_conv(cnv, qm->message, qm->flags, NULL, qm->tm, qm->len);
72
73 queue = g_slist_remove(queue, qm);
74 73
75 g_free(qm->message); 74 g_free(qm->message);
76 g_free(qm); 75 g_free(qm);
77 } 76
78 77 q->data = NULL;
79 gtk_clist_thaw(GTK_CLIST(clistqueue)); 78 q = q->next;
79 }
80
81 g_slist_free(*queue);
82 *queue = NULL;
80 } 83 }
81 84
82 void dequeue_by_buddy(GtkWidget *clist, gint row, gint column, GdkEventButton *event, gpointer data) { 85 void dequeue_by_buddy(GtkWidget *clist, gint row, gint column, GdkEventButton *event, gpointer data) {
83 char *temp; 86 char *temp;
84 char *name; 87 char *name;
132 gtk_widget_show(clistqueue); 135 gtk_widget_show(clistqueue);
133 gtk_widget_show(clistqueuesw); 136 gtk_widget_show(clistqueuesw);
134 } else { 137 } else {
135 gtk_widget_hide(clistqueue); 138 gtk_widget_hide(clistqueue);
136 gtk_widget_hide(clistqueuesw); 139 gtk_widget_hide(clistqueuesw);
137 purge_away_queue(message_queue); 140 gtk_clist_clear(GTK_CLIST(clistqueue));
141 purge_away_queue(&message_queue);
138 } 142 }
139 } 143 }
140 144
141 void do_im_back(GtkWidget *w, GtkWidget *x) 145 void do_im_back(GtkWidget *w, GtkWidget *x)
142 { 146 {
143 if (imaway) { 147 if (imaway) {
144 GtkWidget *tmp = imaway; 148 GtkWidget *tmp = imaway;
145 149
146 purge_away_queue(message_queue); 150 gtk_clist_freeze(GTK_CLIST(clistqueue));
151 gtk_clist_clear(GTK_CLIST(clistqueue));
152
153 purge_away_queue(&message_queue);
154
155 gtk_clist_thaw(GTK_CLIST(clistqueue));
147 156
148 imaway = NULL; 157 imaway = NULL;
149 gtk_widget_destroy(tmp); 158 gtk_widget_destroy(tmp);
150 if (w != tmp) 159 if (w != tmp)
151 return; 160 return;