diff src/away.c @ 1773:6d1d9e988fd4

[gaim-migrate @ 1783] Away message queueue thingy. committer: Tailor Script <tailor@pidgin.im>
author Rob Flynn <gaim@robflynn.com>
date Mon, 30 Apr 2001 06:02:06 +0000
parents 9aae465eeb6e
children 9d0c91c705b7
line wrap: on
line diff
--- a/src/away.c	Mon Apr 30 01:58:24 2001 +0000
+++ b/src/away.c	Mon Apr 30 06:02:06 2001 +0000
@@ -40,6 +40,9 @@
 GtkWidget *imaway = NULL;
 
 GtkWidget *awaymenu = NULL;
+GtkWidget *clistqueue = NULL;
+GtkWidget *clistqueuesw;
+
 struct away_message *awaymessage = NULL;
 struct away_message *default_away;
 int auto_away;
@@ -51,24 +54,66 @@
 	imaway = NULL;
 }
 
+void purge_away_queue()
+{
+	struct conversation *cnv;
+	GSList *templist = message_queue;
+
+	gtk_clist_freeze(GTK_CLIST(clistqueue));
+
+	gtk_clist_clear(GTK_CLIST(clistqueue));
+
+	while (templist)
+	{
+		struct queued_message *qm = (struct queued_message *)templist->data;
+
+		cnv = find_conversation(qm->name);
+
+		if (!cnv)
+			cnv = new_conversation(qm->name);
+
+		cnv->gc = qm->gc;
+
+		write_to_conv(cnv, qm->message, WFLAG_RECV, NULL, qm->tm);
+
+		free(qm->message);
+
+		templist = g_slist_remove(templist, qm);
+
+		free(qm);
+	}
+
+	gtk_clist_thaw(GTK_CLIST(clistqueue));
+	
+	message_queue = NULL;
+}
+
+void toggle_away_queue()
+{
+	if (!clistqueue || !clistqueuesw)
+		return;
+	
+	if (general_options & OPT_GEN_QUEUE_WHEN_AWAY)
+	{
+		gtk_widget_show(clistqueue);
+		gtk_widget_show(clistqueuesw);
+	}
+	else
+	{
+		gtk_widget_hide(clistqueue);
+		gtk_widget_hide(clistqueuesw);
+		purge_away_queue();
+	}
+	
+}
+
 void do_im_back(GtkWidget *w, GtkWidget *x)
 {
 	if (imaway) {
 		GtkWidget *tmp = imaway;
-		/*GSList *templist = message_queue;
-
-		while (templist)
-		{
-			struct queued_message *qm = (struct queued_message *)templist->data;
 
-			free(qm->message);
-
-			message_queue = g_slist_remove(message_queue, qm);
+		purge_away_queue();
 
-			free(qm);
-		}
-		*/
-		
 		imaway = NULL;
 		gtk_widget_destroy(tmp);
 		if (w != tmp)
@@ -120,7 +165,7 @@
 
 		vscrollbar = gtk_vscrollbar_new(GTK_TEXT(awaytext)->vadj);
 		gtk_widget_show(vscrollbar);
-		gtk_widget_set_usize(awaytext, 225, 100);
+		gtk_widget_set_usize(awaytext, 245, 120);
 		gtk_text_set_word_wrap(GTK_TEXT(awaytext), TRUE);
 		gtk_widget_show(awaytext);
 		gtk_text_freeze(GTK_TEXT(awaytext));
@@ -130,8 +175,19 @@
 		if (display_options & OPT_DISP_COOL_LOOK)
 			gtk_button_set_relief(GTK_BUTTON(back), GTK_RELIEF_NONE);
 
+		clistqueuesw = gtk_scrolled_window_new(NULL, NULL);
+		gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(clistqueuesw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+
+		clistqueue = gtk_clist_new(2);
+		gtk_clist_set_column_width(GTK_CLIST(clistqueue), 0, 100);
+		gtk_widget_set_usize(GTK_WIDGET(clistqueue), -1, 50);
+		gtk_container_add(GTK_CONTAINER(clistqueuesw), clistqueue);
+
 		/* Put the buttons in the box */
 		gtk_box_pack_start(GTK_BOX(vbox), awaytext, TRUE, TRUE, 0);
+		
+		gtk_box_pack_start(GTK_BOX(vbox), clistqueuesw, TRUE, TRUE, 0);
+		
 		gtk_box_pack_start(GTK_BOX(vbox), back, FALSE, FALSE, 0);
 
 		/* Handle closes right */
@@ -139,6 +195,12 @@
 		gtk_signal_connect(GTK_OBJECT(back), "clicked", GTK_SIGNAL_FUNC(do_im_back), imaway);
 
 		/* Finish up */
+		if (general_options & OPT_GEN_QUEUE_WHEN_AWAY)
+		{
+			gtk_widget_show(clistqueuesw);
+			gtk_widget_show(clistqueue);
+		}
+
 		gtk_widget_show(back);
 		gtk_widget_show(vbox);
 		if (strlen(a->name))