all repos — openbox @ 7e47a57027e043d4fe908d5f0acb7882d4f9330f

openbox fork - make it a bit more like ryudo

Merge branch 'backport' into work
Dana Jansens danakj@orodu.net
commit

7e47a57027e043d4fe908d5f0acb7882d4f9330f

parent

8387c6cce85136426837e1528cdd2bf851a1ce3a

3 files changed, 42 insertions(+), 27 deletions(-)

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

@@ -877,7 +877,10 @@ con = frame_context(client, e->xbutton.window, px, py);

con = mouse_button_frame_context(con, e->xbutton.button, e->xbutton.state); - if (e->type == ButtonRelease && e->xbutton.button == pb) + /* button presses on CLIENT_CONTEXTs are not accompanied by a + release because they are Replayed to the client */ + if ((e->type == ButtonRelease || CLIENT_CONTEXT(con, client)) && + e->xbutton.button == pb) pb = 0, px = py = -1, pcon = OB_FRAME_CONTEXT_NONE; switch (con) {

@@ -973,41 +976,48 @@ 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); + 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; + if (e->xcrossing.mode == NotifyGrab) { + client->frame->max_press = FALSE; + client->frame->desk_press = FALSE; + client->frame->shade_press = FALSE; + client->frame->iconify_press = FALSE; + client->frame->close_press = FALSE; } + frame_adjust_state(client->frame); break; case OB_FRAME_CONTEXT_MAXIMIZE: client->frame->max_hover = FALSE; - client->frame->max_press = FALSE; + if (e->xcrossing.mode == NotifyGrab) + client->frame->max_press = FALSE; frame_adjust_state(client->frame); break; case OB_FRAME_CONTEXT_ALLDESKTOPS: client->frame->desk_hover = FALSE; - client->frame->desk_press = FALSE; + if (e->xcrossing.mode == NotifyGrab) + client->frame->desk_press = FALSE; frame_adjust_state(client->frame); break; case OB_FRAME_CONTEXT_SHADE: client->frame->shade_hover = FALSE; - client->frame->shade_press = FALSE; + if (e->xcrossing.mode == NotifyGrab) + client->frame->shade_press = FALSE; frame_adjust_state(client->frame); break; case OB_FRAME_CONTEXT_ICONIFY: client->frame->iconify_hover = FALSE; - client->frame->iconify_press = FALSE; + if (e->xcrossing.mode == NotifyGrab) + client->frame->iconify_press = FALSE; frame_adjust_state(client->frame); break; case OB_FRAME_CONTEXT_CLOSE: client->frame->close_hover = FALSE; - client->frame->close_press = FALSE; + if (e->xcrossing.mode == NotifyGrab) + client->frame->close_press = FALSE; frame_adjust_state(client->frame); break; case OB_FRAME_CONTEXT_FRAME:

@@ -1046,27 +1056,32 @@ e->xcrossing.x, e->xcrossing.y);

switch (con) { case OB_FRAME_CONTEXT_MAXIMIZE: client->frame->max_hover = TRUE; - client->frame->max_press = (con == pcon); + if (e->xcrossing.mode == NotifyUngrab) + client->frame->max_press = (con == pcon); frame_adjust_state(client->frame); break; case OB_FRAME_CONTEXT_ALLDESKTOPS: client->frame->desk_hover = TRUE; - client->frame->desk_press = (con == pcon); + if (e->xcrossing.mode == NotifyUngrab) + client->frame->desk_press = (con == pcon); frame_adjust_state(client->frame); break; case OB_FRAME_CONTEXT_SHADE: client->frame->shade_hover = TRUE; - client->frame->shade_press = (con == pcon); + if (e->xcrossing.mode == NotifyUngrab) + client->frame->shade_press = (con == pcon); frame_adjust_state(client->frame); break; case OB_FRAME_CONTEXT_ICONIFY: client->frame->iconify_hover = TRUE; - client->frame->iconify_press = (con == pcon); + if (e->xcrossing.mode == NotifyUngrab) + client->frame->iconify_press = (con == pcon); frame_adjust_state(client->frame); break; case OB_FRAME_CONTEXT_CLOSE: client->frame->close_hover = TRUE; - client->frame->close_press = (con == pcon); + if (e->xcrossing.mode == NotifyUngrab) + client->frame->close_press = (con == pcon); frame_adjust_state(client->frame); break; case OB_FRAME_CONTEXT_FRAME:
M openbox/frame.hopenbox/frame.h

@@ -56,6 +56,12 @@ OB_FRAME_CONTEXT_MOVE_RESIZE,

OB_FRAME_NUM_CONTEXTS } ObFrameContext; +#define FRAME_CONTEXT(co, cl) ((cl && cl->type != OB_CLIENT_TYPE_DESKTOP) ? \ + co == OB_FRAME_CONTEXT_FRAME : FALSE) +#define CLIENT_CONTEXT(co, cl) ((cl && cl->type == OB_CLIENT_TYPE_DESKTOP) ? \ + co == OB_FRAME_CONTEXT_DESKTOP : \ + co == OB_FRAME_CONTEXT_CLIENT) + /*! The decorations the client window wants to be displayed on it */ typedef enum { OB_FRAME_DECOR_TITLEBAR = 1 << 0, /*!< Display a titlebar */
M openbox/mouse.copenbox/mouse.c

@@ -37,12 +37,6 @@ guint button;

GSList *actions[OB_NUM_MOUSE_ACTIONS]; /* lists of Action pointers */ } ObMouseBinding; -#define FRAME_CONTEXT(co, cl) ((cl && cl->type != OB_CLIENT_TYPE_DESKTOP) ? \ - co == OB_FRAME_CONTEXT_FRAME : FALSE) -#define CLIENT_CONTEXT(co, cl) ((cl && cl->type == OB_CLIENT_TYPE_DESKTOP) ? \ - co == OB_FRAME_CONTEXT_DESKTOP : \ - co == OB_FRAME_CONTEXT_CLIENT) - /* Array of GSList*s of ObMouseBinding*s. */ static GSList *bound_contexts[OB_FRAME_NUM_CONTEXTS]; /* TRUE when we have a grab on the pointer and need to replay the pointer event