diff src/gtkmenutray.c @ 12008:91aaa1b3ac30

[gaim-migrate @ 14301] sf patch #1348466, from Sadrul Habib Chowdhury Add a tooltip for the typing notification icons (and any other icon in the gtkmenutray) committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Tue, 08 Nov 2005 23:34:54 +0000
parents 34ea75bdd0c9
children
line wrap: on
line diff
--- a/src/gtkmenutray.c	Tue Nov 08 19:45:09 2005 +0000
+++ b/src/gtkmenutray.c	Tue Nov 08 23:34:54 2005 +0000
@@ -21,6 +21,7 @@
 
 #include "gtkmenutray.h"
 
+#include <gtk/gtkeventbox.h>
 #include <gtk/gtkiconfactory.h>
 #include <gtk/gtkversion.h>
 
@@ -129,7 +130,7 @@
 	gint height = -1;
 
 	gtk_menu_item_set_right_justified(GTK_MENU_ITEM(menu_tray), TRUE);
-	
+
 	if(!GTK_IS_WIDGET(menu_tray->tray))
 		menu_tray->tray = gtk_hbox_new(FALSE, 0);
 
@@ -193,24 +194,41 @@
 	return menu_tray->tray;
 }
 
-void
-gaim_gtk_menu_tray_append(GaimGtkMenuTray *menu_tray, GtkWidget *widget, const char *tooltip)
+static void
+gaim_gtk_menu_tray_add(GaimGtkMenuTray *menu_tray, GtkWidget *widget,
+					   const char *tooltip, gboolean prepend)
 {
 	g_return_if_fail(GAIM_GTK_IS_MENU_TRAY(menu_tray));
 	g_return_if_fail(GTK_IS_WIDGET(widget));
 
+	if (GTK_WIDGET_NO_WINDOW(widget))
+	{
+		GtkWidget *event;
+
+		event = gtk_event_box_new();
+		gtk_container_add(GTK_CONTAINER(event), widget);
+		gtk_widget_show(event);
+		widget = event;
+	}
+
 	gaim_gtk_menu_tray_set_tooltip(menu_tray, widget, tooltip);
-	gtk_box_pack_end(GTK_BOX(menu_tray->tray), widget, FALSE, FALSE, 0);
+
+	if (prepend)
+		gtk_box_pack_start(GTK_BOX(menu_tray->tray), widget, FALSE, FALSE, 0);
+	else
+		gtk_box_pack_end(GTK_BOX(menu_tray->tray), widget, FALSE, FALSE, 0);
+}
+
+void
+gaim_gtk_menu_tray_append(GaimGtkMenuTray *menu_tray, GtkWidget *widget, const char *tooltip)
+{
+	gaim_gtk_menu_tray_add(menu_tray, widget, tooltip, FALSE);
 }
 
 void
 gaim_gtk_menu_tray_prepend(GaimGtkMenuTray *menu_tray, GtkWidget *widget, const char *tooltip)
 {
-	g_return_if_fail(GAIM_GTK_IS_MENU_TRAY(menu_tray));
-	g_return_if_fail(GTK_IS_WIDGET(widget));
-
-	gaim_gtk_menu_tray_set_tooltip(menu_tray, widget, tooltip);
-	gtk_box_pack_start(GTK_BOX(menu_tray->tray), widget, FALSE, FALSE, 0);
+	gaim_gtk_menu_tray_add(menu_tray, widget, tooltip, TRUE);
 }
 
 void
@@ -220,10 +238,17 @@
 		return;
 
 	/* Should we check whether widget is a child of menu_tray? */
+
+	/*
+	 * If the widget does not have it's own window, then it
+	 * must have automatically been added to an event box
+	 * when it was added to the menu tray.  If this is the
+	 * case, we want to set the tooltip on the widget's parent,
+	 * not on the widget itself.
+	 */
 	if (GTK_WIDGET_NO_WINDOW(widget))
-		gaim_debug_warning("GtkMenuTray",
-				"The widget does not have it's own window. Tooltip cannot be set for this widget.\n");
-	else
-		gtk_tooltips_set_tip(menu_tray->tooltips, widget, tooltip, NULL);
+		widget = widget->parent;
+
+	gtk_tooltips_set_tip(menu_tray->tooltips, widget, tooltip, NULL);
 }