introduce autotabplacement
Thomas Lübking thomas.luebking@gmail.com
3 files changed,
21 insertions(+),
9 deletions(-)
M
src/Screen.cc
→
src/Screen.cc
@@ -1138,6 +1138,8 @@ }
// check if it should be grouped with something else WinClient* other = findGroupLeft(*winclient); + if (!other && m_placement_strategy->placementPolicy() == ScreenPlacement::AUTOTABPLACEMENT) + other = FocusControl::focusedWindow(); FluxboxWindow* win = other ? other->fbwindow() : 0; if (other && win) {
M
src/ScreenPlacement.cc
→
src/ScreenPlacement.cc
@@ -82,6 +82,9 @@ break;
case UNDERMOUSEPLACEMENT: m_strategy.reset(new UnderMousePlacement()); break; + case AUTOTABPLACEMENT: + m_strategy.reset(0); + break; } }@@ -96,14 +99,16 @@ place_x = head_left;
place_y = head_top; bool placed = false; - try { - placed = m_strategy->placeWindow(win, head, place_x, place_y); - } catch (std::bad_cast & cast) { - // This should not happen. - // If for some reason we change the PlacementStrategy in Screen - // from ScreenPlacement to something else then we might get - // bad_cast from some placement strategies. - cerr<<"Failed to place window: "<<cast.what()<<endl; + if (m_strategy) { + try { + placed = m_strategy->placeWindow(win, head, place_x, place_y); + } catch (std::bad_cast & cast) { + // This should not happen. + // If for some reason we change the PlacementStrategy in Screen + // from ScreenPlacement to something else then we might get + // bad_cast from some placement strategies. + cerr<<"Failed to place window: "<<cast.what()<<endl; + } } if (!placed) {@@ -194,6 +199,8 @@ case ScreenPlacement::UNDERMOUSEPLACEMENT:
return "UnderMousePlacement"; case ScreenPlacement::CASCADEPLACEMENT: return "CascadePlacement"; + case ScreenPlacement::AUTOTABPLACEMENT: + return "AutotabPlacement"; } return "RowSmartPlacement";@@ -213,6 +220,8 @@ else if (strcasecmp("UnderMousePlacement", str) == 0)
*(*this) = ScreenPlacement::UNDERMOUSEPLACEMENT; else if (strcasecmp("CascadePlacement", str) == 0) *(*this) = ScreenPlacement::CASCADEPLACEMENT; + else if (strcasecmp("AutotabPlacement", str) == 0) + *(*this) = ScreenPlacement::AUTOTABPLACEMENT; else setDefaultValue(); }
M
src/ScreenPlacement.hh
→
src/ScreenPlacement.hh
@@ -48,7 +48,8 @@ COLSMARTPLACEMENT,
COLMINOVERLAPPLACEMENT, ROWMINOVERLAPPLACEMENT, CASCADEPLACEMENT, - UNDERMOUSEPLACEMENT + UNDERMOUSEPLACEMENT, + AUTOTABPLACEMENT }; enum RowDirection {