Don't hog the user during the hideDelay
[dana/openbox.git] / openbox / event.c
index 46baa6d..8e0a6bb 100644 (file)
@@ -709,7 +709,7 @@ static void event_process(const XEvent *ec, gpointer data)
             /* ...or it if it was physically on an openbox
                internal window... */
             ((w = window_find(e->xbutton.subwindow)) &&
-             WINDOW_IS_INTERNAL(w)))
+             (WINDOW_IS_INTERNAL(w) || WINDOW_IS_DOCK(w))))
             /* ...then process the event, otherwise ignore it */
         {
             used = event_handle_user_input(client, e);
@@ -1712,12 +1712,6 @@ static void event_handle_client(ObClient *client, XEvent *e)
 static void event_handle_dock(ObDock *s, XEvent *e)
 {
     switch (e->type) {
-    case ButtonPress:
-        if (e->xbutton.button == 1)
-            stacking_raise(DOCK_AS_WINDOW(s));
-        else if (e->xbutton.button == 2)
-            stacking_lower(DOCK_AS_WINDOW(s));
-        break;
     case EnterNotify:
         dock_hide(FALSE);
         break;
@@ -1798,8 +1792,9 @@ static gboolean event_handle_menu_input(XEvent *ev)
     if (ev->type == ButtonRelease || ev->type == ButtonPress) {
         ObMenuEntryFrame *e;
 
-        if (menu_hide_delay_reached() &&
-            (ev->xbutton.button < 4 || ev->xbutton.button > 5))
+        if ((ev->xbutton.button < 4 || ev->xbutton.button > 5) &&
+            ((ev->type == ButtonRelease && menu_hide_delay_reached()) ||
+             ev->type == ButtonPress))
         {
             if ((e = menu_entry_frame_under(ev->xbutton.x_root,
                                             ev->xbutton.y_root)))
@@ -1810,7 +1805,7 @@ static gboolean event_handle_menu_input(XEvent *ev)
                 if (ev->type == ButtonRelease)
                     menu_entry_frame_execute(e, ev->xbutton.state);
             }
-            else if (ev->type == ButtonRelease)
+            else
                 menu_frame_hide_all();
         }
         ret = TRUE;
@@ -2079,7 +2074,6 @@ static gboolean focus_delay_func(gpointer data)
     if (client_focus(d->client) && config_focus_raise)
         stacking_raise(CLIENT_AS_WINDOW(d->client));
     event_curtime = old;
-    XFlush(obt_display);
     return FALSE; /* no repeat */
 }
 
@@ -2092,7 +2086,6 @@ static gboolean unfocus_delay_func(gpointer data)
     event_curserial = d->serial;
     focus_nothing();
     event_curtime = old;
-    XFlush(obt_display);
     return FALSE; /* no repeat */
 }