]> Dogcows Code - chaz/openbox/blobdiff - openbox/frame.c
fix the context given off by the borders in the br corner
[chaz/openbox] / openbox / frame.c
index cefa389e50b58d6362ccfb78020313d5cc88b929..b0666b27d8e0fb28d8472bd688b1bbf94bb5f02e 100644 (file)
@@ -130,6 +130,11 @@ ObFrame *frame_new(ObClient *client)
     self->innerright = createWindow(self->window, NULL, mask, &attrib);
     self->innerbottom = createWindow(self->window, NULL, mask, &attrib);
 
+    self->innerblb = createWindow(self->innerbottom, NULL, mask, &attrib);
+    self->innerbrb = createWindow(self->innerbottom, NULL, mask, &attrib);
+    self->innerbll = createWindow(self->innerleft, NULL, mask, &attrib);
+    self->innerbrr = createWindow(self->innerright, NULL, mask, &attrib);
+
     self->title = createWindow(self->window, NULL, mask, &attrib);
     self->titleleft = createWindow(self->window, NULL, mask, &attrib);
     self->titletop = createWindow(self->window, NULL, mask, &attrib);
@@ -372,10 +377,12 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
 
         STRUT_SET(self->size,
                   self->cbwidth_l + (!self->max_horz ? self->bwidth : 0),
-                  self->cbwidth_t + self->bwidth,
+                  self->cbwidth_t +
+                  (!self->max_horz || !self->max_vert ||
+                   !self->client->undecorated ? self->bwidth : 0),
                   self->cbwidth_r + (!self->max_horz ? self->bwidth : 0),
                   self->cbwidth_b +
-                    (!self->max_horz || !self->max_vert ? self->bwidth : 0));
+                  (!self->max_horz || !self->max_vert ? self->bwidth : 0));
 
         if (self->decorations & OB_FRAME_DECOR_TITLEBAR)
             self->size.top += ob_rr_theme->title_height + self->bwidth;
