all repos — openbox @ b8f207892a11b53365c47b4828254269fca5c8e9

openbox fork - make it a bit more like ryudo

some repositioning of frame elements for maximized windows.
fix clicking on borders not counting as the button in that corner for full max windows
disable the resize cursors for full max windows
Dana Jansens danakj@orodu.net
commit

b8f207892a11b53365c47b4828254269fca5c8e9

parent

cce3fed748bd2f68522cf76954c62d8f61bb5946

4 files changed, 93 insertions(+), 48 deletions(-)

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

@@ -2740,6 +2740,7 @@ gboolean moved = FALSE, resized = FALSE;

gboolean fmoved, fresized; guint fdecor = self->frame->decorations; gboolean fhorz = self->frame->max_horz; + gboolean fvert = self->frame->max_vert; gint logicalw, logicalh; /* find the new x, y, width, and height (and logical size) */

@@ -2775,8 +2776,11 @@

/* find the frame's dimensions and move/resize it */ fmoved = moved; fresized = resized; - if (self->decorations != fdecor || self->max_horz != fhorz) + if (self->decorations != fdecor || + self->max_horz != fhorz || self->max_vert != fvert) + { fmoved = fresized = TRUE; + } if (fmoved || fresized) frame_adjust_area(self->frame, fmoved, fresized, FALSE);
M openbox/event.copenbox/event.c

