diff options
author | Soeren Sandmann <sandmann@daimi.au.dk> | 2004-06-01 22:47:14 +0000 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@src.gnome.org> | 2004-06-01 22:47:14 +0000 |
commit | 01a5698e1d4dd4d6dee8ef782109cd58b943368a (patch) | |
tree | f0992fa7ea19ed9c1a29b829376e72a2bd86be41 /gtk/gtkmenushell.c | |
parent | 3302fd3273cff5a6ad9ed8148521e07b04b6969a (diff) | |
download | gdk-pixbuf-01a5698e1d4dd4d6dee8ef782109cd58b943368a.tar.gz |
Make menus only stay up if you release within 500 milliseconds.
Wed Jun 2 00:39:58 2004 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtkmenushell.c (gtk_menu_shell_button_release): Make menus
only stay up if you release within 500 milliseconds.
(gtk_menu_shell_button_press): Set the activate_time to the event
time when a button is pressed.
* gtk/gtkmenu.c (gtk_menu_motion_notify, gtk_menu_enter_notify):
Interprete button releases as activate when we have seen both an
enter an a motion event.
Diffstat (limited to 'gtk/gtkmenushell.c')
-rw-r--r-- | gtk/gtkmenushell.c | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c index df9a9e2cc..d28ca30cf 100644 --- a/gtk/gtkmenushell.c +++ b/gtk/gtkmenushell.c @@ -454,9 +454,10 @@ gtk_menu_shell_button_press (GtkWidget *widget, (menu_item != menu_shell->active_menu_item)) { if (GTK_MENU_SHELL_GET_CLASS (menu_shell)->submenu_placement == GTK_TOP_BOTTOM) - g_object_set_data (G_OBJECT (menu_shell), - "gtk-menushell-just-activated", - GUINT_TO_POINTER (1)); + { + menu_shell->activate_time = event->time; + } + gtk_menu_shell_select_item (menu_shell, menu_item); } } @@ -488,8 +489,6 @@ gtk_menu_shell_button_release (GtkWidget *widget, menu_shell = GTK_MENU_SHELL (widget); if (menu_shell->active) { - gboolean deactivate_immediately = FALSE; - if (menu_shell->button && (event->button != menu_shell->button)) { menu_shell->button = 0; @@ -502,23 +501,8 @@ gtk_menu_shell_button_release (GtkWidget *widget, deactivate = TRUE; - if (menu_item - && GTK_MENU_SHELL_GET_CLASS (menu_shell)->submenu_placement == GTK_TOP_BOTTOM) - { - if (g_object_get_data (G_OBJECT (menu_shell), "gtk-menushell-just-activated")) - g_object_set_data (G_OBJECT (menu_shell), "gtk-menushell-just-activated", NULL); - else - deactivate_immediately = TRUE; - } - if ((event->time - menu_shell->activate_time) > MENU_SHELL_TIMEOUT) { - if (deactivate_immediately) - { - gtk_menu_shell_deactivate (menu_shell); - return TRUE; - } - if (menu_item && (menu_shell->active_menu_item == menu_item) && _gtk_menu_item_is_selectable (menu_item)) { @@ -528,8 +512,12 @@ gtk_menu_shell_button_release (GtkWidget *widget, return TRUE; } } - else if (menu_item && !_gtk_menu_item_is_selectable (menu_item)) - deactivate = FALSE; + else if (menu_item && + !_gtk_menu_item_is_selectable (menu_item) && + GTK_MENU_SHELL_GET_CLASS (menu_shell)->submenu_placement != GTK_TOP_BOTTOM) + { + deactivate = FALSE; + } else if (menu_shell->parent_menu_shell) { menu_shell->active = TRUE; @@ -539,8 +527,11 @@ gtk_menu_shell_button_release (GtkWidget *widget, /* If we ended up on an item with a submenu, leave the menu up. */ - if (menu_item && (menu_shell->active_menu_item == menu_item)) - deactivate = FALSE; + if (menu_item && (menu_shell->active_menu_item == menu_item) && + GTK_MENU_SHELL_GET_CLASS (menu_shell)->submenu_placement != GTK_TOP_BOTTOM) + { + deactivate = FALSE; + } } else /* a very fast press-release */ { @@ -745,6 +736,7 @@ gtk_real_menu_shell_deactivate (GtkMenuShell *menu_shell) { menu_shell->button = 0; menu_shell->active = FALSE; + menu_shell->activate_time = 0; if (menu_shell->active_menu_item) { |