return -1;
}
+bool App::pop_pending_events() {
+ bool x{true};
+ return this->pending_events.compare_exchange_strong(
+ x, false, std::memory_order_consume);
+}
+
+void App::set_pending_events() {
+ this->pending_events.store(true, std::memory_order_release);
+}
+
+optional<int> App::lookup_id(char const *name) {
+ return this->id_alloc.lookup(std::string(name));
+}
+optional<std::string> App::lookup_name(int id) {
+ return this->id_alloc.lookup(id);
+}
+
// _ _ _ _ _ ____
// (_)_ __ (_) |_ | | __ _ _ _ ___ _ _| |_ / /\ \
// | | '_ \| | __| | |/ _` | | | |/ _ \| | | | __| | | |
return "No EndDraw pending for surface";
}
+void App::api_ping() {
+ this->dispatch_pending_events();
+}
+
// _ _ _____ _
// _ __ _ __ _____ _(_) ___ __| | | ____|_ _____ _ __ | |_ ___
// | '_ \| '__/ _ \ \/ / |/ _ \/ _` | | _| \ \ / / _ \ '_ \| __/ __|
// ID allocation and proxy methods for lookup
struct id_allocator id_alloc;
- optional<int> lookup_id(char const *name) {
- return this->id_alloc.lookup(std::string(name));
- }
- optional<std::string> lookup_name(int id) {
- return this->id_alloc.lookup(id);
- }
// Set by AFB API when wayland events need to be dispatched
std::atomic<bool> pending_events;
- void set_pending_events() {
- this->pending_events.store(true, std::memory_order_release);
- }
- bool pop_pending_events() {
- bool x{true};
- return this->pending_events.compare_exchange_strong(
- x, false, std::memory_order_consume);
- }
std::vector<int> pending_end_draw;
- void enqueue_flushdraw(int surface_id);
- void check_flushdraw(int surface_id);
explicit App(wl::display *d);
~App();
App &operator=(App &&) = delete;
int init();
- int init_layers();
int dispatch_events();
int dispatch_pending_events();
void surface_set_layout_full(uint32_t surface_id);
void surface_set_layout_split(uint32_t surface_id, uint32_t sub_surface_id);
+ void set_pending_events();
- // Allocate a surface ID for this role
result<int> api_request_surface(char const *drawing_name);
-
- // Activate (i.e. make visible, if allowed!) a surface
char const *api_activate_surface(char const *drawing_name);
char const *api_deactivate_surface(char const *drawing_name);
char const *api_enddraw(char const *drawing_name);
+ void api_ping();
// Events from the compositor we are interested in
void surface_created(uint32_t surface_id);
void surface_removed(uint32_t surface_id);
+private:
+ optional<int> lookup_id(char const *name);
+ optional<std::string> lookup_name(int id);
+
+ bool pop_pending_events();
+
+ void enqueue_flushdraw(int surface_id);
+ void check_flushdraw(int surface_id);
+
+ int init_layers();
+
// TMC WM Events to clients
void emit_activated(char const *label);
void emit_deactivated(char const *label);