X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2FWindow.cc;h=1f06df63c5a2eaf50b77c37982d849c84953f0b0;hb=b950402ba238aeb6d76604b761b6fdc249b070ab;hp=f1dfe6e8b85d716bd60e97ae9e443aba4fad7308;hpb=e15e4a9e03dd7b64004b76ca84b07c12c251f67b;p=chaz%2Fopenbox diff --git a/src/Window.cc b/src/Window.cc index f1dfe6e8..1f06df63 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -189,9 +189,6 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) { blackbox->saveWindowSearch(frame.plate, this); blackbox->saveWindowSearch(client.window, this); - screen->addStrut(&client.strut); - updateStrut(); - // determine if this is a transient window getTransientInfo(); @@ -260,6 +257,10 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) { place_window = False; } + // add the window's strut. note this is done *after* placing the window. + screen->addStrut(&client.strut); + updateStrut(); + if (decorations & Decor_Titlebar) createTitlebar(); @@ -846,6 +847,10 @@ void BlackboxWindow::grabButtons(void) { 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); } @@ -854,6 +859,7 @@ void BlackboxWindow::ungrabButtons(void) { blackbox->ungrabButton(Button1, 0, frame.plate); blackbox->ungrabButton(Button1, Mod1Mask, frame.window); + blackbox->ungrabButton(Button2, Mod1Mask, frame.window); blackbox->ungrabButton(Button3, Mod1Mask, frame.window); } @@ -2215,7 +2221,7 @@ void BlackboxWindow::applyGravity(Rect &r) { case NorthEastGravity: case SouthEastGravity: case EastGravity: - r.setX(client.rect.x() - frame.margin.left - frame.margin.right); + r.setX(client.rect.x() - frame.margin.left - frame.margin.right + 2); break; case ForgetGravity: @@ -2242,7 +2248,7 @@ void BlackboxWindow::applyGravity(Rect &r) { case SouthWestGravity: case SouthEastGravity: case SouthGravity: - r.setY(client.rect.y() - frame.margin.top - frame.margin.bottom); + r.setY(client.rect.y() - frame.margin.top - frame.margin.bottom + 2); break; case ForgetGravity: @@ -2278,7 +2284,7 @@ void BlackboxWindow::restoreGravity(Rect &r) { case NorthEastGravity: case SouthEastGravity: case EastGravity: - r.setX(frame.rect.x() + frame.margin.left + frame.margin.right); + r.setX(frame.rect.x() + frame.margin.left + frame.margin.right - 2); break; case ForgetGravity: @@ -2305,7 +2311,7 @@ void BlackboxWindow::restoreGravity(Rect &r) { case SouthWestGravity: case SouthEastGravity: case SouthGravity: - r.setY(frame.rect.y() + frame.margin.top + frame.margin.bottom); + r.setY(frame.rect.y() + frame.margin.top + frame.margin.bottom - 2); break; case ForgetGravity: @@ -2820,6 +2826,9 @@ void BlackboxWindow::buttonReleaseEvent(const XButtonEvent *re) { endMove(); } else if (flags.resizing) { endResize(); + } else if (re->window == frame.window) { + if (re->button == 2 && re->state == Mod1Mask) + XUngrabPointer(blackbox->getXDisplay(), CurrentTime); } } @@ -3112,6 +3121,7 @@ void BlackboxWindow::beginResize(int x_root, int y_root, Corner dir) { default: assert(false); // unhandled Corner + return; // unreachable, for the compiler } XGrabServer(blackbox->getXDisplay()); @@ -3150,29 +3160,30 @@ void BlackboxWindow::doResize(int x_root, int y_root) { Corner anchor; switch (resize_dir) { - case BottomLeft: - anchor = TopRight; - frame.changing.setSize(frame.rect.width() - (x_root - frame.grab_x), - frame.rect.height() + (y_root - frame.grab_y)); - break; - case BottomRight: - anchor = TopLeft; - frame.changing.setSize(frame.rect.width() + (x_root - frame.grab_x), - frame.rect.height() + (y_root - frame.grab_y)); - break; - case TopLeft: - anchor = BottomRight; - frame.changing.setSize(frame.rect.width() - (x_root - frame.grab_x), - frame.rect.height() - (y_root - frame.grab_y)); - break; - case TopRight: - anchor = BottomLeft; - frame.changing.setSize(frame.rect.width() + (x_root - frame.grab_x), - frame.rect.height() - (y_root - frame.grab_y)); - break; + case BottomLeft: + anchor = TopRight; + frame.changing.setSize(frame.rect.width() - (x_root - frame.grab_x), + frame.rect.height() + (y_root - frame.grab_y)); + break; + case BottomRight: + anchor = TopLeft; + frame.changing.setSize(frame.rect.width() + (x_root - frame.grab_x), + frame.rect.height() + (y_root - frame.grab_y)); + break; + case TopLeft: + anchor = BottomRight; + frame.changing.setSize(frame.rect.width() - (x_root - frame.grab_x), + frame.rect.height() - (y_root - frame.grab_y)); + break; + case TopRight: + anchor = BottomLeft; + frame.changing.setSize(frame.rect.width() + (x_root - frame.grab_x), + frame.rect.height() - (y_root - frame.grab_y)); + break; - default: - assert(false); // unhandled Corner + default: + assert(false); // unhandled Corner + return; // unreachable, for the compiler } constrain(anchor, &gw, &gh);