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/render/decorations/DecorationPositioner.hpp | 31 ++++++++++++++----------- 1 file changed, 17 insertions(+), 14 deletions(-) (limited to 'src/render/decorations/DecorationPositioner.hpp') diff --git a/src/render/decorations/DecorationPositioner.hpp b/src/render/decorations/DecorationPositioner.hpp index 140ecace..b99891b6 100644 --- a/src/render/decorations/DecorationPositioner.hpp +++ b/src/render/decorations/DecorationPositioner.hpp @@ -3,12 +3,15 @@ #include #include #include -#include +#include #include "../../helpers/Box.hpp" class CWindow; class IHyprWindowDecoration; +typedef std::shared_ptr PHLWINDOW; +typedef std::weak_ptr PHLWINDOWREF; + enum eDecorationPositioningPolicy { DECORATION_POSITION_ABSOLUTE = 0, /* Decoration wants absolute positioning */ DECORATION_POSITION_STICKY, /* Decoration is stuck to some edge of a window */ @@ -59,21 +62,21 @@ class CDecorationPositioner { public: CDecorationPositioner(); - Vector2D getEdgeDefinedPoint(uint32_t edges, CWindow* pWindow); + Vector2D getEdgeDefinedPoint(uint32_t edges, PHLWINDOW pWindow); // called on resize, or insert/removal of a new deco - void onWindowUpdate(CWindow* pWindow); + void onWindowUpdate(PHLWINDOW pWindow); void uncacheDecoration(IHyprWindowDecoration* deco); - SWindowDecorationExtents getWindowDecorationReserved(CWindow* pWindow); - SWindowDecorationExtents getWindowDecorationExtents(CWindow* pWindow, bool inputOnly = false); - CBox getBoxWithIncludedDecos(CWindow* pWindow); + SWindowDecorationExtents getWindowDecorationReserved(PHLWINDOW pWindow); + SWindowDecorationExtents getWindowDecorationExtents(PHLWINDOW pWindow, bool inputOnly = false); + CBox getBoxWithIncludedDecos(PHLWINDOW pWindow); void repositionDeco(IHyprWindowDecoration* deco); CBox getWindowDecorationBox(IHyprWindowDecoration* deco); - void forceRecalcFor(CWindow* pWindow); + void forceRecalcFor(PHLWINDOW pWindow); private: struct SWindowPositioningData { - CWindow* pWindow = nullptr; + PHLWINDOWREF pWindow; IHyprWindowDecoration* pDecoration = nullptr; SDecorationPositioningInfo positioningInfo; SDecorationPositioningReply lastReply; @@ -87,13 +90,13 @@ class CDecorationPositioner { bool needsRecalc = false; }; - std::unordered_map m_mWindowDatas; - std::vector> m_vWindowPositioningDatas; + std::map> m_mWindowDatas; + std::vector> m_vWindowPositioningDatas; - SWindowPositioningData* getDataFor(IHyprWindowDecoration* pDecoration, CWindow* pWindow); - void onWindowUnmap(CWindow* pWindow); - void onWindowMap(CWindow* pWindow); - void sanitizeDatas(); + SWindowPositioningData* getDataFor(IHyprWindowDecoration* pDecoration, PHLWINDOW pWindow); + void onWindowUnmap(PHLWINDOW pWindow); + void onWindowMap(PHLWINDOW pWindow); + void sanitizeDatas(); }; inline std::unique_ptr g_pDecorationPositioner; \ No newline at end of file -- cgit v1.2.3