diff --git a/ChangeLog b/ChangeLog index 6cebecea..1a0ebc81 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,11 @@ Changelog for Openbox: 1.0.0: - * added BestFit window placement algorithm/type (Ruhi Bloodworth) + * made shaded windows edge-snap correctly to the + bottom for their size instead for their unshaded + size. (Ben Jansens) + + * added BestFit window placement algorithm/type. (Ruhi Bloodworth) 0.99.1: * forced a redraw of the close button after pressing diff --git a/src/Window.cc b/src/Window.cc index b81f1b90..0a033932 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -2804,15 +2804,18 @@ void OpenboxWindow::motionNotifyEvent(XMotionEvent *me) { dy -= frame.border_w; int snap_distance = screen->getEdgeSnapThreshold(); + // width/height of the snapping window + unsigned int snap_w = frame.width + (frame.border_w * 2); + unsigned int snap_h = getHeight() + (frame.border_w * 2); if (snap_distance) { - int drx = screen->getWidth() - (dx + frame.snap_w); + int drx = screen->getWidth() - (dx + snap_w); if (dx < drx && (dx > 0 && dx < snap_distance) || (dx < 0 && dx > -snap_distance) ) dx = 0; else if ( (drx > 0 && drx < snap_distance) || (drx < 0 && drx > -snap_distance) ) - dx = screen->getWidth() - frame.snap_w; + dx = screen->getWidth() - snap_w; int dtty, dbby, dty, dby; switch (screen->getToolbarPlacement()) { @@ -2831,14 +2834,14 @@ void OpenboxWindow::motionNotifyEvent(XMotionEvent *me) { } dty = dy - dtty; - dby = dbby - (dy + frame.snap_h); + dby = dbby - (dy + snap_h); if ( (dy > 0 && dty < snap_distance) || (dy < 0 && dty > -snap_distance) ) dy = dtty; else if ( (dby > 0 && dby < snap_distance) || (dby < 0 && dby > -snap_distance) ) - dy = dbby - frame.snap_h; + dy = dbby - snap_h; } if (screen->doOpaqueMove()) { @@ -3148,9 +3151,6 @@ void OpenboxWindow::upsize(void) { frame.width = client.width + (frame.mwm_border_w * 2); frame.height = frame.y_handle + frame.handle_h; - - frame.snap_w = frame.width + (frame.border_w * 2); - frame.snap_h = frame.height + (frame.border_w * 2); } @@ -3172,9 +3172,6 @@ void OpenboxWindow::downsize(void) { - frame.handle_h - (decorations.handle ? frame.border_w : 0); frame.y_handle = frame.border_h + frame.y_border + frame.border_w; - - frame.snap_w = frame.width + (frame.border_w * 2); - frame.snap_h = frame.height + (frame.border_w * 2); } diff --git a/src/Window.h b/src/Window.h index b2f76242..f3a79e3d 100644 --- a/src/Window.h +++ b/src/Window.h @@ -111,7 +111,7 @@ private: } flags; struct _client { - OpenboxWindow *transient_for, // which window are we a transient for? + OpenboxWindow *transient_for, // which window are we a transient for? *transient; // which window is our transient? Window window, // the client's window @@ -199,7 +199,7 @@ private: unsigned int width, height, title_h, label_w, label_h, handle_h, button_w, button_h, grip_w, grip_h, mwm_border_w, border_h, border_w, - bevel_w, snap_w, snap_h; + bevel_w; } frame; protected: @@ -279,7 +279,12 @@ public: inline const int &getWindowNumber(void) const { return window_number; } inline const unsigned int &getWidth(void) const { return frame.width; } - inline const unsigned int &getHeight(void) const { return frame.height; } + inline const unsigned int &getHeight(void) const { + if (!flags.shaded) + return frame.height; + else + return frame.title_h; + } inline const unsigned int &getClientHeight(void) const { return client.height; } inline const unsigned int &getClientWidth(void) const