all repos — openbox @ da2295878691d876abf89b6e33d817386e46059a

openbox fork - make it a bit more like ryudo

fix hovering for corner buttons during full-max
Dana Jansens danakj@orodu.net
commit

da2295878691d876abf89b6e33d817386e46059a

parent

66afa1dcebaf8f1562311d1293baf4094f9ac011

2 files changed, 46 insertions(+), 5 deletions(-)

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

@@ -730,12 +730,16 @@ XEvent ce;

Atom msgtype; ObFrameContext con; static gint px = -1, py = -1; + static guint pb = 0; switch (e->type) { case ButtonPress: /* save where the press occured for the first button pressed */ - if (px == -1) px = e->xbutton.x; - if (py == -1) py = e->xbutton.y; + if (!pb) { + pb = e->xbutton.button; + px = e->xbutton.x; + py = e->xbutton.y; + } case ButtonRelease: /* Wheel buttons don't draw because they are an instant click, so it is a waste of resources to go drawing it.

@@ -751,8 +755,8 @@ /* use where the press occured */

con = frame_context(client, e->xbutton.window, px, py); con = mouse_button_frame_context(con, e->xbutton.button); - if (e->type == ButtonRelease) - px = py = -1; + if (e->type == ButtonRelease && e->xbutton.button == pb) + pb = 0, px = py = -1; switch (con) { case OB_FRAME_CONTEXT_MAXIMIZE:

@@ -779,6 +783,43 @@ default:

/* nothing changes with clicks for any other contexts */ break; } + } + break; + case MotionNotify: + con = frame_context(client, e->xmotion.window, + e->xmotion.x, e->xmotion.y); + switch (con) { + case OB_FRAME_CONTEXT_TITLEBAR: + /* we've left the button area inside the titlebar */ + 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 = TRUE; + frame_adjust_state(client->frame); + break; + case OB_FRAME_CONTEXT_ALLDESKTOPS: + client->frame->desk_hover = TRUE; + frame_adjust_state(client->frame); + break; + case OB_FRAME_CONTEXT_SHADE: + client->frame->shade_hover = TRUE; + frame_adjust_state(client->frame); + break; + case OB_FRAME_CONTEXT_ICONIFY: + client->frame->iconify_hover = TRUE; + frame_adjust_state(client->frame); + break; + case OB_FRAME_CONTEXT_CLOSE: + client->frame->close_hover = TRUE; + frame_adjust_state(client->frame); + break; + default: + break; } break; case LeaveNotify:
M openbox/frame.copenbox/frame.c

@@ -34,7 +34,7 @@ #define PLATE_EVENTMASK (SubstructureRedirectMask | FocusChangeMask)

#define FRAME_EVENTMASK (EnterWindowMask | LeaveWindowMask | \ ButtonPressMask | ButtonReleaseMask) #define ELEMENT_EVENTMASK (ButtonPressMask | ButtonReleaseMask | \ - ButtonMotionMask | \ + ButtonMotionMask | PointerMotionMask | \ EnterWindowMask | LeaveWindowMask) /* The inner window does not need enter/leave events. If it does get them, then it needs its own context for enter events