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);
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)
@ -202,8 +201,6 @@ void OBActions::motionHandler(const XMotionEvent &e)
unsigned int state = e.state & (ControlMask | ShiftMask | Mod1Mask |
Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask);
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,
w->mcontext(), MouseMotion,
x_root, y_root, _posqueue[0]->pos,

View file

@ -114,7 +114,8 @@ void OBBackgroundWidget::grabButtons(bool grab)
void OBBackgroundWidget::buttonPressHandler(const XButtonEvent &e)
{
XAllowEvents(otk::OBDisplay::display, ReplayPointer, e.time);
if (type() == OBWidget::Type_Plate)
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)
{
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) {
case MC_Frame:
win[0] = client->frame->window();
break;
case MC_Titlebar:
win[0] = client->frame->titlebar();
win[1] = client->frame->label();
win = client->frame->window();
break;
case MC_Window:
win[0] = client->frame->plate();
break;
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:
win = client->frame->plate();
mode = GrabModeSync; // this is handled in the plate's buttonPressHandler
break;
default:
assert(false); // invalid mouse context
continue;
}
ButtonBindingList::iterator it, end = _buttons[i].end();
for (it = _buttons[i].begin(); it != end; ++it)
for (Window *w = win; *w; ++w) {
if (grab) {
otk::OBDisplay::grabButton((*it)->binding.key,
(*it)->binding.modifiers, *w, false,
ButtonPressMask | ButtonMotionMask |
ButtonReleaseMask, GrabModeAsync,
GrabModeAsync, None, None, false);
}
else
otk::OBDisplay::ungrabButton((*it)->binding.key,
(*it)->binding.modifiers, *w);
}
if (grab)
otk::OBDisplay::grabButton((*it)->binding.key,
(*it)->binding.modifiers, win, false,
ButtonPressMask | ButtonMotionMask |
ButtonReleaseMask, mode, GrabModeAsync,
None, None, false);
else
otk::OBDisplay::ungrabButton((*it)->binding.key,
(*it)->binding.modifiers, win);
}
}