X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fevent.c;h=566739c96262d8713de665d7f6de0901cf19cf6d;hb=6412fba7fd1a30465cb01b0e3ebcdf47680e9f02;hp=ef320afd0ae8c3ee2dc81203cac7864dd64d9757;hpb=66afa1dcebaf8f1562311d1293baf4094f9ac011;p=chaz%2Fopenbox diff --git a/openbox/event.c b/openbox/event.c index ef320afd..566739c9 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -730,12 +730,16 @@ static void event_handle_client(ObClient *client, XEvent *e) 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 @@ static void event_handle_client(ObClient *client, XEvent *e) 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: @@ -781,6 +785,58 @@ static void event_handle_client(ObClient *client, XEvent *e) } } 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 */ + 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: + if (!client->frame->max_hover) { + client->frame->max_hover = TRUE; + frame_adjust_state(client->frame); + } + break; + case OB_FRAME_CONTEXT_ALLDESKTOPS: + if (!client->frame->desk_hover) { + client->frame->desk_hover = TRUE; + frame_adjust_state(client->frame); + } + break; + case OB_FRAME_CONTEXT_SHADE: + if (!client->frame->shade_hover) { + client->frame->shade_hover = TRUE; + frame_adjust_state(client->frame); + } + break; + case OB_FRAME_CONTEXT_ICONIFY: + if (!client->frame->iconify_hover) { + client->frame->iconify_hover = TRUE; + frame_adjust_state(client->frame); + } + break; + case OB_FRAME_CONTEXT_CLOSE: + if (!client->frame->close_hover) { + client->frame->close_hover = TRUE; + frame_adjust_state(client->frame); + } + break; + default: + break; + } + break; case LeaveNotify: con = frame_context(client, e->xcrossing.window, e->xcrossing.x, e->xcrossing.y);