added UnderMouse windwo placement.
Dana Jansens danakj@orodu.net
7 files changed,
63 insertions(+),
69 deletions(-)
M
src/Screen.cc
→
src/Screen.cc
@@ -1026,6 +1026,7 @@ switch (resource.placement_policy) {
case CascadePlacement: placement = "CascadePlacement"; break; case BestFitPlacement: placement = "BestFitPlacement"; break; case ColSmartPlacement: placement = "ColSmartPlacement"; break; + case UnderMousePlacement: placement = "UnderMousePlacement"; break; default: case RowSmartPlacement: placement = "RowSmartPlacement"; break; }@@ -1220,7 +1221,7 @@ rclass << rscreen.str() << "RowPlacementDirection" << ends;
if (config.getValue(rname.str(), rclass.str(), s)) { if (0 == strncasecmp(s.c_str(), "RightToLeft", s.length())) resource.row_direction = RightLeft; - else if (0 == strncasecmp(s.c_str(), "LeftToRight", s.length())) + else //if (0 == strncasecmp(s.c_str(), "LeftToRight", s.length())) resource.row_direction = LeftRight; } else resource.row_direction = LeftRight;@@ -1231,7 +1232,7 @@ rclass << rscreen.str() << "ColPlacementDirection" << ends;
if (config.getValue(rname.str(), rclass.str(), s)) { if (0 == strncasecmp(s.c_str(), "BottomToTop", s.length())) resource.col_direction = BottomTop; - else if (0 == strncasecmp(s.c_str(), "TopToBottom", s.length())) + else //if (0 == strncasecmp(s.c_str(), "TopToBottom", s.length())) resource.col_direction = TopBottom; } else resource.col_direction = TopBottom;@@ -1272,7 +1273,7 @@ } else if (0 == strncasecmp(s.c_str(), "AutoRaiseSloppyFocus",
s.length())) { resource.sloppy_focus = true; resource.auto_raise = true; - } else if (0 == strncasecmp(s.c_str(), "SloppyFocus", s.length())) { + } else { //if (0 == strncasecmp(s.c_str(), "SloppyFocus", s.length())) { resource.sloppy_focus = true; resource.auto_raise = false; }@@ -1299,7 +1300,9 @@ else if (0 == strncasecmp(s.c_str(), "ColSmartPlacement", s.length()))
resource.placement_policy = ColSmartPlacement; else if (0 == strncasecmp(s.c_str(), "BestFitPlacement", s.length())) resource.placement_policy = BestFitPlacement; - else if (0 == strncasecmp(s.c_str(), "CascadePlacement", s.length())) + else if (0 == strncasecmp(s.c_str(), "UnderMousePlacement", s.length())) + resource.placement_policy = UnderMousePlacement; + else //if (0 == strncasecmp(s.c_str(), "CascadePlacement", s.length())) resource.placement_policy = CascadePlacement; } else resource.placement_policy = CascadePlacement;@@ -1323,7 +1326,7 @@ rclass << rscreen.str() << "DateFormat" << ends;
if (config.getValue(rname.str(), rclass.str(), s)) { if (strncasecmp(s.c_str(), "European", s.length())) resource.date_format = B_EuropeanDate; - else if (strncasecmp(s.c_str(), "American", s.length())) + else //if (strncasecmp(s.c_str(), "American", s.length())) resource.date_format = B_AmericanDate; } else resource.date_format = B_AmericanDate;
M
src/Screen.h
→
src/Screen.h
@@ -312,7 +312,8 @@ void updateNetizenWindowRaise(Window);
void updateNetizenWindowLower(Window); enum { RowSmartPlacement = 1, ColSmartPlacement, CascadePlacement, - BestFitPlacement, LeftRight, RightLeft, TopBottom, BottomTop }; + BestFitPlacement, UnderMousePlacement, + LeftRight, RightLeft, TopBottom, BottomTop }; enum { LeftJustify = 1, RightJustify, CenterJustify }; enum { RoundBullet = 1, TriangleBullet, SquareBullet, NoBullet }; enum { Restart = 1, RestartOther, Exit, Shutdown, Execute, Reconfigure,
M
src/Workspace.cc
→
src/Workspace.cc
@@ -444,6 +444,26 @@ } else
return NULL; //fall back to cascade } +Point *Workspace::underMousePlacement(const Size &win_size, const Rect &space) { + Point *pt; + + int x, y, rx, ry; + Window c, r; + unsigned int m; + XQueryPointer(screen.getOpenbox().getXDisplay(), screen.getRootWindow(), + &r, &c, &rx, &ry, &x, &y, &m); + pt = new Point(rx - win_size.w() / 2, ry - win_size.h() / 2); + + if (pt->x() < space.x()) + pt->setX(space.x()); + if (pt->y() < space.y()) + pt->setY(space.y()); + if (pt->x() + win_size.w() > space.x() + space.w()) + pt->setX(space.x() + space.w() - win_size.w()); + if (pt->y() + win_size.h() > space.y() + space.h()) + pt->setY(space.y() + space.h() - win_size.h()); + return pt; +} Point *Workspace::rowSmartPlacement(const Size &win_size, const Rect &space) { bool placed=false;@@ -587,8 +607,8 @@
void Workspace::placeWindow(OpenboxWindow &win) { Rect space = screen.availableArea(); - const Size window_size(win.area().w()+screen.getBorderWidth() * 4, - win.area().h()+screen.getBorderWidth() * 4); + const Size window_size(win.area().w()+screen.getBorderWidth() * 2, + win.area().h()+screen.getBorderWidth() * 2); Point *place = NULL; LinkedListIterator<OpenboxWindow> it(windowList);@@ -601,6 +621,9 @@ place = rowSmartPlacement(window_size, space);
break; case BScreen::ColSmartPlacement: place = colSmartPlacement(window_size, space); + break; + case BScreen::UnderMousePlacement: + place = underMousePlacement(window_size, space); break; } // switch
M
src/Workspace.h
→
src/Workspace.h
@@ -48,6 +48,7 @@
protected: void placeWindow(OpenboxWindow &); Point *bestFitPlacement(const Size &win_size, const Rect &space); + Point *underMousePlacement(const Size &win_size, const Rect &space); Point *rowSmartPlacement(const Size &win_size, const Rect &space); Point *colSmartPlacement(const Size &win_size, const Rect &space); Point *const cascadePlacement(const OpenboxWindow &window, const Rect &space);