X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fframe.c;h=b0f789aa2e67d5c5e026ff1c3b82b12f5fa77318;hb=20cb425fd31b86febacbc3e80fba94e88f0ef016;hp=09009e8271c37ec5d9a15470baef6951fde265ed;hpb=09f4483ce03ceb3830454f17d5610a2cb173057f;p=chaz%2Fopenbox diff --git a/openbox/frame.c b/openbox/frame.c index 09009e82..b0f789aa 100644 --- a/openbox/frame.c +++ b/openbox/frame.c @@ -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,8 +844,14 @@ 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 @@ -860,9 +868,6 @@ void frame_grab_client(ObFrame *self) req's) the ButtonPress is to catch clicks on the client border */ XSelectInput(ob_display, self->plate, PLATE_EVENTMASK); - /* map the client so it maps when the frame does */ - XMapWindow(ob_display, self->client->window); - /* set all the windows for the frame in the window_map */ g_hash_table_insert(window_map, &self->window, self->client); g_hash_table_insert(window_map, &self->plate, self->client); @@ -1338,13 +1343,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; } @@ -1367,13 +1373,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; } } @@ -1397,12 +1404,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; } @@ -1423,12 +1431,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; } }