all repos — openbox @ 1b7c2dac9ed1f77e1b89c8c99e605a5c7d986f2c

openbox fork - make it a bit more like ryudo

draw the handle without borders
Dana Jansens danakj@orodu.net
commit

1b7c2dac9ed1f77e1b89c8c99e605a5c7d986f2c

parent

0353b979c66bc07432296d80acc61b6bbef5f623

3 files changed, 255 insertions(+), 81 deletions(-)

jump to
M openbox/frame.copenbox/frame.c

@@ -144,8 +144,8 @@ self->tllresize = createWindow(self->title, NULL, mask, &attrib);

self->trtresize = createWindow(self->title, NULL, mask, &attrib); self->trrresize = createWindow(self->title, NULL, mask, &attrib); - self->leftresize = createWindow(self->window, NULL, mask, &attrib); - self->rightresize = createWindow(self->window, NULL, mask, &attrib); + self->left = createWindow(self->window, NULL, mask, &attrib); + self->right = createWindow(self->window, NULL, mask, &attrib); self->label = createWindow(self->title, NULL, mask, &attrib); self->max = createWindow(self->title, NULL, mask, &attrib);

@@ -159,13 +159,23 @@ self->handle = createWindow(self->window, NULL, mask, &attrib);

self->lgrip = createWindow(self->handle, NULL, mask, &attrib); self->rgrip = createWindow(self->handle, NULL, mask, &attrib); + self->handleleft = createWindow(self->handle, NULL, mask, &attrib); + self->handleright = createWindow(self->handle, NULL, mask, &attrib); + + self->handletop = createWindow(self->window, NULL, mask, &attrib); + self->handlebottom = createWindow(self->window, NULL, mask, &attrib); + self->lgripleft = createWindow(self->window, NULL, mask, &attrib); + self->lgriptop = createWindow(self->window, NULL, mask, &attrib); + self->lgripbottom = createWindow(self->window, NULL, mask, &attrib); + self->rgripright = createWindow(self->window, NULL, mask, &attrib); + self->rgriptop = createWindow(self->window, NULL, mask, &attrib); + self->rgripbottom = createWindow(self->window, NULL, mask, &attrib); + self->focused = FALSE; /* the other stuff is shown based on decor settings */ XMapWindow(ob_display, self->plate); XMapWindow(ob_display, self->inner); - XMapWindow(ob_display, self->lgrip); - XMapWindow(ob_display, self->rgrip); XMapWindow(ob_display, self->label); self->max_press = self->close_press = self->desk_press =

@@ -182,12 +192,6 @@ static void set_theme_statics(ObFrame *self)

