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/gtkmenu.c | |
parent | 3302fd3273cff5a6ad9ed8148521e07b04b6969a (diff) | |
download | gtk+-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/gtkmenu.c')
-rw-r--r-- | gtk/gtkmenu.c | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c index b595a312e0..35bfe197a1 100644 --- a/gtk/gtkmenu.c +++ b/gtk/gtkmenu.c @@ -75,6 +75,9 @@ struct _GtkMenuAttachData struct _GtkMenuPrivate { + gboolean seen_motion; + gboolean seen_enter; + gboolean have_position; gint x; gint y; @@ -1268,6 +1271,7 @@ gtk_menu_popup (GtkMenu *menu, GtkWidget *parent; GdkEvent *current_event; GtkMenuShell *menu_shell; + GtkMenuPrivate *priv = gtk_menu_get_private (menu); g_return_if_fail (GTK_IS_MENU (menu)); @@ -1275,6 +1279,9 @@ gtk_menu_popup (GtkMenu *menu, menu_shell = GTK_MENU_SHELL (menu); menu_shell->parent_menu_shell = parent_menu_shell; + + priv->seen_motion = FALSE; + priv->seen_enter = FALSE; /* Find the last viewable ancestor, and make an X grab on it */ @@ -2714,7 +2721,20 @@ gtk_menu_motion_notify (GtkWidget *widget, gboolean need_enter; if (GTK_IS_MENU (widget)) - gtk_menu_handle_scrolling (GTK_MENU (widget), TRUE); + { + GtkMenuPrivate *priv = gtk_menu_get_private (GTK_MENU (widget)); + + gtk_menu_handle_scrolling (GTK_MENU (widget), TRUE); + priv->seen_motion = TRUE; + if (priv->seen_enter) + { + /* After having seen both a motion event and an enter event, + * button releases should be interpreted to mean "activate" + */ + + GTK_MENU_SHELL (widget)->activate_time = 0; + } + } /* We received the event for one of two reasons: * @@ -2945,9 +2965,19 @@ gtk_menu_enter_notify (GtkWidget *widget, if (widget && GTK_IS_MENU (widget)) { GtkMenuShell *menu_shell = GTK_MENU_SHELL (widget); + GtkMenuPrivate *priv = gtk_menu_get_private (GTK_MENU (widget)); if (!menu_shell->ignore_enter) gtk_menu_handle_scrolling (GTK_MENU (widget), TRUE); + + priv->seen_enter = TRUE; + if (priv->seen_motion) + { + /* After having seen both a motion event and an enter event, + * button releases should be interpreted to mean "activate" + */ + menu_shell->activate_time = 0; + } } /* If this is a faked enter (see gtk_menu_motion_notify), 'widget' |