From: Tim Janik Date: Mon, 14 Dec 1998 01:35:33 +0000 (+0000) Subject: fixed submenu popup timeouts, we decide whether or not to delay the X-Git-Url: http://pileus.org/git/?a=commitdiff_plain;h=7ea8bb92a63ef9fe84a3882e9ace6171be43172d;p=~andy%2Fgtk fixed submenu popup timeouts, we decide whether or not to delay the Mon Dec 14 02:13:01 1998 Tim Janik * gtk/gtkmenuitem.c: fixed submenu popup timeouts, we decide whether or not to delay the submenu popup from a menu item deselection time stamp. the code looks even more hackish than before, but in practice "feels" very well. --- diff --git a/ChangeLog b/ChangeLog index 39052ae0c..0852cf9b8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Mon Dec 14 02:13:01 1998 Tim Janik + + * gtk/gtkmenuitem.c: fixed submenu popup timeouts, we decide whether or + not to delay the submenu popup from a menu item deselection time stamp. + the code looks even more hackish than before, but in practice "feels" + very well. + 1998-12-13 Federico Mena Quintero * gtk/gtkwidget.h (struct _GtkWidgetClass): Added a "grab_focus" diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 39052ae0c..0852cf9b8 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,10 @@ +Mon Dec 14 02:13:01 1998 Tim Janik + + * gtk/gtkmenuitem.c: fixed submenu popup timeouts, we decide whether or + not to delay the submenu popup from a menu item deselection time stamp. + the code looks even more hackish than before, but in practice "feels" + very well. + 1998-12-13 Federico Mena Quintero * gtk/gtkwidget.h (struct _GtkWidgetClass): Added a "grab_focus" diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 39052ae0c..0852cf9b8 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,10 @@ +Mon Dec 14 02:13:01 1998 Tim Janik + + * gtk/gtkmenuitem.c: fixed submenu popup timeouts, we decide whether or + not to delay the submenu popup from a menu item deselection time stamp. + the code looks even more hackish than before, but in practice "feels" + very well. + 1998-12-13 Federico Mena Quintero * gtk/gtkwidget.h (struct _GtkWidgetClass): Added a "grab_focus" diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 39052ae0c..0852cf9b8 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,10 @@ +Mon Dec 14 02:13:01 1998 Tim Janik + + * gtk/gtkmenuitem.c: fixed submenu popup timeouts, we decide whether or + not to delay the submenu popup from a menu item deselection time stamp. + the code looks even more hackish than before, but in practice "feels" + very well. + 1998-12-13 Federico Mena Quintero * gtk/gtkwidget.h (struct _GtkWidgetClass): Added a "grab_focus" diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 39052ae0c..0852cf9b8 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,10 @@ +Mon Dec 14 02:13:01 1998 Tim Janik + + * gtk/gtkmenuitem.c: fixed submenu popup timeouts, we decide whether or + not to delay the submenu popup from a menu item deselection time stamp. + the code looks even more hackish than before, but in practice "feels" + very well. + 1998-12-13 Federico Mena Quintero * gtk/gtkwidget.h (struct _GtkWidgetClass): Added a "grab_focus" diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 39052ae0c..0852cf9b8 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,10 @@ +Mon Dec 14 02:13:01 1998 Tim Janik + + * gtk/gtkmenuitem.c: fixed submenu popup timeouts, we decide whether or + not to delay the submenu popup from a menu item deselection time stamp. + the code looks even more hackish than before, but in practice "feels" + very well. + 1998-12-13 Federico Mena Quintero * gtk/gtkwidget.h (struct _GtkWidgetClass): Added a "grab_focus" diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 39052ae0c..0852cf9b8 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,10 @@ +Mon Dec 14 02:13:01 1998 Tim Janik + + * gtk/gtkmenuitem.c: fixed submenu popup timeouts, we decide whether or + not to delay the submenu popup from a menu item deselection time stamp. + the code looks even more hackish than before, but in practice "feels" + very well. + 1998-12-13 Federico Mena Quintero * gtk/gtkwidget.h (struct _GtkWidgetClass): Added a "grab_focus" diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c index 1b9765c9d..3f6e3462f 100644 --- a/gtk/gtkmenuitem.c +++ b/gtk/gtkmenuitem.c @@ -26,7 +26,7 @@ #define BORDER_SPACING 3 -#define SELECT_TIMEOUT 20 +#define SELECT_TIMEOUT 75 #define MENU_ITEM_CLASS(w) GTK_MENU_ITEM_CLASS (GTK_OBJECT (w)->klass) @@ -68,6 +68,8 @@ static void gtk_menu_item_forall (GtkContainer *container, static GtkItemClass *parent_class; static guint menu_item_signals[LAST_SIGNAL] = { 0 }; +static guint32 last_submenu_deselect_time = 0; + GtkType @@ -532,14 +534,19 @@ gtk_real_menu_item_select (GtkItem *item) /* if (menu_item->submenu && !GTK_WIDGET_VISIBLE (menu_item->submenu))*/ if (menu_item->submenu) { - /* Boy this is a hack! */ - GdkEvent *current_event = gtk_get_current_event(); - if (current_event && (current_event->type != GDK_ENTER_NOTIFY)) - gtk_menu_item_select_timeout (menu_item); + guint32 etime; + GdkEvent *event = gtk_get_current_event (); + + etime = event ? gdk_event_get_time (event) : GDK_CURRENT_TIME; + if (etime >= last_submenu_deselect_time && + last_submenu_deselect_time + SELECT_TIMEOUT > etime) + menu_item->timer = gtk_timeout_add (SELECT_TIMEOUT - (etime - last_submenu_deselect_time), + gtk_menu_item_select_timeout, + menu_item); else - menu_item->timer = gtk_timeout_add (SELECT_TIMEOUT, gtk_menu_item_select_timeout, menu_item); + gtk_menu_item_select_timeout (menu_item); } - + gtk_widget_set_state (GTK_WIDGET (menu_item), GTK_STATE_PRELIGHT); gtk_widget_draw (GTK_WIDGET (menu_item), NULL); } @@ -556,10 +563,20 @@ gtk_real_menu_item_deselect (GtkItem *item) if (menu_item->submenu) { + guint32 etime; + GdkEvent *event = gtk_get_current_event (); + if (menu_item->timer) - gtk_timeout_remove (menu_item->timer); + { + gtk_timeout_remove (menu_item->timer); + menu_item->timer = 0; + } else gtk_menu_popdown (GTK_MENU (menu_item->submenu)); + + etime = event ? gdk_event_get_time (event) : GDK_CURRENT_TIME; + if (etime > last_submenu_deselect_time) + last_submenu_deselect_time = etime; } gtk_widget_set_state (GTK_WIDGET (menu_item), GTK_STATE_NORMAL);