]> Dogcows Code - chaz/openbox/blobdiff - openbox/event.c
add a big comment about more menus
[chaz/openbox] / openbox / event.c
index 2ea7d30442a688f7bde0a2897169f5f2fbef6749..f5da603b0b9989f19bc1bd3a68a7159ebc7614bb 100644 (file)
@@ -1009,26 +1009,30 @@ static void event_handle_client(ObClient *client, XEvent *e)
            also you can't compress stacking events
         */
 
-        gint x, y, w, h, b;
+        gint x, y, w, h;
         gboolean move = FALSE;
         gboolean resize = FALSE;
-        gboolean border = FALSE;
 
         /* get the current area */
         RECT_TO_DIMS(client->area, x, y, w, h);
-        b = client->border_width;
 
         ob_debug("ConfigureRequest for \"%s\" desktop %d wmstate %d "
                  "visibile %d\n"
                  "                     x %d y %d w %d h %d b %d\n",
                  client->title,
                  screen_desktop, client->wmstate, client->frame->visible,
-                 x, y, w, h, b);
+                 x, y, w, h, client->border_width);
 
         if (e->xconfigurerequest.value_mask & CWBorderWidth)
             if (client->border_width != e->xconfigurerequest.border_width) {
-                b = e->xconfigurerequest.border_width;
-                border = TRUE;
+                client->border_width = e->xconfigurerequest.border_width;
+
+                /* if the border width is changing then that is the same
+                   as requesting a resize, but we don't actually change
+                   the client's border, so it will change their root
+                   coordiantes (since they include the border width) and
+                   we need to a notify then */
+                move = TRUE;
             }
 
 
@@ -1097,13 +1101,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 "
@@ -1118,35 +1123,31 @@ static void event_handle_client(ObClient *client, XEvent *e)
                notify is sent or not */
         }
 
-        if (move || resize || border) {
+        if (move || resize) {
             gint lw,lh;
 
-            if (move || resize) {
-                client_try_configure(client, &x, &y, &w, &h, &lw, &lh, FALSE);
+            client_try_configure(client, &x, &y, &w, &h, &lw, &lh, FALSE);
 
-                /* if x was not given, then use gravity to figure out the new
-                   x.  the reference point should not be moved */
-                if ((e->xconfigurerequest.value_mask & CWWidth &&
-                     !(e->xconfigurerequest.value_mask & CWX)))
-                    client_gravity_resize_w(client, &x, client->area.width, w);
-                /* if y was not given, then use gravity to figure out the new
-                   y.  the reference point should not be moved */
-                if ((e->xconfigurerequest.value_mask & CWHeight &&
-                     !(e->xconfigurerequest.value_mask & CWY)))
-                    client_gravity_resize_h(client, &y, client->area.height,h);
+            /* if x was not given, then use gravity to figure out the new
+               x.  the reference point should not be moved */
+            if ((e->xconfigurerequest.value_mask & CWWidth &&
+                 !(e->xconfigurerequest.value_mask & CWX)))
+                client_gravity_resize_w(client, &x, client->area.width, w);
+            /* if y was not given, then use gravity to figure out the new
+               y.  the reference point should not be moved */
+            if ((e->xconfigurerequest.value_mask & CWHeight &&
+                 !(e->xconfigurerequest.value_mask & CWY)))
+                client_gravity_resize_h(client, &y, client->area.height,h);
+
+            client_find_onscreen(client, &x, &y, w, h, FALSE);
 
-                client_find_onscreen(client, &x, &y, w, h, FALSE);
-            }
             /* if they requested something that moves the window, or if
                the window is actually being changed then configure it and
                send a configure notify to them */
-            if (move || !RECT_EQUAL_DIMS(client->area, x, y, w, h) ||
-                border)
-            {
-                ob_debug("Granting ConfigureRequest x %d y %d w %d h %d "
-                         "b %d\n",
-                         x, y, w, h, b);
-                client_configure(client, x, y, w, h, b, FALSE, TRUE);
+            if (move || !RECT_EQUAL_DIMS(client->area, x, y, w, h)) {
+                ob_debug("Granting ConfigureRequest x %d y %d w %d h %d\n",
+                         x, y, w, h);
+                client_configure(client, x, y, w, h, FALSE, TRUE);
             }
 
             /* ignore enter events caused by these like ob actions do */
@@ -1351,8 +1352,7 @@ static void event_handle_client(ObClient *client, XEvent *e)
 
             client_find_onscreen(client, &x, &y, w, h, FALSE);
 
-            client_configure(client, x, y, w, h, client->border_width,
-                             FALSE, TRUE);
+            client_configure(client, x, y, w, h, FALSE, TRUE);
 
             client->gravity = ograv;
 
@@ -1509,7 +1509,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;
     }
 }
This page took 0.023965 seconds and 4 git commands to generate.