From 9f4b8495af0a6305d442fbcd81085ecfcca80001 Mon Sep 17 00:00:00 2001 From: Christian Persch Date: Sun, 7 Nov 2004 10:01:32 +0000 Subject: Make tooltips on the zoom control also work on Ctrl-F1. 2004-11-07 Christian Persch * lib/widgets/ephy-zoom-control.c: (ephy_zoom_control_init), (set_combo_tooltip), (combo_realized), (ephy_zoom_control_set_tooltip): Make tooltips on the zoom control also work on Ctrl-F1. --- lib/widgets/ephy-zoom-control.c | 57 +++++++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 13 deletions(-) (limited to 'lib/widgets/ephy-zoom-control.c') diff --git a/lib/widgets/ephy-zoom-control.c b/lib/widgets/ephy-zoom-control.c index c201a4da0..2731deff6 100644 --- a/lib/widgets/ephy-zoom-control.c +++ b/lib/widgets/ephy-zoom-control.c @@ -32,8 +32,8 @@ #define EPHY_ZOOM_CONTROL_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_ZOOM_CONTROL, EphyZoomControlPrivate)) -struct _EphyZoomControlPrivate { - GtkWidget *ebox; +struct _EphyZoomControlPrivate +{ GtkComboBox *combo; float zoom; guint handler_id; @@ -120,7 +120,7 @@ ephy_zoom_control_init (EphyZoomControl *control) { EphyZoomControlPrivate *p; GtkComboBox *combo; - GtkWidget *vbox, *ebox; + GtkWidget *vbox; guint i; p = EPHY_ZOOM_CONTROL_GET_PRIVATE (control); @@ -143,15 +143,8 @@ ephy_zoom_control_init (EphyZoomControl *control) i = ephy_zoom_get_zoom_level_index (p->zoom); gtk_combo_box_set_active (combo, i); - /* FIXME: remove this when combobox supports tooltip itself */ - ebox = p->ebox = gtk_event_box_new (); - /* We need enter/leave to do tooltips */ - gtk_widget_add_events (ebox, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); - gtk_container_add (GTK_CONTAINER (ebox), GTK_WIDGET (combo)); - gtk_widget_show (ebox); - vbox = gtk_vbox_new (TRUE, 0); - gtk_box_pack_start (GTK_BOX (vbox), ebox, TRUE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (combo), TRUE, FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (control), vbox); @@ -203,6 +196,30 @@ ephy_zoom_control_get_property (GObject *object, } } +static void +set_combo_tooltip (GtkWidget *widget, + GtkTooltipsData *data) +{ + if (GTK_IS_BUTTON (widget)) + { + gtk_tooltips_set_tip (data->tooltips, widget, + data->tip_text, data->tip_private); + } +} + +static void +combo_realized (GtkWidget *combo, + GtkWidget *control) +{ + GtkTooltipsData *data; + + data = gtk_tooltips_data_get (control); + g_return_if_fail (data != NULL); + + gtk_container_forall (GTK_CONTAINER (combo), + (GtkCallback) set_combo_tooltip, data); +} + static gboolean ephy_zoom_control_set_tooltip (GtkToolItem *tool_item, GtkTooltips *tooltips, @@ -210,9 +227,23 @@ ephy_zoom_control_set_tooltip (GtkToolItem *tool_item, const char *tip_private) { EphyZoomControl *control = EPHY_ZOOM_CONTROL (tool_item); + GtkWidget *widget = GTK_WIDGET (tool_item); + + /* hack to make tooltips work also on Ctrl-F1 */ + gtk_tooltips_set_tip (tooltips, widget, tip_text, tip_private); - gtk_tooltips_set_tip (tooltips, GTK_WIDGET (control->priv->ebox), - tip_text, tip_private); + g_signal_handlers_disconnect_by_func + (control->priv->combo, G_CALLBACK (combo_realized), widget); + + if (GTK_WIDGET_REALIZED (tool_item)) + { + combo_realized (GTK_WIDGET (control->priv->combo), widget); + } + else + { + g_signal_connect_after (control->priv->combo, "realize", + G_CALLBACK (combo_realized), widget); + } return TRUE; } -- cgit v1.2.3