]> Dogcows Code - chaz/openbox/blobdiff - openbox/event.c
only do restack checks on windows that are visible
[chaz/openbox] / openbox / event.c
index 0799f3b38d150a0ea83aa424f2cad7a0f5f49ac1..ad146b4796edcae9eb85a432267c2dff07ccb83c 100644 (file)
@@ -531,7 +531,7 @@ static void event_process(const XEvent *ec, gpointer data)
                 */
 
                 if (!focus_left_screen)
-                    focus_fallback(TRUE, FALSE);
+                    focus_fallback(FALSE, FALSE);
             }
         }
         else if (!client)
@@ -823,6 +823,10 @@ static void event_handle_client(ObClient *client, XEvent *e)
         }
         break;
     case MotionNotify:
+        /* when there is a grab on the pointer, we won't get enter/leave
+           notifies, but we still get motion events */
+        if (grab_on_pointer()) break;
+
         con = frame_context(client, e->xmotion.window,
                             e->xmotion.x, e->xmotion.y);
         switch (con) {
@@ -1101,13 +1105,14 @@ static void event_handle_client(ObClient *client, XEvent *e)
            desktop. eg. open amarok window on desktop 1, switch to desktop
            2, click amarok tray icon. it will move by its decoration size.
         */
-        if (move && !resize &&
-            x != client->area.x &&
+        if (x != client->area.x &&
             x == (client->frame->area.x + client->frame->size.left -
                   (gint)client->border_width) &&
             y != client->area.y &&
             y == (client->frame->area.y + client->frame->size.top -
-                  (gint)client->border_width))
+                  (gint)client->border_width) &&
+            w == client->area.width &&
+            h == client->area.height)
         {
             ob_debug_type(OB_DEBUG_APP_BUGS,
                           "Application %s is trying to move via "
@@ -1508,7 +1513,9 @@ static void event_handle_dock(ObDock *s, XEvent *e)
         dock_hide(FALSE);
         break;
     case LeaveNotify:
-        dock_hide(TRUE);
+        /* don't hide when moving into a dock app */
+        if (e->xcrossing.detail != NotifyInferior)
+            dock_hide(TRUE);
         break;
     }
 }
@@ -1577,13 +1584,8 @@ static gboolean event_handle_menu_keyboard(XEvent *ev)
     if (frame == NULL)
         ret = FALSE;
 
-    else if (keycode == ob_keycode(OB_KEY_ESCAPE) && state == 0) {
-        /* Escape goes to the parent menu or closes the last one */
-        if (frame->parent)
-            menu_frame_select(frame, NULL, TRUE);
-        else
-            menu_frame_hide_all();
-    }
+    else if (keycode == ob_keycode(OB_KEY_ESCAPE) && state == 0)
+        menu_frame_hide_all();
 
     else if (keycode == ob_keycode(OB_KEY_RETURN) && (state == 0 ||
                                                       state == ControlMask))
This page took 0.021046 seconds and 4 git commands to generate.