summaryrefslogtreecommitdiff
path: root/gtk/gtktooltips.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2002-05-15 21:46:42 +0000
committerOwen Taylor <otaylor@src.gnome.org>2002-05-15 21:46:42 +0000
commit70d78734c5c9469bc0863136159f1ad1ac229627 (patch)
tree1b22f28f3180850361371ce9fcefd3176093ed60 /gtk/gtktooltips.c
parent030ac8095a0d31386a197c7fe066b2fd96095d0e (diff)
downloadgdk-pixbuf-70d78734c5c9469bc0863136159f1ad1ac229627.tar.gz
Special case menu items to pop down on motion. (#75961)
Wed May 15 17:12:50 2002 Owen Taylor <otaylor@redhat.com> * gtk/gtktooltips.c: Special case menu items to pop down on motion. (#75961) * tests/testgtk.c (create_item_factory): Add tooltips to the File menu. * gtk/gtkentry.c (update_im_cursor_location): Fix cursor locations passed to the IM context. (#80027, Yao Zhang)
Diffstat (limited to 'gtk/gtktooltips.c')
-rw-r--r--gtk/gtktooltips.c57
1 files changed, 38 insertions, 19 deletions
diff --git a/gtk/gtktooltips.c b/gtk/gtktooltips.c
index 6f37438e9..20bc1fec6 100644
--- a/gtk/gtktooltips.c
+++ b/gtk/gtktooltips.c
@@ -30,6 +30,7 @@
#include "gtklabel.h"
#include "gtkmain.h"
+#include "gtkmenuitem.h"
#include "gtkwidget.h"
#include "gtkwindow.h"
#include "gtksignal.h"
@@ -519,6 +520,31 @@ stop_keyboard_mode (GtkWidget *widget)
}
static void
+gtk_tooltips_start_delay (GtkTooltips *tooltips,
+ GtkWidget *widget)
+{
+ GtkTooltipsData *old_tips_data;
+
+ old_tips_data = tooltips->active_tips_data;
+ if (tooltips->enabled &&
+ (!old_tips_data || old_tips_data->widget != widget))
+ {
+ guint delay;
+
+ gtk_tooltips_set_active_widget (tooltips, widget);
+
+ if (tooltips->use_sticky_delay &&
+ gtk_tooltips_recently_shown (tooltips))
+ delay = STICKY_DELAY;
+ else
+ delay = tooltips->delay;
+ tooltips->timer_tag = gtk_timeout_add (delay,
+ gtk_tooltips_timeout,
+ (gpointer) tooltips);
+ }
+}
+
+static void
gtk_tooltips_event_handler (GtkWidget *widget,
GdkEvent *event)
{
@@ -559,29 +585,11 @@ gtk_tooltips_event_handler (GtkWidget *widget,
switch (event->type)
{
- case GDK_MOTION_NOTIFY:
case GDK_EXPOSE:
/* do nothing */
break;
-
case GDK_ENTER_NOTIFY:
- old_tips_data = tooltips->active_tips_data;
- if (tooltips->enabled &&
- (!old_tips_data || old_tips_data->widget != widget))
- {
- guint delay;
-
- gtk_tooltips_set_active_widget (tooltips, widget);
-
- if (tooltips->use_sticky_delay &&
- gtk_tooltips_recently_shown (tooltips))
- delay = STICKY_DELAY;
- else
- delay = tooltips->delay;
- tooltips->timer_tag = gtk_timeout_add (delay,
- gtk_tooltips_timeout,
- (gpointer) tooltips);
- }
+ gtk_tooltips_start_delay (tooltips, widget);
break;
case GDK_LEAVE_NOTIFY:
@@ -595,6 +603,17 @@ gtk_tooltips_event_handler (GtkWidget *widget,
}
break;
+ case GDK_MOTION_NOTIFY:
+ /* Handle menu items specially ... pend popup for each motion
+ * on other widgets, we ignore motion.
+ */
+ if (GTK_IS_MENU_ITEM (widget))
+ {
+ gtk_tooltips_set_active_widget (tooltips, NULL);
+ gtk_tooltips_start_delay (tooltips, widget);
+ break;
+ }
+ break; /* ignore */
case GDK_BUTTON_PRESS:
case GDK_BUTTON_RELEASE:
case GDK_KEY_PRESS: