all repos — fluxbox @ ea466fa985f251bdd4a5afe19a41ee28ac91035d

custom fork of the fluxbox windowmanager

introduce autotabplacement
Thomas Lübking thomas.luebking@gmail.com
commit

ea466fa985f251bdd4a5afe19a41ee28ac91035d

parent

4be68df4b555015bff2fa5d44b1985bdede88792

3 files changed, 21 insertions(+), 9 deletions(-)

jump to
M src/Screen.ccsrc/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.ccsrc/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.hhsrc/ScreenPlacement.hh

@@ -48,7 +48,8 @@ COLSMARTPLACEMENT,

COLMINOVERLAPPLACEMENT, ROWMINOVERLAPPLACEMENT, CASCADEPLACEMENT, - UNDERMOUSEPLACEMENT + UNDERMOUSEPLACEMENT, + AUTOTABPLACEMENT }; enum RowDirection {