@@ -810,6 +810,8 @@ con = frame_context(client, e->xmotion.window,

e->xmotion.x, e->xmotion.y); switch (con) { case OB_FRAME_CONTEXT_TITLEBAR: + case OB_FRAME_CONTEXT_TLCORNER: + case OB_FRAME_CONTEXT_TRCORNER: /* we've left the button area inside the titlebar */ if (client->frame->max_hover || client->frame->desk_hover || client->frame->shade_hover || client->frame->iconify_hover ||

@@ -861,6 +863,22 @@ case LeaveNotify:

con = frame_context(client, e->xcrossing.window, e->xcrossing.x, e->xcrossing.y); switch (con) { + case OB_FRAME_CONTEXT_TITLEBAR: + case OB_FRAME_CONTEXT_TLCORNER: + case OB_FRAME_CONTEXT_TRCORNER: + /* we've left the button area inside the titlebar */ + if (client->frame->max_hover || client->frame->desk_hover || + client->frame->shade_hover || client->frame->iconify_hover || + client->frame->close_hover) + { + client->frame->max_hover = FALSE; + client->frame->desk_hover = FALSE; + client->frame->shade_hover = FALSE; + client->frame->iconify_hover = FALSE; + client->frame->close_hover = FALSE; + frame_adjust_state(client->frame); + } + break; case OB_FRAME_CONTEXT_MAXIMIZE: client->frame->max_hover = FALSE; frame_adjust_state(client->frame);
M openbox/frame.copenbox/frame.c

@@ -330,7 +330,6 @@ oldsize = self->size;

if (resized) { self->decorations = self->client->decorations; - self->max_horz = self->client->max_horz; if (self->decorations & OB_FRAME_DECOR_BORDER) { self->bwidth = ob_rr_theme->fbwidth;

@@ -340,20 +339,20 @@ } else {

self->bwidth = self->cbwidth_x = self->cbwidth_y = 0; } self->rbwidth = self->bwidth; - self->leftb = self->rightb = TRUE; + + self->max_horz = self->client->max_horz; + self->max_vert = self->client->max_vert; if (self->max_horz) { - self->leftb = self->rightb = FALSE; self->cbwidth_x = 0; - } - - self->width = self->client->area.width + self->cbwidth_x * 2; - self->width = MAX(self->width, 1); /* no lower than 1 */ + self->width = self->client->area.width - self->bwidth * 2; + } else + self->width = self->client->area.width + self->cbwidth_x * 2; STRUT_SET(self->size, - self->cbwidth_x + (self->leftb ? self->bwidth : 0), + self->cbwidth_x + (!self->max_horz ? self->bwidth : 0), self->cbwidth_y + self->bwidth, - self->cbwidth_x + (self->rightb ? self->bwidth : 0), + self->cbwidth_x + (!self->max_horz ? self->bwidth : 0), self->cbwidth_y + self->bwidth); if (self->decorations & OB_FRAME_DECOR_TITLEBAR)

@@ -370,9 +369,8 @@ if (!fake) {

if (self->bwidth) { XMoveResizeWindow(ob_display, self->titletop, ob_rr_theme->grip_width + self->bwidth, 0, - self->client->area.width + - self->cbwidth_x * 2 + self->bwidth * 2 - - (ob_rr_theme->grip_width + self->bwidth) * 2, + /* width + bwidth*2 - bwidth*2 - grips*2 */ + self->width + ob_rr_theme->grip_width * 2, self->bwidth); XMoveResizeWindow(ob_display, self->titletopleft, 0, 0,

@@ -380,7 +378,7 @@ ob_rr_theme->grip_width + self->bwidth,

self->bwidth); XMoveResizeWindow(ob_display, self->titletopright, self->client->area.width + - self->cbwidth_x * 2 + self->bwidth * 2 - + self->size.left + self->size.right - ob_rr_theme->grip_width - self->bwidth, 0, ob_rr_theme->grip_width + self->bwidth,

@@ -389,15 +387,16 @@

XMoveResizeWindow(ob_display, self->titleleft, 0, self->bwidth, self->bwidth, - (self->leftb ? + (!self->max_horz ? ob_rr_theme->grip_width : self->size.top - self->bwidth)); XMoveResizeWindow(ob_display, self->titleright, self->client->area.width + - self->cbwidth_x * 2 + self->bwidth, + self->size.left + self->size.right - self->bwidth, self->bwidth, - (self->rightb ? + self->bwidth, + (!self->max_horz ? ob_rr_theme->grip_width : self->size.top - self->bwidth));

@@ -413,8 +412,7 @@ {

XMoveResizeWindow(ob_display, self->titlebottom, self->bwidth, ob_rr_theme->title_height + self->bwidth, - self->client->area.width + - self->cbwidth_x * 2, + self->width, self->rbwidth); XMapWindow(ob_display, self->titlebottom);

@@ -487,11 +485,11 @@ XMoveResizeWindow(ob_display, self->lgripleft,

0, self->size.top + self->client->area.height + self->size.bottom - - (self->leftb ? + (!self->max_horz ? ob_rr_theme->grip_width : self->size.bottom), self->bwidth, - (self->leftb ? + (!self->max_horz ? ob_rr_theme->grip_width : self->size.bottom)); XMoveResizeWindow(ob_display, self->rgripright,

@@ -499,11 +497,11 @@ self->size.left + self->client->area.width +

self->size.right - self->bwidth, self->size.top + self->client->area.height + self->size.bottom - - (self->leftb ? + (!self->max_horz ? ob_rr_theme->grip_width : self->size.bottom), self->bwidth, - (self->rightb ? + (!self->max_horz ? ob_rr_theme->grip_width : self->size.bottom));

@@ -636,7 +634,7 @@

XUnmapWindow(ob_display, self->handle); } - if (self->bwidth && self->leftb) { + if (self->bwidth && !self->max_horz) { XMoveResizeWindow(ob_display, self->left, 0, self->bwidth + ob_rr_theme->grip_width,

@@ -649,7 +647,7 @@ XMapWindow(ob_display, self->left);

} else XUnmapWindow(ob_display, self->left); - if (self->bwidth && self->rightb) { + if (self->bwidth && !self->max_horz) { XMoveResizeWindow(ob_display, self->right, self->client->area.width + self->cbwidth_x * 2 + self->bwidth,

@@ -670,14 +668,13 @@ 0,

self->size.top - self->cbwidth_y, self->client->area.width + self->cbwidth_x * 2 + - (self->leftb ? self->bwidth : 0) + - (self->rightb ? self->bwidth : 0), + (!self->max_horz ? self->bwidth * 2 : 0), self->client->area.height + self->cbwidth_y * 2); /* move the plate */ XMoveWindow(ob_display, self->plate, - (self->leftb ? self->bwidth : 0) + self->cbwidth_x, + (!self->max_horz ? self->bwidth : 0) + self->cbwidth_x, self->cbwidth_y); /* when the client has StaticGravity, it likes to move around. */

@@ -749,7 +746,8 @@ if (!fake &&

(self->functions & OB_CLIENT_FUNC_RESIZE) != (self->client->functions & OB_CLIENT_FUNC_RESIZE)) { - gboolean r = self->client->functions & OB_CLIENT_FUNC_RESIZE; + gboolean r = self->client->functions & OB_CLIENT_FUNC_RESIZE && + !(self->max_horz && self->max_vert); XSetWindowAttributes a; a.cursor = ob_cursor(r ? OB_CURSOR_NORTH : OB_CURSOR_NONE);

@@ -1199,27 +1197,52 @@ return OB_FRAME_CONTEXT_DESKTOP;

return OB_FRAME_CONTEXT_CLIENT; } - if (win == self->title) { - /* when the user clicks in the corners of the titlebar and the client - is fully maximized, then treat it like they clicked in the - button that is there */ - if (self->client->max_horz && self->client->max_vert && - y < ob_rr_theme->paddingy + 1 + ob_rr_theme->button_size) + /* when the user clicks in the corners of the titlebar and the client + 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->titleleft || win == self->titletopleft || + win == self->titleright || win == self->titletopright)) + { + /* get the mouse coords in reference to the whole frame */ + gint fx = x; + gint fy = y; + + /* these windows are down a border width from the top of the frame */ + if (win == self->title || + win == self->titleleft || win == self->titleright) + fy += self->bwidth; + + /* title is a border width in from the edge */ + if (win == self->title) + fx += 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); + /* titleright is even more way to the right edge */ + else if (win == self->titleright) + fx += self->area.width - self->bwidth; + + /* figure out if we're over the area that should be considered a + button */ + if (fy < self->bwidth + ob_rr_theme->paddingy + 1 + + ob_rr_theme->button_size) { - if (x < ((ob_rr_theme->paddingx + 1) * 2 + - ob_rr_theme->button_size)) { + if (fx < (self->bwidth + ob_rr_theme->paddingx + 1 + + ob_rr_theme->button_size)) + { if (self->leftmost != OB_FRAME_CONTEXT_NONE) return self->leftmost; } - else if (x > (self->width - - (ob_rr_theme->paddingx + 1 + - ob_rr_theme->button_size))) + else if (fx >= (self->area.width - + (self->bwidth + ob_rr_theme->paddingx + 1 + + ob_rr_theme->button_size))) { if (self->rightmost != OB_FRAME_CONTEXT_NONE) return self->rightmost; } } - return OB_FRAME_CONTEXT_TITLEBAR; } if (win == self->window) return OB_FRAME_CONTEXT_FRAME;

@@ -1237,16 +1260,17 @@ 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->title) return OB_FRAME_CONTEXT_TITLEBAR; + if (win == self->titleleft) return OB_FRAME_CONTEXT_TLCORNER; + if (win == self->titletopleft) return OB_FRAME_CONTEXT_TLCORNER; + if (win == self->titleright) return OB_FRAME_CONTEXT_TRCORNER; + if (win == self->titletopright) return OB_FRAME_CONTEXT_TRCORNER; 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;
M openbox/frame.hopenbox/frame.h

@@ -85,7 +85,6 @@ gboolean visible;

guint functions; guint decorations; - gboolean max_horz; Window inner; /*!< The window for drawing the inner client border */ Window title;

@@ -160,8 +159,8 @@ gint bwidth; /* border width */

gint rbwidth; /* border width between the title and client */ gint cbwidth_x; /* client border width */ gint cbwidth_y; /* client border width */ - gboolean leftb; /* is there a border to the left of the client? */ - gboolean rightb; /* is there a border to the right of the client?*/ + gboolean max_horz; /* when maxed some decorations are hidden */ + gboolean max_vert; /* when maxed some decorations are hidden */ /* the leftmost and rightmost elements in the titlebar */ ObFrameContext leftmost;