diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-05-16 17:37:46 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-05-16 17:37:46 +0200 |
| commit | 50f978e518c83872a25a47b5ddde310ec24ac203 (patch) | |
| tree | e7632acf6ea22eae66fd1262e834212ff197fdf4 /src/layout | |
| parent | e90c1f7022ffd82e463c48260a97850c834f347d (diff) | |
Added togglesplit dispatcher
Diffstat (limited to 'src/layout')
| -rw-r--r-- | src/layout/DwindleLayout.cpp | 20 | ||||
| -rw-r--r-- | src/layout/DwindleLayout.hpp | 7 | ||||
| -rw-r--r-- | src/layout/IHyprLayout.hpp | 16 |
3 files changed, 32 insertions, 11 deletions
diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index c7e3aa12..d224e775 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -833,4 +833,24 @@ void CHyprDwindleLayout::alterSplitRatioBy(CWindow* pWindow, float ratio) { PNODE->pParent->splitRatio = std::clamp(PNODE->pParent->splitRatio + ratio, 0.1f, 1.9f); PNODE->pParent->recalcSizePosRecursive(); +} + +void CHyprDwindleLayout::layoutMessage(SLayoutMessageHeader header, std::string message) { + if (message == "togglegroup") + toggleWindowGroup(header.pWindow); + else if (message == "changegroupactive") + switchGroupWindow(header.pWindow); + else if (message == "togglesplit") + toggleSplit(header.pWindow); +} + +void CHyprDwindleLayout::toggleSplit(CWindow* pWindow) { + const auto PNODE = getNodeFromWindow(pWindow); + + if (!PNODE || !PNODE->pParent) + return; + + PNODE->pParent->splitTop = !PNODE->pParent->splitTop; + + PNODE->pParent->recalcSizePosRecursive(); }
\ No newline at end of file diff --git a/src/layout/DwindleLayout.hpp b/src/layout/DwindleLayout.hpp index c1fd7a7b..5513e0f8 100644 --- a/src/layout/DwindleLayout.hpp +++ b/src/layout/DwindleLayout.hpp @@ -50,8 +50,7 @@ public: virtual void onMouseMove(const Vector2D&); virtual void onWindowCreatedFloating(CWindow*); virtual void fullscreenRequestForWindow(CWindow*); - virtual void toggleWindowGroup(CWindow*); - virtual void switchGroupWindow(CWindow*); + virtual void layoutMessage(SLayoutMessageHeader, std::string); virtual SWindowRenderLayoutHints requestRenderHints(CWindow*); virtual void switchWindows(CWindow*, CWindow*); virtual void alterSplitRatioBy(CWindow*, float); @@ -71,5 +70,9 @@ public: SDwindleNodeData* getFirstNodeOnWorkspace(const int&); SDwindleNodeData* getMasterNodeOnWorkspace(const int&); + void toggleWindowGroup(CWindow*); + void switchGroupWindow(CWindow*); + void toggleSplit(CWindow*); + friend struct SDwindleNodeData; };
\ No newline at end of file diff --git a/src/layout/IHyprLayout.hpp b/src/layout/IHyprLayout.hpp index 2f569b6e..71f30e3d 100644 --- a/src/layout/IHyprLayout.hpp +++ b/src/layout/IHyprLayout.hpp @@ -8,6 +8,10 @@ struct SWindowRenderLayoutHints { CColor borderColor; }; +struct SLayoutMessageHeader { + CWindow* pWindow = nullptr; +}; + interface IHyprLayout { public: @@ -69,16 +73,10 @@ public: virtual void fullscreenRequestForWindow(CWindow*) = 0; /* - Called when the user requests a window to be made into a group, - or when they want the group to be released. - Everything else is free to interpret by the layout. - */ - virtual void toggleWindowGroup(CWindow*) = 0; - - /* - Called when the user requests a group window switch + Called when a dispatcher requests a custom message + The layout is free to ignore. */ - virtual void switchGroupWindow(CWindow*) = 0; + virtual void layoutMessage(SLayoutMessageHeader, std::string) = 0; /* Required to be handled, but may return just SWindowRenderLayoutHints() |
