X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fframe.c;h=ab0d331a6aa9de68c8b2d11f51eec7278b16bfff;hb=459449c7e1d02d83c20d149c66e0329cd4d026ed;hp=d5d9b1223a8a63198d114c2c8ba6e58c5816665d;hpb=d0c1a24be990360e793b0e488cb7285bb024b32e;p=chaz%2Fopenbox diff --git a/openbox/frame.c b/openbox/frame.c index d5d9b122..ab0d331a 100644 --- a/openbox/frame.c +++ b/openbox/frame.c @@ -251,6 +251,7 @@ void frame_show(ObFrame *self) if (!self->visible) { self->visible = TRUE; XMapWindow(ob_display, self->client->window); + XMapWindow(ob_display, self->plate); XMapWindow(ob_display, self->window); } } @@ -261,6 +262,10 @@ void frame_hide(ObFrame *self) self->visible = FALSE; if (!frame_iconify_animating(self)) XUnmapWindow(ob_display, self->window); + /* unmap the plate along with the client. some people (libwnck) look + to see if it is unmapped when the client is iconified, for whatever + reason. so let's play along... */ + XUnmapWindow(ob_display, self->plate); /* we unmap the client itself so that we can get MapRequest events, and because the ICCCM tells us to! */ XUnmapWindow(ob_display, self->client->window); @@ -696,7 +701,7 @@ void frame_adjust_area(ObFrame *self, gboolean moved, self->client->area.height + self->size.top + self->size.bottom)); - if (moved || resized) { + if ((moved || resized) && !fake) { /* find the new coordinates, done after setting the frame.size, for frame_client_gravity. */ self->area.x = self->client->area.x; @@ -1207,7 +1212,7 @@ ObFrameContext frame_context(ObClient *client, Window win, gint x, gint y) is fully maximized, then treat it like they clicked in the button that is there */ if (self->max_horz && self->max_vert && - (win == self->title || + (win == self->title || win == self->titletop || win == self->titleleft || win == self->titletopleft || win == self->titleright || win == self->titletopright)) { @@ -1223,6 +1228,9 @@ ObFrameContext frame_context(ObClient *client, Window win, gint x, gint y) /* title is a border width in from the edge */ if (win == self->title) fx += self->bwidth; + /* titletop is a bit to the right */ + else if (win == self->titletop) + fx += ob_rr_theme->grip_width + self->bwidth; /* titletopright is way to the right edge */ else if (win == self->titletopright) fx += self->area.width - (ob_rr_theme->grip_width + self->bwidth); @@ -1249,6 +1257,10 @@ ObFrameContext frame_context(ObClient *client, Window win, gint x, gint y) return self->rightmost; } } + + /* there is no resizing maximized windows so make them the titlebar + context */ + return OB_FRAME_CONTEXT_TITLEBAR; } if (win == self->window) return OB_FRAME_CONTEXT_FRAME; @@ -1302,17 +1314,20 @@ void frame_client_gravity(ObFrame *self, gint *x, gint *y, gint w, gint h) case NorthGravity: case SouthGravity: case CenterGravity: - *x -= (self->size.left + w) / 2; + /* the middle of the client will be the middle of the frame */ + *x -= (self->size.right - self->size.left) / 2; break; case NorthEastGravity: case SouthEastGravity: case EastGravity: - *x -= (self->size.left + self->size.right + w) - 1; + /* the right side of the client will be the right side of the frame */ + *x -= self->size.right + self->size.left; break; case ForgetGravity: case StaticGravity: + /* the client's position won't move */ *x -= self->size.left; break; } @@ -1328,17 +1343,20 @@ void frame_client_gravity(ObFrame *self, gint *x, gint *y, gint w, gint h) case CenterGravity: case EastGravity: case WestGravity: - *y -= (self->size.top + h) / 2; + /* the middle of the client will be the middle of the frame */ + *y -= (self->size.bottom - self->size.top) / 2; break; case SouthWestGravity: case SouthEastGravity: case SouthGravity: - *y -= (self->size.top + self->size.bottom + h) - 1; + /* the bottom of the client will be the bottom of the frame */ + *y -= self->size.bottom + self->size.top; break; case ForgetGravity: case StaticGravity: + /* the client's position won't move */ *y -= self->size.top; break; } @@ -1356,16 +1374,19 @@ void frame_frame_gravity(ObFrame *self, gint *x, gint *y, gint w, gint h) case NorthGravity: case CenterGravity: case SouthGravity: - *x += (self->size.left + w) / 2; + /* the middle of the client will be the middle of the frame */ + *x += (self->size.right - self->size.left) / 2; break; case NorthEastGravity: case EastGravity: case SouthEastGravity: - *x += (self->size.left + self->size.right + w) - 1; + /* the right side of the client will be the right side of the frame */ + *x += self->size.right + self->size.left; break; case StaticGravity: case ForgetGravity: - *x += self->size.left; + /* the client's position won't move */ + *x -= self->size.left; break; } @@ -1379,15 +1400,18 @@ void frame_frame_gravity(ObFrame *self, gint *x, gint *y, gint w, gint h) case WestGravity: case CenterGravity: case EastGravity: - *y += (self->size.top + h) / 2; + /* the middle of the client will be the middle of the frame */ + *y += (self->size.bottom - self->size.top) / 2; break; case SouthWestGravity: case SouthGravity: case SouthEastGravity: - *y += (self->size.top + self->size.bottom + h) - 1; + /* the bottom of the client will be the bottom of the frame */ + *y += self->size.bottom + self->size.top; break; case StaticGravity: case ForgetGravity: + /* the client's position won't move */ *y += self->size.top; break; }