@@ -388,6 +395,9 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
         /* position/size and map/unmap all the windows */
 
         if (!fake) {
+            gint innercornerheight =
+                ob_rr_theme->grip_width - self->size.bottom;
+
             if (self->cbwidth_l) {
                 XMoveResizeWindow(ob_display, self->innerleft,
                                   self->size.left - self->cbwidth_l,
@@ -398,6 +408,19 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
             } else
                 XUnmapWindow(ob_display, self->innerleft);
 
+            if (self->cbwidth_l && innercornerheight > 0) {
+                XMoveResizeWindow(ob_display, self->innerbll,
+                                  0,
+                                  self->client->area.height - 
+                                  (ob_rr_theme->grip_width -
+                                   self->size.bottom),
+                                  self->cbwidth_l,
+                                  ob_rr_theme->grip_width - self->size.bottom);
+
+                XMapWindow(ob_display, self->innerbll);
+            } else
+                XUnmapWindow(ob_display, self->innerbll);
+
             if (self->cbwidth_r) {
                 XMoveResizeWindow(ob_display, self->innerright,
                                   self->size.left + self->client->area.width,
@@ -408,6 +431,19 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
             } else
                 XUnmapWindow(ob_display, self->innerright);
 
+            if (self->cbwidth_r && innercornerheight > 0) {
+                XMoveResizeWindow(ob_display, self->innerbrr,
+                                  0,
+                                  self->client->area.height - 
+                                  (ob_rr_theme->grip_width -
+                                   self->size.bottom),
+                                  self->cbwidth_r,
+                                  ob_rr_theme->grip_width - self->size.bottom);
+
+                XMapWindow(ob_display, self->innerbrr);
+            } else
+                XUnmapWindow(ob_display, self->innerbrr);
+
             if (self->cbwidth_t) {
                 XMoveResizeWindow(ob_display, self->innertop,
                                   self->size.left - self->cbwidth_l,
@@ -428,9 +464,26 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
                                   self->cbwidth_l + self->cbwidth_r,
                                   self->cbwidth_b);
 
+                XMoveResizeWindow(ob_display, self->innerblb,
+                                  0, 0,
+                                  ob_rr_theme->grip_width + self->bwidth,
+                                  self->cbwidth_b);
+                XMoveResizeWindow(ob_display, self->innerbrb,
+                                  self->client->area.width +
+                                  self->cbwidth_l + self->cbwidth_r -
+                                  (ob_rr_theme->grip_width + self->bwidth),
+                                  0,
+                                  ob_rr_theme->grip_width + self->bwidth,
+                                  self->cbwidth_b);
+
                 XMapWindow(ob_display, self->innerbottom);
-            } else
+                XMapWindow(ob_display, self->innerblb);
+                XMapWindow(ob_display, self->innerbrb);
+            } else {
                 XUnmapWindow(ob_display, self->innerbottom);
+                XUnmapWindow(ob_display, self->innerblb);
+                XUnmapWindow(ob_display, self->innerbrb);
+            }
 
             if (self->bwidth) {
                 gint titlesides;
@@ -598,7 +651,7 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
                                   self->bwidth);
                 XMoveResizeWindow(ob_display, self->rgripbottom,
                                   self->size.left + self->client->area.width +
-                                  self->size.right - self->bwidth - sidebwidth -
+                                  self->size.right - self->bwidth - sidebwidth-
                                   ob_rr_theme->grip_width,
                                   self->size.top + self->client->area.height +
                                   self->size.bottom - self->bwidth,
@@ -876,12 +929,16 @@ static void frame_adjust_cursors(ObFrame *self)
         XChangeWindowAttributes(ob_display, self->lgripleft, CWCursor, &a);
         XChangeWindowAttributes(ob_display, self->lgriptop, CWCursor, &a);
         XChangeWindowAttributes(ob_display, self->lgripbottom, CWCursor, &a);
+        XChangeWindowAttributes(ob_display, self->innerbll, CWCursor, &a);
+        XChangeWindowAttributes(ob_display, self->innerblb, CWCursor, &a);
         a.cursor = ob_cursor(r ? OB_CURSOR_SOUTHEAST : OB_CURSOR_NONE);
         XChangeWindowAttributes(ob_display, self->rgrip, CWCursor, &a);
         XChangeWindowAttributes(ob_display, self->handleright, CWCursor, &a);
         XChangeWindowAttributes(ob_display, self->rgripright, CWCursor, &a);
         XChangeWindowAttributes(ob_display, self->rgriptop, CWCursor, &a);
         XChangeWindowAttributes(ob_display, self->rgripbottom, CWCursor, &a);
+        XChangeWindowAttributes(ob_display, self->innerbrr, CWCursor, &a);
+        XChangeWindowAttributes(ob_display, self->innerbrb, CWCursor, &a);
     }
 }
 
@@ -1381,9 +1438,9 @@ ObFrameContext frame_context(ObClient *client, Window win, gint x, gint y)
     if (win == self->lgripbottom)       return OB_FRAME_CONTEXT_BLCORNER;
     if (win == self->handleright)       return OB_FRAME_CONTEXT_BRCORNER;
     if (win == self->rgrip)             return OB_FRAME_CONTEXT_BRCORNER;
-    if (win == self->rgripright)        return OB_FRAME_CONTEXT_BLCORNER;
-    if (win == self->rgriptop)          return OB_FRAME_CONTEXT_BLCORNER;
-    if (win == self->rgripbottom)       return OB_FRAME_CONTEXT_BLCORNER;
+    if (win == self->rgripright)        return OB_FRAME_CONTEXT_BRCORNER;
+    if (win == self->rgriptop)          return OB_FRAME_CONTEXT_BRCORNER;
+    if (win == self->rgripbottom)       return OB_FRAME_CONTEXT_BRCORNER;
     if (win == self->title)             return OB_FRAME_CONTEXT_TITLEBAR;
     if (win == self->titlebottom)       return OB_FRAME_CONTEXT_TITLEBAR;
     if (win == self->titleleft)         return OB_FRAME_CONTEXT_TLCORNER;
@@ -1539,6 +1596,13 @@ void frame_rect_to_frame(ObFrame *self, Rect *r)
     frame_client_gravity(self, &r->x, &r->y);
 }
 
+void frame_rect_to_client(ObFrame *self, Rect *r)
+{
+    r->width -= self->size.left + self->size.right;
+    r->height -= self->size.top + self->size.bottom;
+    frame_frame_gravity(self, &r->x, &r->y);
+}
+
 static void flash_done(gpointer data)
 {
     ObFrame *self = data;
This page took 0.02889 seconds and 4 git commands to generate.