From bca7804bb6e1bf5ce5a99b9ae4806be25e36993c Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Sat, 27 Apr 2024 12:43:12 +0100 Subject: internal: Window storage rework - part 1 (#5762) * Window storage rework - part 1 * format * remove useless include * fix pch * format * fix crash in dwindle * fix vram leak * prefer .expired() for bool checks --- src/layout/DwindleLayout.hpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'src/layout/DwindleLayout.hpp') diff --git a/src/layout/DwindleLayout.hpp b/src/layout/DwindleLayout.hpp index 11b927d1..13834bc7 100644 --- a/src/layout/DwindleLayout.hpp +++ b/src/layout/DwindleLayout.hpp @@ -16,7 +16,7 @@ struct SDwindleNodeData { SDwindleNodeData* pParent = nullptr; bool isNode = false; - CWindow* pWindow = nullptr; + PHLWINDOWREF pWindow; std::array children = {nullptr, nullptr}; @@ -34,7 +34,7 @@ struct SDwindleNodeData { // For list lookup bool operator==(const SDwindleNodeData& rhs) const { - return pWindow == rhs.pWindow && workspaceID == rhs.workspaceID && box == rhs.box && pParent == rhs.pParent && children[0] == rhs.children[0] && + return pWindow.lock() == rhs.pWindow.lock() && workspaceID == rhs.workspaceID && box == rhs.box && pParent == rhs.pParent && children[0] == rhs.children[0] && children[1] == rhs.children[1]; } @@ -45,21 +45,21 @@ struct SDwindleNodeData { class CHyprDwindleLayout : public IHyprLayout { public: - virtual void onWindowCreatedTiling(CWindow*, eDirection direction = DIRECTION_DEFAULT); - virtual void onWindowRemovedTiling(CWindow*); - virtual bool isWindowTiled(CWindow*); + virtual void onWindowCreatedTiling(PHLWINDOW, eDirection direction = DIRECTION_DEFAULT); + virtual void onWindowRemovedTiling(PHLWINDOW); + virtual bool isWindowTiled(PHLWINDOW); virtual void recalculateMonitor(const int&); - virtual void recalculateWindow(CWindow*); + virtual void recalculateWindow(PHLWINDOW); virtual void onBeginDragWindow(); - virtual void resizeActiveWindow(const Vector2D&, eRectCorner corner = CORNER_NONE, CWindow* pWindow = nullptr); - virtual void fullscreenRequestForWindow(CWindow*, eFullscreenMode, bool); + virtual void resizeActiveWindow(const Vector2D&, eRectCorner corner = CORNER_NONE, PHLWINDOW pWindow = nullptr); + virtual void fullscreenRequestForWindow(PHLWINDOW, eFullscreenMode, bool); virtual std::any layoutMessage(SLayoutMessageHeader, std::string); - virtual SWindowRenderLayoutHints requestRenderHints(CWindow*); - virtual void switchWindows(CWindow*, CWindow*); - virtual void moveWindowTo(CWindow*, const std::string& dir, bool silent); - virtual void alterSplitRatio(CWindow*, float, bool); + virtual SWindowRenderLayoutHints requestRenderHints(PHLWINDOW); + virtual void switchWindows(PHLWINDOW, PHLWINDOW); + virtual void moveWindowTo(PHLWINDOW, const std::string& dir, bool silent); + virtual void alterSplitRatio(PHLWINDOW, float, bool); virtual std::string getLayoutName(); - virtual void replaceWindowDataWith(CWindow* from, CWindow* to); + virtual void replaceWindowDataWith(PHLWINDOW from, PHLWINDOW to); virtual Vector2D predictSizeForNewWindowTiled(); virtual void onEnable(); @@ -80,13 +80,13 @@ class CHyprDwindleLayout : public IHyprLayout { int getNodesOnWorkspace(const int&); void applyNodeDataToWindow(SDwindleNodeData*, bool force = false); void calculateWorkspace(const PHLWORKSPACE& pWorkspace); - SDwindleNodeData* getNodeFromWindow(CWindow*); + SDwindleNodeData* getNodeFromWindow(PHLWINDOW); SDwindleNodeData* getFirstNodeOnWorkspace(const int&); SDwindleNodeData* getClosestNodeOnWorkspace(const int&, const Vector2D&); SDwindleNodeData* getMasterNodeOnWorkspace(const int&); - void toggleSplit(CWindow*); - void swapSplit(CWindow*); + void toggleSplit(PHLWINDOW); + void swapSplit(PHLWINDOW); eDirection overrideDirection = DIRECTION_DEFAULT; @@ -101,8 +101,8 @@ struct std::formatter : std::formatter { if (!node) return std::format_to(out, "[Node nullptr]"); std::format_to(out, "[Node {:x}: workspace: {}, pos: {:j2}, size: {:j2}", (uintptr_t)node, node->workspaceID, node->box.pos(), node->box.size()); - if (!node->isNode && node->pWindow) - std::format_to(out, ", window: {:x}", node->pWindow); + if (!node->isNode && !node->pWindow.expired()) + std::format_to(out, ", window: {:x}", node->pWindow.lock()); return std::format_to(out, "]"); } }; -- cgit v1.2.3