]> Dogcows Code - chaz/openbox/blobdiff - openbox/frame.c
only hilight the first entry when opening the menu with a keybind
[chaz/openbox] / openbox / frame.c
index e04c7302bdd66d7c6feaf5c6925f433a1bff205e..e5b4cdebbb568249a5010a05d90c478f14cd7e0e 100644 (file)
@@ -695,7 +695,9 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
                         self->cbwidth_y);
 
             /* when the client has StaticGravity, it likes to move around. */
-            XMoveWindow(ob_display, self->client->window, 0, 0);
+            XMoveWindow(ob_display, self->client->window,
+                        -self->client->border_width,
+                        -self->client->border_width);
         }
     }
 
@@ -842,19 +844,23 @@ void frame_adjust_icon(ObFrame *self)
 
 void frame_grab_client(ObFrame *self)
 {
+    /* DO NOT map the client window here. we used to do that, but it is bogus.
+       we need to set up the client's dimensions and everything before we
+       send a mapnotify or we create race conditions.
+    */
+
     /* reparent the client to the frame */
-    XReparentWindow(ob_display, self->client->window, self->plate, 0, 0);
+    XReparentWindow(ob_display, self->client->window, self->plate,
+                    -self->client->border_width, -self->client->border_width);
 
     /*
       When reparenting the client window, it is usually not mapped yet, since
       this occurs from a MapRequest. However, in the case where Openbox is
-      starting up, the window is already mapped, so we'll see unmap events for
-      it. There are 2 unmap events generated that we see, one with the 'event'
-      member set the root window, and one set to the client, but both get
-      handled and need to be ignored.
+      starting up, the window is already mapped, so we'll see an unmap event
+      for it.
     */
     if (ob_state() == OB_STATE_STARTING)
-        self->client->ignore_unmaps += 2;
+        ++self->client->ignore_unmaps;
 
     /* select the event mask on the client's parent (to receive config/map
        req's) the ButtonPress is to catch clicks on the client border */
@@ -1335,13 +1341,14 @@ void frame_client_gravity(ObFrame *self, gint *x, gint *y, gint w, gint h)
     case SouthEastGravity:
     case EastGravity:
         /* the right side of the client will be the right side of the frame */
-        *x -= self->size.right + self->size.left;
+        *x -= self->size.right + self->size.left -
+            self->client->border_width * 2;
         break;
 
     case ForgetGravity:
     case StaticGravity:
         /* the client's position won't move */
-        *x -= self->size.left;
+        *x -= self->size.left - self->client->border_width;
         break;
     }
 
@@ -1364,13 +1371,14 @@ void frame_client_gravity(ObFrame *self, gint *x, gint *y, gint w, gint h)
     case SouthEastGravity:
     case SouthGravity:
         /* the bottom of the client will be the bottom of the frame */
-        *y -= self->size.bottom + self->size.top;
+        *y -= self->size.bottom + self->size.top -
+            self->client->border_width * 2;
         break;
 
     case ForgetGravity:
     case StaticGravity:
         /* the client's position won't move */
-        *y -= self->size.top;
+        *y -= self->size.top - self->client->border_width;
         break;
     }
 }
@@ -1394,12 +1402,13 @@ void frame_frame_gravity(ObFrame *self, gint *x, gint *y, gint w, gint h)
     case EastGravity:
     case SouthEastGravity:
         /* the right side of the client will be the right side of the frame */
-        *x += self->size.right + self->size.left;
+        *x += self->size.right + self->size.left -
+            self->client->border_width * 2;
         break;
     case StaticGravity:
     case ForgetGravity:
         /* the client's position won't move */
-        *x += self->size.left;
+        *x += self->size.left - self->client->border_width;
         break;
     }
 
@@ -1420,12 +1429,13 @@ void frame_frame_gravity(ObFrame *self, gint *x, gint *y, gint w, gint h)
     case SouthGravity:
     case SouthEastGravity:
         /* the bottom of the client will be the bottom of the frame */
-        *y += self->size.bottom + self->size.top;
+        *y += self->size.bottom + self->size.top -
+            self->client->border_width * 2;
         break;
     case StaticGravity:
     case ForgetGravity:
         /* the client's position won't move */
-        *y += self->size.top;
+        *y += self->size.top - self->client->border_width;
         break;
     }
 }
This page took 0.026772 seconds and 4 git commands to generate.