# HG changeset patch # User Richard Laager # Date 1130714079 0 # Node ID 34ea75bdd0c98f021e1b765649b4e579ae2c938d # Parent d2db6426c88ad9a88f260a9cb7360c116f1118b7 [gaim-migrate @ 14199] SF Patch #1342714 from Sadrul "This patch enables widgets added to the menutray to show tooltips. The widgets with no X-window cannot have a tooltip, and there's a warning debug message for such cases." committer: Tailor Script diff -r d2db6426c88a -r 34ea75bdd0c9 src/gtkconv.c --- a/src/gtkconv.c Sun Oct 30 23:00:47 2005 +0000 +++ b/src/gtkconv.c Sun Oct 30 23:14:39 2005 +0000 @@ -2607,7 +2607,8 @@ 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); + gtkwin->menu.typing_icon, + _("The buddy is typing a message")); } } diff -r d2db6426c88a -r 34ea75bdd0c9 src/gtkmenutray.c --- a/src/gtkmenutray.c Sun Oct 30 23:00:47 2005 +0000 +++ b/src/gtkmenutray.c Sun Oct 30 23:14:39 2005 +0000 @@ -17,6 +17,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include "debug.h" + #include "gtkmenutray.h" #include @@ -131,6 +133,8 @@ if(!GTK_IS_WIDGET(menu_tray->tray)) menu_tray->tray = gtk_hbox_new(FALSE, 0); + menu_tray->tooltips = gtk_tooltips_new(); + #if GTK_CHECK_VERSION(2,2,0) settings = gtk_settings_get_for_screen(gtk_widget_get_screen(widget)); @@ -190,17 +194,36 @@ } void -gaim_gtk_menu_tray_append(GaimGtkMenuTray *menu_tray, GtkWidget *widget) { +gaim_gtk_menu_tray_append(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_end(GTK_BOX(menu_tray->tray), widget, FALSE, FALSE, 0); } void -gaim_gtk_menu_tray_prepend(GaimGtkMenuTray *menu_tray, GtkWidget *widget) { +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); } + +void +gaim_gtk_menu_tray_set_tooltip(GaimGtkMenuTray *menu_tray, GtkWidget *widget, const char *tooltip) +{ + if (!menu_tray->tooltips) + return; + + /* Should we check whether widget is a child of menu_tray? */ + 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); +} + diff -r d2db6426c88a -r 34ea75bdd0c9 src/gtkmenutray.h --- a/src/gtkmenutray.h Sun Oct 30 23:00:47 2005 +0000 +++ b/src/gtkmenutray.h Sun Oct 30 23:14:39 2005 +0000 @@ -25,6 +25,7 @@ #include #include +#include #define GAIM_GTK_TYPE_MENU_TRAY (gaim_gtk_menu_tray_get_gtype()) #define GAIM_GTK_MENU_TRAY(obj) (GTK_CHECK_CAST((obj), GAIM_GTK_TYPE_MENU_TRAY, GaimGtkMenuTray)) @@ -40,6 +41,7 @@ struct _GaimGtkMenuTray { GtkMenuItem gparent; /**< The parent instance */ GtkWidget *tray; /**< The tray */ + GtkTooltips *tooltips; /**< Tooltips */ }; /** A GaimGtkMenuTrayClass */ @@ -78,16 +80,27 @@ * * @param menu_tray The tray * @param widget The widget + * @param tooltip The tooltip for this widget (widget requires its own X-window) */ -void gaim_gtk_menu_tray_append(GaimGtkMenuTray *menu_tray, GtkWidget *widget); +void gaim_gtk_menu_tray_append(GaimGtkMenuTray *menu_tray, GtkWidget *widget, const char *tooltip); /** * Prepends a widget into the tray * - * @param menu_tray The try + * @param menu_tray The tray * @param widget The widget + * @param tooltip The tooltip for this widget (widget requires its own X-window) */ -void gaim_gtk_menu_tray_prepend(GaimGtkMenuTray *menu_tray, GtkWidget *widget); +void gaim_gtk_menu_tray_prepend(GaimGtkMenuTray *menu_tray, GtkWidget *widget, const char *tooltip); + +/** + * Set the tooltip for a widget + * + * @param menu_tray The tray + * @param widget The widget + * @param tooltip The tooltip to set for the widget (widget requires its own X-window) + */ +void gaim_gtk_menu_tray_set_tooltip(GaimGtkMenuTray *menu_tray, GtkWidget *widget, const char *tooltip); G_END_DECLS