]> Pileus Git - ~andy/gtk/commitdiff
fixed submenu popup timeouts, we decide whether or not to delay the
authorTim Janik <timj@gtk.org>
Mon, 14 Dec 1998 01:35:33 +0000 (01:35 +0000)
committerTim Janik <timj@src.gnome.org>
Mon, 14 Dec 1998 01:35:33 +0000 (01:35 +0000)
Mon Dec 14 02:13:01 1998  Tim Janik  <timj@gtk.org>

        * 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.

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkmenuitem.c

index 39052ae0c01a0c7c6ff3cf49739bc0a1950a9622..0852cf9b8ff912db9031a9af2b6e783b8286d059 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Mon Dec 14 02:13:01 1998  Tim Janik  <timj@gtk.org>
+
+       * 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  <federico@nuclecu.unam.mx>
 
        * gtk/gtkwidget.h (struct _GtkWidgetClass): Added a "grab_focus"
index 39052ae0c01a0c7c6ff3cf49739bc0a1950a9622..0852cf9b8ff912db9031a9af2b6e783b8286d059 100644 (file)
@@ -1,3 +1,10 @@
+Mon Dec 14 02:13:01 1998  Tim Janik  <timj@gtk.org>
+
+       * 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  <federico@nuclecu.unam.mx>
 
        * gtk/gtkwidget.h (struct _GtkWidgetClass): Added a "grab_focus"
index 39052ae0c01a0c7c6ff3cf49739bc0a1950a9622..0852cf9b8ff912db9031a9af2b6e783b8286d059 100644 (file)
@@ -1,3 +1,10 @@
+Mon Dec 14 02:13:01 1998  Tim Janik  <timj@gtk.org>
+
+       * 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  <federico@nuclecu.unam.mx>
 
        * gtk/gtkwidget.h (struct _GtkWidgetClass): Added a "grab_focus"
index 39052ae0c01a0c7c6ff3cf49739bc0a1950a9622..0852cf9b8ff912db9031a9af2b6e783b8286d059 100644 (file)
@@ -1,3 +1,10 @@
+Mon Dec 14 02:13:01 1998  Tim Janik  <timj@gtk.org>
+
+       * 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  <federico@nuclecu.unam.mx>
 
        * gtk/gtkwidget.h (struct _GtkWidgetClass): Added a "grab_focus"
index 39052ae0c01a0c7c6ff3cf49739bc0a1950a9622..0852cf9b8ff912db9031a9af2b6e783b8286d059 100644 (file)
@@ -1,3 +1,10 @@
+Mon Dec 14 02:13:01 1998  Tim Janik  <timj@gtk.org>
+
+       * 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  <federico@nuclecu.unam.mx>
 
        * gtk/gtkwidget.h (struct _GtkWidgetClass): Added a "grab_focus"
index 39052ae0c01a0c7c6ff3cf49739bc0a1950a9622..0852cf9b8ff912db9031a9af2b6e783b8286d059 100644 (file)
@@ -1,3 +1,10 @@
+Mon Dec 14 02:13:01 1998  Tim Janik  <timj@gtk.org>
+
+       * 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  <federico@nuclecu.unam.mx>
 
        * gtk/gtkwidget.h (struct _GtkWidgetClass): Added a "grab_focus"
index 39052ae0c01a0c7c6ff3cf49739bc0a1950a9622..0852cf9b8ff912db9031a9af2b6e783b8286d059 100644 (file)
@@ -1,3 +1,10 @@
+Mon Dec 14 02:13:01 1998  Tim Janik  <timj@gtk.org>
+
+       * 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  <federico@nuclecu.unam.mx>
 
        * gtk/gtkwidget.h (struct _GtkWidgetClass): Added a "grab_focus"
index 1b9765c9dd8ff7ad1309123991561c007ef8da21..3f6e3462fba92bd5987b121c8d1fbb4a5436f082 100644 (file)
@@ -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);