X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Factions.cc;h=309323cca6281c323e027a2bd093e7d066b27597;hb=a0333b52d8db7e68a440236b132ffd3b7629872f;hp=14fba7db125cd17232708634f69ba2d2ac635490;hpb=345d957e1ea577480f807b892b73c3f52fe913d2;p=chaz%2Fopenbox diff --git a/src/actions.cc b/src/actions.cc index 14fba7db..309323cc 100644 --- a/src/actions.cc +++ b/src/actions.cc @@ -5,7 +5,7 @@ #endif #include "actions.hh" -#include "widget.hh" +#include "widgetbase.hh" #include "openbox.hh" #include "client.hh" #include "screen.hh" @@ -81,13 +81,24 @@ void OBActions::buttonPressHandler(const XButtonEvent &e) screen = c->screen(); else screen = otk::OBDisplay::findScreen(e.root)->screen(); - ButtonData data(screen, c, e.time, state, e.button, w->mcontext(), - MousePress); + MouseData data(screen, c, e.time, state, e.button, w->mcontext(), + MousePress); Openbox::instance->bindings()->fireButton(&data); if (_button) return; // won't count toward CLICK events _button = e.button; + + if (w->mcontext() == MC_Window) { + /* + Because of how events are grabbed on the client window, we can't get + ButtonRelease events, so instead we simply manufacture them here, so that + clicks/doubleclicks etc still work. + */ + XButtonEvent ev = e; + ev.type = ButtonRelease; + buttonReleaseHandler(ev); + } } @@ -124,8 +135,8 @@ void OBActions::buttonReleaseHandler(const XButtonEvent &e) screen = c->screen(); else screen = otk::OBDisplay::findScreen(e.root)->screen(); - ButtonData data(screen, c, e.time, state, e.button, w->mcontext(), - MouseClick); + MouseData data(screen, c, e.time, state, e.button, w->mcontext(), + MouseClick); Openbox::instance->bindings()->fireButton(&data); @@ -234,9 +245,9 @@ void OBActions::motionHandler(const XMotionEvent &e) screen = c->screen(); else screen = otk::OBDisplay::findScreen(e.root)->screen(); - MotionData data(screen, c, e.time, state, button, w->mcontext(), MouseMotion, - x_root, y_root, _posqueue[0]->pos, _posqueue[0]->clientarea); - Openbox::instance->bindings()->fireButton((ButtonData*)&data); + MouseData data(screen, c, e.time, state, button, w->mcontext(), MouseMotion, + x_root, y_root, _posqueue[0]->pos, _posqueue[0]->clientarea); + Openbox::instance->bindings()->fireButton(&data); } void OBActions::mapRequestHandler(const XMapRequestEvent &e)