26 #ifndef WAYLAND_CLIENT_HPP
27 #define WAYLAND_CLIENT_HPP
37 #include <wayland-version.hpp>
38 #include <wayland-client-core.h>
39 #include <wayland-util.hpp>
47 using log_handler = std::function<void(std::string)> ;
57 void set_log_handler(log_handler handler);
85 events_base_t() =
default;
86 events_base_t(
const events_base_t&) =
default;
87 events_base_t(events_base_t&&) noexcept = default;
88 events_base_t& operator=(const events_base_t&) = default;
89 events_base_t& operator=(events_base_t&&) noexcept = default;
90 virtual ~events_base_t() noexcept = default;
149 wl_proxy *proxy =
nullptr;
150 detail::proxy_data_t *data =
nullptr;
151 wrapper_type type = wrapper_type::standard;
152 friend class detail::argument_t;
153 friend struct detail::proxy_data_t;
156 const wl_interface *
interface = nullptr;
159 std::function<proxy_t(proxy_t)> copy_constructor;
162 static int c_dispatcher(
const void *implementation,
void *target,
163 uint32_t opcode,
const wl_message *message,
167 proxy_t marshal_single(uint32_t opcode,
const wl_interface *interface,
168 const std::vector<detail::argument_t>& args, std::uint32_t version = 0);
171 void set_interface(
const wl_interface *iface);
172 void set_copy_constructor(
const std::function<proxy_t(proxy_t)>& func);
182 template <
typename...T>
183 void marshal(uint32_t opcode,
const T& ...args)
185 std::vector<detail::argument_t> v = { detail::argument_t(args)... };
186 marshal_single(opcode,
nullptr, v);
190 template <
typename...T>
191 proxy_t marshal_constructor(uint32_t opcode,
const wl_interface *interface,
194 std::vector<detail::argument_t> v = { detail::argument_t(args)... };
195 return marshal_single(opcode, interface, v);
199 template <
typename...T>
200 proxy_t marshal_constructor_versioned(uint32_t opcode,
const wl_interface *interface,
201 uint32_t version,
const T& ...args)
203 std::vector<detail::argument_t> v = { detail::argument_t(args)... };
204 return marshal_single(opcode, interface, v, version);
208 void set_destroy_opcode(uint32_t destroy_opcode);
215 void set_events(std::shared_ptr<detail::events_base_t> events,
216 int(*dispatcher)(uint32_t,
const std::vector<detail::any>&,
const std::shared_ptr<detail::events_base_t>&));
219 std::shared_ptr<detail::events_base_t> get_events();
224 struct construct_proxy_wrapper_tag {};
226 proxy_t(
const proxy_t &wrapped_proxy, construct_proxy_wrapper_tag );
234 proxy_t(wl_proxy *p, wrapper_type t = wrapper_type::standard, event_queue_t
const& queue = event_queue_t());
241 proxy_t(
const proxy_t &p);
248 proxy_t &operator=(
const proxy_t &p);
256 proxy_t(proxy_t &&p) noexcept;
263 proxy_t &operator=(proxy_t &&p) noexcept;
279 uint32_t get_id() const;
284 std::
string get_class() const;
298 uint32_t get_version() const;
321 wl_proxy *c_ptr()
const;
327 bool proxy_has_object()
const;
333 operator bool()
const;
337 bool operator==(
const proxy_t &right)
const;
341 bool operator!=(
const proxy_t &right)
const;
348 void proxy_release();
383 bool is_finalized()
const;
407 read_intent(wl_display *display, wl_event_queue *event_queue =
nullptr);
411 wl_event_queue *event_queue =
nullptr;
412 bool finalized =
false;
482 display_t(proxy_t
const &wrapped_proxy, construct_proxy_wrapper_tag );
540 ~display_t() noexcept =
default;
563 int roundtrip()
const;
650 int dispatch_queue_pending(
const event_queue_t& queue)
const;
672 int dispatch()
const;
710 int dispatch_pending()
const;
722 int get_error()
const;
738 std::tuple<int, bool> flush()
const;
761 operator wl_display*()
const;
765 display_t proxy_create_wrapper();
769 #include <wayland-client-protocol.hpp>
Represents a connection to the compositor and acts as a proxy to the display singleton object...
Represents an intention to read from the display file descriptor.
Represents a protocol object on the client side.
Refcounted wrapper for C objects.
A queue for proxy_t object events.