diff options
| author | outfoxxed <outfoxxed@outfoxxed.me> | 2025-01-02 03:53:57 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-02 11:53:57 +0000 |
| commit | 42fd366046d67c52449001b6a6e9b64427aee712 (patch) | |
| tree | 70c4f0c6fb238a8fd775fa66d6f7990b696533fa /src/protocols/AlphaModifier.hpp | |
| parent | cbd2451570d5c4d8b40035c3fcbabfb298385458 (diff) | |
protocols: fix alpha-modifier noncompliance (#8929)
Also fixes small issues with hyprland-surface opacity < 1.0 while
surface alpha = 1.0.
Diffstat (limited to 'src/protocols/AlphaModifier.hpp')
| -rw-r--r-- | src/protocols/AlphaModifier.hpp | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/src/protocols/AlphaModifier.hpp b/src/protocols/AlphaModifier.hpp index 1bb9cf23..43f78bef 100644 --- a/src/protocols/AlphaModifier.hpp +++ b/src/protocols/AlphaModifier.hpp @@ -8,25 +8,28 @@ #include "../helpers/signal/Signal.hpp" class CWLSurfaceResource; +class CAlphaModifierProtocol; class CAlphaModifier { public: CAlphaModifier(SP<CWpAlphaModifierSurfaceV1> resource_, SP<CWLSurfaceResource> surface); - ~CAlphaModifier(); - bool good(); - SP<CWLSurfaceResource> getSurface(); - void onSurfaceDestroy(); + bool good(); + void setResource(SP<CWpAlphaModifierSurfaceV1> resource); private: - SP<CWpAlphaModifierSurfaceV1> resource; - WP<CWLSurfaceResource> pSurface; + SP<CWpAlphaModifierSurfaceV1> m_pResource; + WP<CWLSurfaceResource> m_pSurface; + float m_fAlpha = 1.0; - void setSurfaceAlpha(float a); + void destroy(); struct { - CHyprSignalListener destroySurface; + CHyprSignalListener surfaceCommitted; + CHyprSignalListener surfaceDestroyed; } listeners; + + friend class CAlphaModifierProtocol; }; class CAlphaModifierProtocol : public IWaylandProtocol { @@ -36,13 +39,13 @@ class CAlphaModifierProtocol : public IWaylandProtocol { virtual void bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id); private: - void onManagerResourceDestroy(wl_resource* res); - void destroyModifier(CAlphaModifier* decoration); - void onGetSurface(CWpAlphaModifierV1* pMgr, uint32_t id, SP<CWLSurfaceResource> surface); + void destroyManager(CWpAlphaModifierV1* res); + void destroyAlphaModifier(CAlphaModifier* surface); + void getSurface(CWpAlphaModifierV1* manager, uint32_t id, SP<CWLSurfaceResource> surface); // std::vector<UP<CWpAlphaModifierV1>> m_vManagers; - std::unordered_map<WP<CWLSurfaceResource>, UP<CAlphaModifier>> m_mAlphaModifiers; // xdg_toplevel -> deco + std::unordered_map<WP<CWLSurfaceResource>, UP<CAlphaModifier>> m_mAlphaModifiers; friend class CAlphaModifier; }; |
