diff src/away.c @ 1109:c73736fa0b7c

[gaim-migrate @ 1119] Auto-Away, courtesy BMiller. damn cool. i'm impressed. also minor touch-ups, mostly to indicate what all the FIXME's mean. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Mon, 20 Nov 2000 10:37:40 +0000
parents 77b6bc7288d3
children 282e6b7aef2c
line wrap: on
line diff
--- a/src/away.c	Mon Nov 20 08:35:25 2000 +0000
+++ b/src/away.c	Mon Nov 20 10:37:40 2000 +0000
@@ -40,6 +40,8 @@
 
 GtkWidget *awaymenu = NULL;
 struct away_message *awaymessage = NULL;
+int default_away;
+int auto_away;
 
 static void destroy_im_away()
 {
@@ -56,13 +58,14 @@
 	insert_applet_away();
 #endif /* USE_APPLET */
 	if (imaway) {
-		gtk_widget_destroy(imaway);
+		GtkWidget *tmp = imaway;
 		imaway=NULL;
+		gtk_widget_destroy(tmp);
+		plugin_event(event_back, 0, 0, 0, 0);
         }
 
         serv_set_away(NULL);
 	awaymessage = NULL;
-	plugin_event(event_back, 0, 0, 0, 0);
 }
 
 
@@ -194,6 +197,7 @@
 
 void rem_away_mess(GtkWidget *w, struct away_message *a)
 {
+	struct away_message *default_msg;
 #ifdef USE_APPLET
 	char *awayname;
 	awayname = g_malloc(sizeof (*awayname) * (6 + strlen(a->name)));
@@ -202,7 +206,11 @@
 	strcat(awayname, a->name);
 	applet_widget_unregister_callback(APPLET_WIDGET(applet), awayname);
 #endif
+	default_msg = g_slist_nth_data(away_messages, default_away);
         away_messages = g_slist_remove(away_messages, a);
+	default_away = g_slist_index(away_messages, default_msg);
+	if (default_away == -1)
+		default_away = 0;
         g_free(a);
         do_away_menu();
         save_prefs();
@@ -254,61 +262,72 @@
                         gtk_list_select_item(GTK_LIST(prefs_away_list), 0);
 	}
 	
-	if (!awaymenu) return;
-	l = gtk_container_children(GTK_CONTAINER(awaymenu));
-	
-	while(l) {
-		gtk_widget_destroy(GTK_WIDGET(l->data));
-		l = l->next;
-	}
+	if (awaymenu) {
+		l = gtk_container_children(GTK_CONTAINER(awaymenu));
+		
+		while(l) {
+			gtk_widget_destroy(GTK_WIDGET(l->data));
+			l = l->next;
+		}
 
 
-	remmenu = gtk_menu_new();
-
-	menuitem = gtk_menu_item_new_with_label(_("New Away Message"));
-	gtk_menu_append(GTK_MENU(awaymenu), menuitem);
-	gtk_widget_show(menuitem);
-	gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(create_away_mess), NULL);
-
-	awy = away_messages;
-        while(awy) {
-                a = (struct away_message *)awy->data;
-
-		remitem = gtk_menu_item_new_with_label(a->name);
-		gtk_menu_append(GTK_MENU(remmenu), remitem);
-		gtk_widget_show(remitem);
-		gtk_signal_connect(GTK_OBJECT(remitem), "activate", GTK_SIGNAL_FUNC(rem_away_mess), a);
-
-		awy = g_slist_next(awy);
+		remmenu = gtk_menu_new();
 
-	}
-	
-	menuitem = gtk_menu_item_new_with_label(_("Remove Away Message"));
-	gtk_menu_append(GTK_MENU(awaymenu), menuitem);
-	gtk_widget_show(menuitem);
-	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), remmenu);
-	gtk_widget_show(remmenu);
-	
-	sep = gtk_hseparator_new();
-	menuitem = gtk_menu_item_new();
-	gtk_menu_append(GTK_MENU(awaymenu), menuitem);
-	gtk_container_add(GTK_CONTAINER(menuitem), sep);
-	gtk_widget_set_sensitive(menuitem, FALSE);
-	gtk_widget_show(menuitem);
-	gtk_widget_show(sep);
-
-	awy = away_messages;
-	
-	while(awy) {
-                a = (struct away_message *)awy->data;
-                
-		menuitem = gtk_menu_item_new_with_label(a->name);
+		menuitem = gtk_menu_item_new_with_label(_("New Away Message"));
+		gtk_menu_append(GTK_MENU(awaymenu), menuitem);
+		gtk_widget_show(menuitem);
+		gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(create_away_mess), NULL);
+		
+		awy = away_messages;
+		while(awy) {
+			a = (struct away_message *)awy->data;
+			
+			remitem = gtk_menu_item_new_with_label(a->name);
+			gtk_menu_append(GTK_MENU(remmenu), remitem);
+			gtk_widget_show(remitem);
+			gtk_signal_connect(GTK_OBJECT(remitem), "activate", GTK_SIGNAL_FUNC(rem_away_mess), a);
+			
+			awy = g_slist_next(awy);
+			
+		}
+		
+		menuitem = gtk_menu_item_new_with_label(_("Remove Away Message"));
 		gtk_menu_append(GTK_MENU(awaymenu), menuitem);
 		gtk_widget_show(menuitem);
-		gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(do_away_message), a);
-
-		awy = g_slist_next(awy);
-
+		gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), remmenu);
+		gtk_widget_show(remmenu);
+		
+		sep = gtk_hseparator_new();
+		menuitem = gtk_menu_item_new();
+		gtk_menu_append(GTK_MENU(awaymenu), menuitem);
+		gtk_container_add(GTK_CONTAINER(menuitem), sep);
+		gtk_widget_set_sensitive(menuitem, FALSE);
+		gtk_widget_show(menuitem);
+		gtk_widget_show(sep);
+		
+		awy = away_messages;
+		
+		while(awy) {
+			a = (struct away_message *)awy->data;
+			
+			menuitem = gtk_menu_item_new_with_label(a->name);
+			gtk_menu_append(GTK_MENU(awaymenu), menuitem);
+			gtk_widget_show(menuitem);
+			gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(do_away_message), a);
+			
+			awy = g_slist_next(awy);
+			
+		}
+	}
+	if (prefs_away_menu) {
+		l = gtk_container_children(GTK_CONTAINER(prefs_away_menu));
+		while(l) {
+			gtk_widget_destroy(GTK_WIDGET(l->data));
+			l = l->next;
+		}
+		gtk_widget_hide(GTK_WIDGET(prefs_away_menu));
+		default_away_menu_init(GTK_WIDGET(prefs_away_menu));
+		gtk_widget_show(prefs_away_menu);
 	}
 
 }