diff options
Diffstat (limited to 'src/protocols/XDGShell.hpp')
| -rw-r--r-- | src/protocols/XDGShell.hpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/protocols/XDGShell.hpp b/src/protocols/XDGShell.hpp index e214b6ac..1dbeb209 100644 --- a/src/protocols/XDGShell.hpp +++ b/src/protocols/XDGShell.hpp @@ -59,6 +59,7 @@ class CXDGPopupResource { struct { CSignal reposition; + CSignal dismissed; CSignal destroy; // only the role } events; @@ -198,10 +199,10 @@ class CXDGPositionerResource { bool good(); - SXDGPositionerState state; + SXDGPositionerState state; - WP<CXDGWMBase> owner; - WP<CXDGPositionerResource> self; + WP<CXDGWMBase> owner; + WP<CXDGPositionerResource> self; private: SP<CXdgPositioner> resource; @@ -244,6 +245,14 @@ class CXDGShellProtocol : public IWaylandProtocol { std::vector<SP<CXDGToplevelResource>> m_vToplevels; std::vector<SP<CXDGPopupResource>> m_vPopups; + // current popup grab + WP<CXDGPopupResource> grabOwner; + SP<CSeatGrab> grab; + std::vector<WP<CXDGPopupResource>> grabbed; + + void addOrStartGrab(SP<CXDGPopupResource> popup); + void onPopupDestroy(WP<CXDGPopupResource> popup); + friend class CXDGWMBase; friend class CXDGPositionerResource; friend class CXDGSurfaceResource; |
