diff options
author | Owen Taylor <otaylor@redhat.com> | 2002-05-15 21:46:42 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2002-05-15 21:46:42 +0000 |
commit | 70d78734c5c9469bc0863136159f1ad1ac229627 (patch) | |
tree | 1b22f28f3180850361371ce9fcefd3176093ed60 /gtk/gtktooltips.c | |
parent | 030ac8095a0d31386a197c7fe066b2fd96095d0e (diff) | |
download | gtk+-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.c | 57 |
1 files changed, 38 insertions, 19 deletions
diff --git a/gtk/gtktooltips.c b/gtk/gtktooltips.c index 6f37438e92..20bc1fec64 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: |