diff src/gtkconv.c @ 11686:0914f135760a

[gaim-migrate @ 13972] This fixes the dancing conversation dialog when the typing icon appears and disappears with a relatively small system font. Additionally, it does less widget creation and destruction by creating a persistent GtkImage widget in the menubar which is merely painted with the appropriate stock icon. The most straightforward way I saw to solve this was add a "blank" menu icon to the stock icon system. committer: Tailor Script <tailor@pidgin.im>
author Ethan Blanton <elb@pidgin.im>
date Mon, 17 Oct 2005 20:48:46 +0000
parents c1906dc6257c
children 9c0612901c3e
line wrap: on
line diff
--- a/src/gtkconv.c	Mon Oct 17 20:33:35 2005 +0000
+++ b/src/gtkconv.c	Mon Oct 17 20:48:46 2005 +0000
@@ -2510,6 +2510,12 @@
 	                      win->menu.tray);
 	gtk_widget_show(win->menu.tray);
 
+	win->menu.typing_icon = gtk_image_new_from_stock(GAIM_STOCK_MENU_ICON_BLANK,
+							 GTK_ICON_SIZE_MENU);
+	gtk_widget_show(win->menu.typing_icon);
+	gaim_gtk_menu_tray_append(GAIM_GTK_MENU_TRAY(win->menu.tray),
+				  win->menu.typing_icon);
+
 	gtk_widget_show(win->menu.menubar);
 
 	return win->menu.menubar;
@@ -2564,26 +2570,21 @@
 	if(gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM)
 		im = GAIM_CONV_IM(conv);
 
-	if(gtkwin->menu.typing_icon) {
-		gtk_widget_destroy(gtkwin->menu.typing_icon);
-		gtkwin->menu.typing_icon = NULL;
-	}
 	if(im && gaim_conv_im_get_typing_state(im) == GAIM_TYPING) {
-		gtkwin->menu.typing_icon = gtk_image_new_from_stock(GAIM_STOCK_TYPING,
-															GTK_ICON_SIZE_MENU);
+		gtk_image_set_from_stock(gtkwin->menu.typing_icon, GAIM_STOCK_TYPING,
+					 GTK_ICON_SIZE_MENU);
 		gtk_tooltips_set_tip(gtkconv->tooltips, gtkwin->menu.typing_icon,
 				_("User is typing..."), NULL);
 	} else if(im && gaim_conv_im_get_typing_state(im) == GAIM_TYPED) {
-		gtkwin->menu.typing_icon = gtk_image_new_from_stock(GAIM_STOCK_TYPED,
-															GTK_ICON_SIZE_MENU);
+		gtk_image_set_from_stock(gtkwin->menu.typing_icon, GAIM_STOCK_TYPED,
+					 GTK_ICON_SIZE_MENU);
 		gtk_tooltips_set_tip(gtkconv->tooltips, gtkwin->menu.typing_icon,
 				_("User has typed something and paused"), NULL);
-	}
-
-	if(gtkwin->menu.typing_icon) {
-		gtk_widget_show(gtkwin->menu.typing_icon);
-		gaim_gtk_menu_tray_append(GAIM_GTK_MENU_TRAY(gtkwin->menu.tray),
-								  gtkwin->menu.typing_icon);
+	} else {
+		gtk_image_set_from_stock(gtkwin->menu.typing_icon, GAIM_STOCK_MENU_ICON_BLANK,
+					 GTK_ICON_SIZE_MENU);
+		gtk_tooltips_set_tip(gtkconv->tooltips, gtkwin->menu.typing_icon,
+				     "", NULL);
 	}
 }