{ gint handle_height; - if (ob_rr_theme->handle_height > 0) - handle_height = ob_rr_theme->handle_height; - else - handle_height = 1; - - /* set colors/appearance/sizes for stuff that doesn't change */ XResizeWindow(ob_display, self->max, ob_rr_theme->button_size, ob_rr_theme->button_size);

@@ -201,10 +205,6 @@ XResizeWindow(ob_display, self->desk,

ob_rr_theme->button_size, ob_rr_theme->button_size); XResizeWindow(ob_display, self->shade, ob_rr_theme->button_size, ob_rr_theme->button_size); - XResizeWindow(ob_display, self->lgrip, - ob_rr_theme->grip_width, handle_height); - XResizeWindow(ob_display, self->rgrip, - ob_rr_theme->grip_width, handle_height); XResizeWindow(ob_display, self->tltresize, ob_rr_theme->grip_width, ob_rr_theme->paddingy + 1); XResizeWindow(ob_display, self->trtresize,

@@ -353,13 +353,6 @@ self->cbwidth_y + self->bwidth,

self->cbwidth_x + self->bwidth, self->cbwidth_y + self->bwidth); - /* set border widths */ - if (!fake) { - XSetWindowBorderWidth(ob_display, self->handle, self->bwidth); - XSetWindowBorderWidth(ob_display, self->lgrip, self->bwidth); - XSetWindowBorderWidth(ob_display, self->rgrip, self->bwidth); - } - if (self->decorations & OB_FRAME_DECOR_TITLEBAR) self->size.top += ob_rr_theme->title_height + self->bwidth + (self->bwidth - self->bwidth);

@@ -468,26 +461,135 @@ /* layout the title bar elements */

layout_title(self); if (!fake) { - if (self->decorations & OB_FRAME_DECOR_HANDLE) - { - gint handle_height; + if (self->bwidth) { + XMoveResizeWindow(ob_display, self->handlebottom, + ob_rr_theme->grip_width + + self->bwidth * 2, + self->size.top + self->client->area.height + + self->size.bottom - self->bwidth, + self->width - (ob_rr_theme->grip_width + + self->bwidth) * 2, + self->bwidth); - if (ob_rr_theme->handle_height > 0) - handle_height = ob_rr_theme->handle_height; - else - handle_height = 1; + XMoveResizeWindow(ob_display, self->lgripleft, + 0, + self->size.top + self->client->area.height + + self->size.bottom - + ob_rr_theme->grip_width, + self->bwidth, + ob_rr_theme->grip_width); + XMoveResizeWindow(ob_display, self->rgripright, + self->size.left + self->client->area.width + + self->size.right - self->bwidth, + self->size.top + self->client->area.height + + self->size.bottom - + ob_rr_theme->grip_width, + self->bwidth, + ob_rr_theme->grip_width); + XMoveResizeWindow(ob_display, self->lgripbottom, + self->bwidth, + self->size.top + self->client->area.height + + self->size.bottom - self->bwidth, + ob_rr_theme->grip_width + self->bwidth, + self->bwidth); + XMoveResizeWindow(ob_display, self->rgripbottom, + self->size.left + self->client->area.width + + self->size.right - self->bwidth * 2 - + ob_rr_theme->grip_width, + self->size.top + self->client->area.height + + self->size.bottom - self->bwidth, + ob_rr_theme->grip_width + self->bwidth, + self->bwidth); + + XMapWindow(ob_display, self->handlebottom); + XMapWindow(ob_display, self->lgripleft); + XMapWindow(ob_display, self->rgripright); + XMapWindow(ob_display, self->lgripbottom); + XMapWindow(ob_display, self->rgripbottom); + + if (self->decorations & OB_FRAME_DECOR_HANDLE && + ob_rr_theme->handle_height > 0) + { + XMoveResizeWindow(ob_display, self->handletop, + ob_rr_theme->grip_width + + self->bwidth * 2, + FRAME_HANDLE_Y(self), + self->width - (ob_rr_theme->grip_width + + self->bwidth) * 2, + self->bwidth); + XMapWindow(ob_display, self->handletop); + + if (self->decorations & OB_FRAME_DECOR_GRIPS) { + XMoveResizeWindow(ob_display, self->handleleft, + ob_rr_theme->grip_width, + 0, + self->bwidth, + ob_rr_theme->handle_height); + XMoveResizeWindow(ob_display, self->handleright, + self->width - + ob_rr_theme->grip_width - + self->bwidth, + 0, + self->bwidth, + ob_rr_theme->handle_height); + + XMoveResizeWindow(ob_display, self->lgriptop, + self->bwidth, + FRAME_HANDLE_Y(self), + ob_rr_theme->grip_width + + self->bwidth, + self->bwidth); + XMoveResizeWindow(ob_display, self->rgriptop, + self->size.left + + self->client->area.width + + self->size.right - self->bwidth * 2 - + ob_rr_theme->grip_width, + FRAME_HANDLE_Y(self), + ob_rr_theme->grip_width + + self->bwidth, + self->bwidth); + + XMapWindow(ob_display, self->handleleft); + XMapWindow(ob_display, self->handleright); + XMapWindow(ob_display, self->lgriptop); + XMapWindow(ob_display, self->rgriptop); + } else { + XUnmapWindow(ob_display, self->handleleft); + XUnmapWindow(ob_display, self->handleright); + XUnmapWindow(ob_display, self->lgriptop); + XUnmapWindow(ob_display, self->rgriptop); + } + } else + XUnmapWindow(ob_display, self->handletop); + } else { + XUnmapWindow(ob_display, self->handlebottom); + XUnmapWindow(ob_display, self->lgripleft); + XUnmapWindow(ob_display, self->rgripright); + XUnmapWindow(ob_display, self->lgripbottom); + XUnmapWindow(ob_display, self->rgripbottom); + } + + if (self->decorations & OB_FRAME_DECOR_HANDLE && + ob_rr_theme->handle_height > 0) + { XMoveResizeWindow(ob_display, self->handle, - 0, FRAME_HANDLE_Y(self), - self->width, handle_height); + self->bwidth, + FRAME_HANDLE_Y(self) + self->bwidth, + self->width, ob_rr_theme->handle_height); XMapWindow(ob_display, self->handle); if (self->decorations & OB_FRAME_DECOR_GRIPS) { - XMoveWindow(ob_display, self->lgrip, - -self->bwidth, -self->bwidth); - XMoveWindow(ob_display, self->rgrip, - -self->bwidth + self->width - - ob_rr_theme->grip_width, -self->bwidth); + XMoveResizeWindow(ob_display, self->lgrip, + 0, 0, + ob_rr_theme->grip_width, + ob_rr_theme->handle_height); + XMoveResizeWindow(ob_display, self->rgrip, + self->width - ob_rr_theme->grip_width, + 0, + ob_rr_theme->grip_width, + ob_rr_theme->handle_height); + XMapWindow(ob_display, self->lgrip); XMapWindow(ob_display, self->rgrip); } else {

@@ -498,25 +600,27 @@ } else

XUnmapWindow(ob_display, self->handle); if (self->bwidth && !self->max_horz) { - XMoveResizeWindow(ob_display, self->leftresize, + XMoveResizeWindow(ob_display, self->left, 0, self->bwidth + ob_rr_theme->grip_width, self->bwidth, self->client->area.height + - self->cbwidth_y * 2); - XMoveResizeWindow(ob_display, self->rightresize, + self->size.top + self->size.bottom - + ob_rr_theme->grip_width * 2); + XMoveResizeWindow(ob_display, self->right, self->client->area.width + self->cbwidth_x * 2 + self->bwidth, self->bwidth + ob_rr_theme->grip_width, self->bwidth, self->client->area.height + - self->cbwidth_y * 2); + self->size.top + self->size.bottom - + ob_rr_theme->grip_width * 2); - XMapWindow(ob_display, self->leftresize); - XMapWindow(ob_display, self->rightresize); + XMapWindow(ob_display, self->left); + XMapWindow(ob_display, self->right); } else { - XUnmapWindow(ob_display, self->leftresize); - XUnmapWindow(ob_display, self->rightresize); + XUnmapWindow(ob_display, self->left); + XUnmapWindow(ob_display, self->right); } /* move and resize the inner border window which contains the plate

@@ -619,15 +723,25 @@ XChangeWindowAttributes(ob_display, self->trrresize, CWCursor, &a);

XChangeWindowAttributes(ob_display, self->titletopright, CWCursor, &a); XChangeWindowAttributes(ob_display, self->titleright, CWCursor, &a); a.cursor = ob_cursor(r ? OB_CURSOR_WEST : OB_CURSOR_NONE); - XChangeWindowAttributes(ob_display, self->leftresize, CWCursor, &a); + XChangeWindowAttributes(ob_display, self->left, CWCursor, &a); a.cursor = ob_cursor(r ? OB_CURSOR_EAST : OB_CURSOR_NONE); - XChangeWindowAttributes(ob_display, self->rightresize, CWCursor, &a); + XChangeWindowAttributes(ob_display, self->right, CWCursor, &a); a.cursor = ob_cursor(r ? OB_CURSOR_SOUTH : OB_CURSOR_NONE); XChangeWindowAttributes(ob_display, self->handle, CWCursor, &a); + XChangeWindowAttributes(ob_display, self->handletop, CWCursor, &a); + XChangeWindowAttributes(ob_display, self->handlebottom, CWCursor, &a); a.cursor = ob_cursor(r ? OB_CURSOR_SOUTHWEST : OB_CURSOR_NONE); XChangeWindowAttributes(ob_display, self->lgrip, CWCursor, &a); + XChangeWindowAttributes(ob_display, self->handleleft, CWCursor, &a); + XChangeWindowAttributes(ob_display, self->lgripleft, CWCursor, &a); + XChangeWindowAttributes(ob_display, self->lgriptop, CWCursor, &a); + XChangeWindowAttributes(ob_display, self->lgripbottom, 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); self->functions = self->client->functions; }

@@ -705,14 +819,24 @@ g_hash_table_insert(window_map, &self->tltresize, self->client);

g_hash_table_insert(window_map, &self->tllresize, self->client); g_hash_table_insert(window_map, &self->trtresize, self->client); g_hash_table_insert(window_map, &self->trrresize, self->client); - g_hash_table_insert(window_map, &self->leftresize, self->client); - g_hash_table_insert(window_map, &self->rightresize, self->client); + g_hash_table_insert(window_map, &self->left, self->client); + g_hash_table_insert(window_map, &self->right, self->client); g_hash_table_insert(window_map, &self->titleleft, self->client); g_hash_table_insert(window_map, &self->titletop, self->client); g_hash_table_insert(window_map, &self->titletopleft, self->client); g_hash_table_insert(window_map, &self->titletopright, self->client); g_hash_table_insert(window_map, &self->titleright, self->client); g_hash_table_insert(window_map, &self->titlebottom, self->client); + g_hash_table_insert(window_map, &self->handleleft, self->client); + g_hash_table_insert(window_map, &self->handletop, self->client); + g_hash_table_insert(window_map, &self->handleright, self->client); + g_hash_table_insert(window_map, &self->handlebottom, self->client); + g_hash_table_insert(window_map, &self->lgripleft, self->client); + g_hash_table_insert(window_map, &self->lgriptop, self->client); + g_hash_table_insert(window_map, &self->lgripbottom, self->client); + g_hash_table_insert(window_map, &self->rgripright, self->client); + g_hash_table_insert(window_map, &self->rgriptop, self->client); + g_hash_table_insert(window_map, &self->rgripbottom, self->client); } void frame_release_client(ObFrame *self)

@@ -771,14 +895,24 @@ g_hash_table_remove(window_map, &self->tltresize);

g_hash_table_remove(window_map, &self->tllresize); g_hash_table_remove(window_map, &self->trtresize); g_hash_table_remove(window_map, &self->trrresize); - g_hash_table_remove(window_map, &self->leftresize); - g_hash_table_remove(window_map, &self->rightresize); + g_hash_table_remove(window_map, &self->left); + g_hash_table_remove(window_map, &self->right); g_hash_table_remove(window_map, &self->titleleft); g_hash_table_remove(window_map, &self->titletop); g_hash_table_remove(window_map, &self->titletopleft); g_hash_table_remove(window_map, &self->titletopright); g_hash_table_remove(window_map, &self->titleright); g_hash_table_remove(window_map, &self->titlebottom); + g_hash_table_remove(window_map, &self->handleleft); + g_hash_table_remove(window_map, &self->handletop); + g_hash_table_remove(window_map, &self->handleright); + g_hash_table_remove(window_map, &self->handlebottom); + g_hash_table_remove(window_map, &self->lgripleft); + g_hash_table_remove(window_map, &self->lgriptop); + g_hash_table_remove(window_map, &self->lgripbottom); + g_hash_table_remove(window_map, &self->rgripright); + g_hash_table_remove(window_map, &self->rgriptop); + g_hash_table_remove(window_map, &self->rgripbottom); ob_main_loop_timeout_remove_data(ob_main_loop, flash_timeout, self, TRUE); }

@@ -1045,29 +1179,39 @@ }

return OB_FRAME_CONTEXT_TITLEBAR; } - if (win == self->window) return OB_FRAME_CONTEXT_FRAME; - if (win == self->label) return OB_FRAME_CONTEXT_TITLEBAR; - if (win == self->handle) return OB_FRAME_CONTEXT_BOTTOM; - if (win == self->lgrip) return OB_FRAME_CONTEXT_BLCORNER; - if (win == self->rgrip) return OB_FRAME_CONTEXT_BRCORNER; - if (win == self->titletop) return OB_FRAME_CONTEXT_TOP; - if (win == self->topresize) return OB_FRAME_CONTEXT_TOP; - if (win == self->tltresize) return OB_FRAME_CONTEXT_TLCORNER; - if (win == self->tllresize) return OB_FRAME_CONTEXT_TLCORNER; - if (win == self->titleleft) return OB_FRAME_CONTEXT_TLCORNER; - if (win == self->titletopleft) return OB_FRAME_CONTEXT_TLCORNER; - if (win == self->trtresize) return OB_FRAME_CONTEXT_TRCORNER; - if (win == self->trrresize) return OB_FRAME_CONTEXT_TRCORNER; - if (win == self->titleright) return OB_FRAME_CONTEXT_TRCORNER; - if (win == self->titletopright) return OB_FRAME_CONTEXT_TRCORNER; - if (win == self->leftresize) return OB_FRAME_CONTEXT_LEFT; - if (win == self->rightresize) return OB_FRAME_CONTEXT_RIGHT; - if (win == self->max) return OB_FRAME_CONTEXT_MAXIMIZE; - if (win == self->iconify) return OB_FRAME_CONTEXT_ICONIFY; - if (win == self->close) return OB_FRAME_CONTEXT_CLOSE; - if (win == self->icon) return OB_FRAME_CONTEXT_ICON; - if (win == self->desk) return OB_FRAME_CONTEXT_ALLDESKTOPS; - if (win == self->shade) return OB_FRAME_CONTEXT_SHADE; + if (win == self->window) return OB_FRAME_CONTEXT_FRAME; + if (win == self->label) return OB_FRAME_CONTEXT_TITLEBAR; + if (win == self->handle) return OB_FRAME_CONTEXT_BOTTOM; + if (win == self->handletop) return OB_FRAME_CONTEXT_BOTTOM; + if (win == self->handlebottom) return OB_FRAME_CONTEXT_BOTTOM; + if (win == self->handleleft) return OB_FRAME_CONTEXT_BLCORNER; + if (win == self->lgrip) return OB_FRAME_CONTEXT_BLCORNER; + if (win == self->lgripleft) return OB_FRAME_CONTEXT_BLCORNER; + if (win == self->lgriptop) return OB_FRAME_CONTEXT_BLCORNER; + 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->titletop) return OB_FRAME_CONTEXT_TOP; + if (win == self->topresize) return OB_FRAME_CONTEXT_TOP; + if (win == self->tltresize) return OB_FRAME_CONTEXT_TLCORNER; + if (win == self->tllresize) return OB_FRAME_CONTEXT_TLCORNER; + if (win == self->titleleft) return OB_FRAME_CONTEXT_TLCORNER; + if (win == self->titletopleft) return OB_FRAME_CONTEXT_TLCORNER; + if (win == self->trtresize) return OB_FRAME_CONTEXT_TRCORNER; + if (win == self->trrresize) return OB_FRAME_CONTEXT_TRCORNER; + if (win == self->titleright) return OB_FRAME_CONTEXT_TRCORNER; + if (win == self->titletopright) return OB_FRAME_CONTEXT_TRCORNER; + if (win == self->left) return OB_FRAME_CONTEXT_LEFT; + if (win == self->right) return OB_FRAME_CONTEXT_RIGHT; + if (win == self->max) return OB_FRAME_CONTEXT_MAXIMIZE; + if (win == self->iconify) return OB_FRAME_CONTEXT_ICONIFY; + if (win == self->close) return OB_FRAME_CONTEXT_CLOSE; + if (win == self->icon) return OB_FRAME_CONTEXT_ICON; + if (win == self->desk) return OB_FRAME_CONTEXT_ALLDESKTOPS; + if (win == self->shade) return OB_FRAME_CONTEXT_SHADE; return OB_FRAME_CONTEXT_NONE; }
M openbox/frame.hopenbox/frame.h

@@ -107,8 +107,18 @@ Window titletopleft;

Window titletopright; Window titleright; Window titlebottom; - Window leftresize; - Window rightresize; + Window left; + Window right; + Window handleleft; + Window handletop; + Window handleright; + Window handlebottom; + Window lgriptop; + Window lgripleft; + Window lgripbottom; + Window rgriptop; + Window rgripright; + Window rgripbottom; /* These are resize handles inside the titlebar */ Window topresize;
M openbox/framerender.copenbox/framerender.c

@@ -46,14 +46,11 @@

px = (self->focused ? RrColorPixel(ob_rr_theme->frame_focused_border_color) : RrColorPixel(ob_rr_theme->frame_unfocused_border_color)); - XSetWindowBorder(ob_display, self->handle, px); - XSetWindowBorder(ob_display, self->rgrip, px); - XSetWindowBorder(ob_display, self->lgrip, px); - XSetWindowBackground(ob_display, self->leftresize, px); - XClearWindow(ob_display, self->leftresize); - XSetWindowBackground(ob_display, self->rightresize, px); - XClearWindow(ob_display, self->rightresize); + XSetWindowBackground(ob_display, self->left, px); + XClearWindow(ob_display, self->left); + XSetWindowBackground(ob_display, self->right, px); + XClearWindow(ob_display, self->right); XSetWindowBackground(ob_display, self->titleleft, px); XClearWindow(ob_display, self->titleleft);

@@ -67,6 +64,29 @@ XSetWindowBackground(ob_display, self->titleright, px);

XClearWindow(ob_display, self->titleright); XSetWindowBackground(ob_display, self->titlebottom, px); XClearWindow(ob_display, self->titlebottom); + + XSetWindowBackground(ob_display, self->handleleft, px); + XClearWindow(ob_display, self->handleleft); + XSetWindowBackground(ob_display, self->handletop, px); + XClearWindow(ob_display, self->handletop); + XSetWindowBackground(ob_display, self->handleright, px); + XClearWindow(ob_display, self->handleright); + XSetWindowBackground(ob_display, self->handlebottom, px); + XClearWindow(ob_display, self->handlebottom); + + XSetWindowBackground(ob_display, self->lgripleft, px); + XClearWindow(ob_display, self->lgripleft); + XSetWindowBackground(ob_display, self->lgriptop, px); + XClearWindow(ob_display, self->lgriptop); + XSetWindowBackground(ob_display, self->lgripbottom, px); + XClearWindow(ob_display, self->lgripbottom); + + XSetWindowBackground(ob_display, self->rgripright, px); + XClearWindow(ob_display, self->rgripright); + XSetWindowBackground(ob_display, self->rgriptop, px); + XClearWindow(ob_display, self->rgriptop); + XSetWindowBackground(ob_display, self->rgripbottom, px); + XClearWindow(ob_display, self->rgripbottom); } if (self->decorations & OB_FRAME_DECOR_TITLEBAR) {