added ClickMouse window placement policy
Dana Jansens danakj@orodu.net
8 files changed,
48 insertions(+),
19 deletions(-)
M
src/Screen.cc
→
src/Screen.cc
@@ -1027,6 +1027,7 @@ case CascadePlacement: placement = "CascadePlacement"; break;
case BestFitPlacement: placement = "BestFitPlacement"; break; case ColSmartPlacement: placement = "ColSmartPlacement"; break; case UnderMousePlacement: placement = "UnderMousePlacement"; break; + case ClickMousePlacement: placement = "ClickMousePlacement"; break; default: case RowSmartPlacement: placement = "RowSmartPlacement"; break; }@@ -1302,6 +1303,8 @@ else if (0 == strncasecmp(s.c_str(), "BestFitPlacement", s.length()))
resource.placement_policy = BestFitPlacement; else if (0 == strncasecmp(s.c_str(), "UnderMousePlacement", s.length())) resource.placement_policy = UnderMousePlacement; + else if (0 == strncasecmp(s.c_str(), "ClickMousePlacement", s.length())) + resource.placement_policy = ClickMousePlacement; else //if (0 == strncasecmp(s.c_str(), "CascadePlacement", s.length())) resource.placement_policy = CascadePlacement; } else
M
src/Screen.h
→
src/Screen.h
@@ -312,7 +312,7 @@ void updateNetizenWindowRaise(Window);
void updateNetizenWindowLower(Window); enum { RowSmartPlacement = 1, ColSmartPlacement, CascadePlacement, - BestFitPlacement, UnderMousePlacement, + BestFitPlacement, UnderMousePlacement, ClickMousePlacement, LeftRight, RightLeft, TopBottom, BottomTop }; enum { LeftJustify = 1, RightJustify, CenterJustify }; enum { RoundBullet = 1, TriangleBullet, SquareBullet, NoBullet };
M
src/Window.cc
→
src/Window.cc
@@ -2732,7 +2732,7 @@
void OpenboxWindow::startMove(int x, int y) { ASSERT(!flags.moving); - XGrabPointer(display, frame.window, False, Button1MotionMask | + XGrabPointer(display, frame.window, False, PointerMotionMask | ButtonReleaseMask, GrabModeAsync, GrabModeAsync, None, openbox.getMoveCursor(), CurrentTime);@@ -2853,14 +2853,13 @@ }
void OpenboxWindow::motionNotifyEvent(XMotionEvent *me) { - if (!flags.resizing && (me->state & Button1Mask) && functions.move && + if (flags.moving) + doMove(me->x_root, me->y_root); + else if (!flags.resizing && (me->state & Button1Mask) && functions.move && (frame.title == me->window || frame.label == me->window || - frame.handle == me->window || frame.window == me->window)) { - if (!flags.moving) - startMove(me->x_root, me->y_root); - else - doMove(me->x_root, me->y_root); - } else if (functions.resize && + frame.handle == me->window || frame.window == me->window)) + startMove(me->x_root, me->y_root); + else if (functions.resize && (((me->state & Button1Mask) && (me->window == frame.right_grip || me->window == frame.left_grip)) || (me->state & (Mod1Mask | Button3Mask) &&
M
src/Workspace.cc
→
src/Workspace.cc
@@ -606,6 +606,7 @@ case BScreen::ColSmartPlacement:
place = colSmartPlacement(window_size, space); break; case BScreen::UnderMousePlacement: + case BScreen::ClickMousePlacement: place = underMousePlacement(window_size, space); break; } // switch
M
src/openbox.cc
→
src/openbox.cc
@@ -479,9 +479,19 @@
if (! win) win = new OpenboxWindow(*this, e->xmaprequest.window); - if ((win = searchWindow(e->xmaprequest.window))) + if ((win = searchWindow(e->xmaprequest.window))) { win->mapRequestEvent(&e->xmaprequest); - + // if we're using the click to place placement type, then immediately + // after the window is mapped, we need to start interactively moving it + if (win->getScreen()->placementPolicy() == BScreen::ClickMousePlacement) { + int x, y, rx, ry; + Window c, r; + unsigned int m; + XQueryPointer(getXDisplay(), win->getScreen()->getRootWindow(), + &r, &c, &rx, &ry, &x, &y, &m); + win->startMove(rx, ry); + } + } break; }