clicks on the client work as they should

This commit is contained in:
Dana Jansens 2003-01-03 06:05:08 +00:00
parent ca3e463057
commit 1c8090fa67
3 changed files with 17 additions and 35 deletions

View file

@ -45,7 +45,6 @@ void OBActions::insertPress(const XButtonEvent &e)
OBClient *c = Openbox::instance->findClient(e.window); OBClient *c = Openbox::instance->findClient(e.window);
if (c) a->clientarea = c->area(); if (c) a->clientarea = c->area();
printf("press %d x:%d y:%d winx:%d winy:%d\n", e.button, e.x_root, e.y_root, c->area().x(), c->area().y());
} }
void OBActions::removePress(const XButtonEvent &e) void OBActions::removePress(const XButtonEvent &e)
@ -202,8 +201,6 @@ void OBActions::motionHandler(const XMotionEvent &e)
unsigned int state = e.state & (ControlMask | ShiftMask | Mod1Mask | unsigned int state = e.state & (ControlMask | ShiftMask | Mod1Mask |
Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask); Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask);
unsigned int button = _posqueue[0]->button; unsigned int button = _posqueue[0]->button;
printf("motion %d x:%d y:%d winx:%d winy:%d\n", button, x_root, y_root,
_posqueue[0]->clientarea.x(), _posqueue[0]->clientarea.y());
MotionData *data = new_motion_data(e.window, e.time, state, button, MotionData *data = new_motion_data(e.window, e.time, state, button,
w->mcontext(), MouseMotion, w->mcontext(), MouseMotion,
x_root, y_root, _posqueue[0]->pos, x_root, y_root, _posqueue[0]->pos,

View file

@ -114,6 +114,7 @@ void OBBackgroundWidget::grabButtons(bool grab)
void OBBackgroundWidget::buttonPressHandler(const XButtonEvent &e) void OBBackgroundWidget::buttonPressHandler(const XButtonEvent &e)
{ {
if (type() == OBWidget::Type_Plate)
XAllowEvents(otk::OBDisplay::display, ReplayPointer, e.time); XAllowEvents(otk::OBDisplay::display, ReplayPointer, e.time);
} }

View file

@ -414,46 +414,30 @@ bool OBBindings::addButton(const std::string &but, MouseContext context,
void OBBindings::grabButtons(bool grab, OBClient *client) void OBBindings::grabButtons(bool grab, OBClient *client)
{ {
for (int i = 0; i < NUM_MOUSE_CONTEXT; ++i) { for (int i = 0; i < NUM_MOUSE_CONTEXT; ++i) {
Window win[3] = {0, 0, 0}; // at most 2 windows Window win;
int mode = GrabModeAsync;
switch (i) { switch (i) {
case MC_Frame: case MC_Frame:
win[0] = client->frame->window(); win = client->frame->window();
break;
case MC_Titlebar:
win[0] = client->frame->titlebar();
win[1] = client->frame->label();
break; break;
case MC_Window: case MC_Window:
win[0] = client->frame->plate(); win = client->frame->plate();
break; mode = GrabModeSync; // this is handled in the plate's buttonPressHandler
case MC_Handle:
win[0] = client->frame->handle();
break;
case MC_MaximizeButton:
case MC_CloseButton:
case MC_IconifyButton:
case MC_StickyButton:
case MC_Grip:
case MC_Root:
case MC_MenuItem:
break; break;
default: default:
assert(false); // invalid mouse context continue;
} }
ButtonBindingList::iterator it, end = _buttons[i].end(); ButtonBindingList::iterator it, end = _buttons[i].end();
for (it = _buttons[i].begin(); it != end; ++it) for (it = _buttons[i].begin(); it != end; ++it)
for (Window *w = win; *w; ++w) { if (grab)
if (grab) {
otk::OBDisplay::grabButton((*it)->binding.key, otk::OBDisplay::grabButton((*it)->binding.key,
(*it)->binding.modifiers, *w, false, (*it)->binding.modifiers, win, false,
ButtonPressMask | ButtonMotionMask | ButtonPressMask | ButtonMotionMask |
ButtonReleaseMask, GrabModeAsync, ButtonReleaseMask, mode, GrabModeAsync,
GrabModeAsync, None, None, false); None, None, false);
}
else else
otk::OBDisplay::ungrabButton((*it)->binding.key, otk::OBDisplay::ungrabButton((*it)->binding.key,
(*it)->binding.modifiers, *w); (*it)->binding.modifiers, win);
}
} }
} }