-void OpenboxWindow::positionWindows(void) {
- XResizeWindow(display, frame.window, frame.width,
- ((flags.shaded) ? frame.title_h : frame.height));
- XSetWindowBorderWidth(display, frame.window, frame.border_w);
- XSetWindowBorderWidth(display, frame.plate, frame.mwm_border_w);
- XMoveResizeWindow(display, frame.plate, 0, frame.y_border,
- client.width, client.height);
- XMoveResizeWindow(display, client.window, 0, 0, client.width, client.height);
-
- if (decorations.titlebar) {
- XSetWindowBorderWidth(display, frame.title, frame.border_w);
- XMoveResizeWindow(display, frame.title, -frame.border_w,
- -frame.border_w, frame.width, frame.title_h);
+void BlackboxWindow::grabButtons(void) {
+ if ((! screen->isSloppyFocus()) || screen->doClickRaise())
+ // grab button 1 for changing focus/raising
+ blackbox->grabButton(Button1, 0, frame.plate, True, ButtonPressMask,
+ GrabModeSync, GrabModeSync, frame.plate, None);
+
+ if (functions & Func_Move)
+ blackbox->grabButton(Button1, Mod1Mask, frame.window, True,
+ ButtonReleaseMask | ButtonMotionMask, GrabModeAsync,
+ GrabModeAsync, frame.window,
+ blackbox->getMoveCursor());
+ if (functions & Func_Resize)
+ blackbox->grabButton(Button3, Mod1Mask, frame.window, True,
+ ButtonReleaseMask | ButtonMotionMask, GrabModeAsync,
+ GrabModeAsync, frame.window,
+ blackbox->getLowerRightAngleCursor());
+ // alt+middle lowers the window
+ blackbox->grabButton(Button2, Mod1Mask, frame.window, True,
+ ButtonReleaseMask, GrabModeAsync, GrabModeAsync,
+ frame.window, None);
+}
+
+
+void BlackboxWindow::ungrabButtons(void) {
+ if ((! screen->isSloppyFocus()) || screen->doClickRaise())
+ blackbox->ungrabButton(Button1, 0, frame.plate);
+
+ blackbox->ungrabButton(Button1, Mod1Mask, frame.window);
+ blackbox->ungrabButton(Button2, Mod1Mask, frame.window);
+ blackbox->ungrabButton(Button3, Mod1Mask, frame.window);
+}
+
+
+void BlackboxWindow::positionWindows(void) {
+ XMoveResizeWindow(blackbox->getXDisplay(), frame.window,
+ frame.rect.x(), frame.rect.y(), frame.inside_w,
+ (flags.shaded) ? frame.title_h : frame.inside_h);
+ XSetWindowBorderWidth(blackbox->getXDisplay(), frame.window,
+ frame.border_w);
+ XSetWindowBorderWidth(blackbox->getXDisplay(), frame.plate,
+ frame.mwm_border_w);
+ XMoveResizeWindow(blackbox->getXDisplay(), frame.plate,
+ frame.margin.left - frame.mwm_border_w - frame.border_w,
+ frame.margin.top - frame.mwm_border_w - frame.border_w,
+ client.rect.width(), client.rect.height());
+ XMoveResizeWindow(blackbox->getXDisplay(), client.window,
+ 0, 0, client.rect.width(), client.rect.height());
+ // ensure client.rect contains the real location
+ client.rect.setCoords(frame.rect.left() + frame.margin.left,
+ frame.rect.top() + frame.margin.top,
+ frame.rect.right() - frame.margin.right,
+ frame.rect.bottom() - frame.margin.bottom);
+
+ if (decorations & Decor_Titlebar) {
+ if (frame.title == None) createTitlebar();
+
+ XSetWindowBorderWidth(blackbox->getXDisplay(), frame.title,
+ frame.border_w);
+ XMoveResizeWindow(blackbox->getXDisplay(), frame.title, -frame.border_w,
+ -frame.border_w, frame.inside_w, frame.title_h);