summaryrefslogtreecommitdiff
path: root/src/protocols/XWaylandShell.hpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2024-05-25 22:43:51 +0200
committerGitHub <noreply@github.com>2024-05-25 22:43:51 +0200
commitaddd3e7f1aeb670dd91d26005aaeccce3efb1ae7 (patch)
tree7eae3cf1d780ab84ff34ee0fce5ed85d9ee69c90 /src/protocols/XWaylandShell.hpp
parenta71207434c0bc2c8e05e94b1619e68059a002879 (diff)
xwayland: move to hyprland impl (#6086)
Diffstat (limited to 'src/protocols/XWaylandShell.hpp')
-rw-r--r--src/protocols/XWaylandShell.hpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/protocols/XWaylandShell.hpp b/src/protocols/XWaylandShell.hpp
new file mode 100644
index 00000000..2c03d172
--- /dev/null
+++ b/src/protocols/XWaylandShell.hpp
@@ -0,0 +1,66 @@
+#pragma once
+
+#include <memory>
+#include <vector>
+#include <cstdint>
+#include "WaylandProtocol.hpp"
+#include "xwayland-shell-v1.hpp"
+#include "../helpers/signal/Signal.hpp"
+
+class CXWaylandSurfaceResource {
+ public:
+ CXWaylandSurfaceResource(SP<CXwaylandSurfaceV1> resource_, wlr_surface* surface_);
+ ~CXWaylandSurfaceResource();
+
+ bool good();
+ wl_client* client();
+
+ struct {
+ CSignal destroy;
+ } events;
+
+ uint64_t serial = 0;
+ wlr_surface* surface = nullptr;
+
+ WP<CXWaylandSurfaceResource> self;
+
+ private:
+ SP<CXwaylandSurfaceV1> resource;
+ wl_client* pClient = nullptr;
+};
+
+class CXWaylandShellResource {
+ public:
+ CXWaylandShellResource(SP<CXwaylandShellV1> resource_);
+
+ bool good();
+
+ private:
+ SP<CXwaylandShellV1> resource;
+};
+
+class CXWaylandShellProtocol : public IWaylandProtocol {
+ public:
+ CXWaylandShellProtocol(const wl_interface* iface, const int& ver, const std::string& name);
+
+ virtual void bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id);
+
+ struct {
+ CSignal newSurface; // SP<CXWaylandSurfaceResource>. Fired when it sets a serial, otherwise it's useless
+ } events;
+
+ private:
+ void destroyResource(CXWaylandSurfaceResource* resource);
+ void destroyResource(CXWaylandShellResource* resource);
+
+ //
+ std::vector<SP<CXWaylandShellResource>> m_vManagers;
+ std::vector<SP<CXWaylandSurfaceResource>> m_vSurfaces;
+
+ friend class CXWaylandSurfaceResource;
+ friend class CXWaylandShellResource;
+};
+
+namespace PROTO {
+ inline UP<CXWaylandShellProtocol> xwaylandShell;
+};