From 7e9bfc504ca2f49f29f545b6efd57a30af6ddddd Mon Sep 17 00:00:00 2001 From: David Delarosa Date: Thu, 25 May 2023 00:27:50 +0300 Subject: [PATCH] Update to new ipc version --- include/modules/dwl/tags.hpp | 6 +- ...nstable-v1.xml => dwl-ipc-unstable-v2.xml} | 57 +++++++++---------- protocol/meson.build | 2 +- src/modules/dwl/tags.cpp | 47 ++++++++------- 4 files changed, 55 insertions(+), 57 deletions(-) rename protocol/{dwl-bar-ipc-unstable-v1.xml => dwl-ipc-unstable-v2.xml} (78%) diff --git a/include/modules/dwl/tags.hpp b/include/modules/dwl/tags.hpp index 6e6d086f..53dff989 100644 --- a/include/modules/dwl/tags.hpp +++ b/include/modules/dwl/tags.hpp @@ -5,7 +5,7 @@ #include "AModule.hpp" #include "bar.hpp" -#include "dwl-bar-ipc-unstable-v1-client-protocol.h" +#include "dwl-ipc-unstable-v2-client-protocol.h" #include "xdg-output-unstable-v1-client-protocol.h" namespace waybar::modules::dwl { @@ -21,14 +21,14 @@ class Tags : public waybar::AModule { void handle_primary_clicked(uint32_t tag); bool handle_button_press(GdkEventButton *event_button, uint32_t tag); - struct zdwl_manager_v1 *status_manager_; + struct zdwl_ipc_manager_v2 *status_manager_; struct wl_seat *seat_; private: const waybar::Bar &bar_; Gtk::Box box_; std::vector buttons_; - struct zdwl_output_v1 *output_status_; + struct zdwl_ipc_output_v2 *output_status_; }; } /* namespace waybar::modules::dwl */ diff --git a/protocol/dwl-bar-ipc-unstable-v1.xml b/protocol/dwl-ipc-unstable-v2.xml similarity index 78% rename from protocol/dwl-bar-ipc-unstable-v1.xml rename to protocol/dwl-ipc-unstable-v2.xml index 1b614b27..74a212f0 100644 --- a/protocol/dwl-bar-ipc-unstable-v1.xml +++ b/protocol/dwl-ipc-unstable-v2.xml @@ -3,9 +3,9 @@ This is largely ripped from somebar's ipc patchset; just with some personal modifications. I would probably just submit raphi's patchset but I don't think that would be polite. --> - + - This protocol allows clients to get updates from dwl and vice versa. + This protocol allows clients to update and get updates from dwl. Warning! The protocol described in this file is experimental and backward incompatible changes may be made. Backward compatible @@ -19,36 +19,36 @@ I would probably just submit raphi's patchset but I don't think that would be po reset. - + This interface is exposed as a global in wl_registry. - Clients can use this interface to get a dwl_output. - After binding the client will revieve dwl_manager.tag and dwl_manager.layout events. - The dwl_manager.tag and dwl_manager.layout events expose tags and layouts to the client. + Clients can use this interface to get a dwl_ipc_output. + After binding the client will recieve the dwl_ipc_manager.tags and dwl_ipc_manager.layout events. + The dwl_ipc_manager.tags and dwl_ipc_manager.layout events expose tags and layouts to the client. - - Indicates that the client will not the dwl_manager object anymore. + + Indicates that the client will not the dwl_ipc_manager object anymore. Objects created through this instance are not affected. - - Get a dwl_output for the specified wl_output. + + Get a dwl_ipc_outout for the specified wl_output. - + - - + + This event is sent after binding. A roundtrip after binding guarantees the client recieved all tags. - + @@ -60,12 +60,12 @@ I would probably just submit raphi's patchset but I don't think that would be po - + Observe and control a dwl output. Events are double-buffered: - Clients should cache events and redraw when a dwl_output.done event is sent. + Clients should cache events and redraw when a dwl_ipc_output.frame event is sent. Request are not double-buffered: The compositor will update immediately upon request. @@ -78,8 +78,8 @@ I would probably just submit raphi's patchset but I don't think that would be po - - Indicates to that the client no longer needs this dwl_output. + + Indicates to that the client no longer needs this dwl_ipc_output. @@ -121,34 +121,28 @@ I would probably just submit raphi's patchset but I don't think that would be po - + Indicates the appid has changed. - + - Indicates the layout has changed. Since layout symbols are now dynamic. - As opposed to the zdwl_manager_v1.layout event, this should take precendence when displaying. - This also means ignoring the zdwl_output_v1.layout event. + Indicates the layout has changed. Since layout symbols are dynamic. + As opposed to the zdwl_ipc_manager.layout event, this should take precendence when displaying. + You can ignore the zdwl_ipc_output.layout event. - Indicates that a sequence of status updates have finished and the client should redraw. - - - - - @@ -163,5 +157,10 @@ I would probably just submit raphi's patchset but I don't think that would be po + + + + + diff --git a/protocol/meson.build b/protocol/meson.build index 9c1b0193..e1e745a9 100644 --- a/protocol/meson.build +++ b/protocol/meson.build @@ -30,7 +30,7 @@ client_protocols = [ ['ext-workspace-unstable-v1.xml'], ['river-status-unstable-v1.xml'], ['river-control-unstable-v1.xml'], - ['dwl-bar-ipc-unstable-v1.xml'], + ['dwl-ipc-unstable-v2.xml'], ] client_protos_src = [] diff --git a/src/modules/dwl/tags.cpp b/src/modules/dwl/tags.cpp index fa640995..6d403316 100644 --- a/src/modules/dwl/tags.cpp +++ b/src/modules/dwl/tags.cpp @@ -8,7 +8,7 @@ #include #include "client.hpp" -#include "dwl-bar-ipc-unstable-v1-client-protocol.h" +#include "dwl-ipc-unstable-v2-client-protocol.h" #define TAG_INACTIVE 0 #define TAG_ACTIVE 1 @@ -21,43 +21,42 @@ wl_array tags, layouts; static uint num_tags = 0; -void toggle_visibility(void *data, zdwl_output_v1 *zdwl_output_v1) { + +void toggle_visibility(void* data, zdwl_ipc_output_v2* zdwl_output_v2) { // Intentionally empty } -void active(void *data, zdwl_output_v1 *zdwl_output_v1, uint32_t active) { +void active(void* data, zdwl_ipc_output_v2* zdwl_output_v2, uint32_t active) { // Intentionally empty } -static void set_tag(void *data, zdwl_output_v1 *zdwl_output_v1, uint32_t tag, uint32_t state, - uint32_t clients, uint32_t focused) { +static void set_tag(void* data, zdwl_ipc_output_v2* zdwl_output_v2, uint32_t tag, uint32_t state, uint32_t clients, uint32_t focused) { static_cast(data)->handle_view_tags(tag, state, clients, focused); - num_tags = - (state & ZDWL_OUTPUT_V1_TAG_STATE_ACTIVE) ? num_tags | (1 << tag) : num_tags & ~(1 << tag); + num_tags = (state & ZDWL_IPC_OUTPUT_V2_TAG_STATE_ACTIVE) ? num_tags | (1 << tag) : num_tags & ~(1 << tag); } -void set_layout_symbol(void *data, zdwl_output_v1 *zdwl_output_v1, const char *layout) { +void set_layout_symbol(void* data, zdwl_ipc_output_v2* zdwl_output_v2, const char *layout) { // Intentionally empty } -void title(void *data, zdwl_output_v1 *zdwl_output_v1, const char *title) { +void title(void* data, zdwl_ipc_output_v2* zdwl_output_v2, const char* title) { // Intentionally empty } -void dwl_frame(void *data, zdwl_output_v1 *zdwl_output_v1) { +void dwl_frame(void* data, zdwl_ipc_output_v2* zdwl_output_v2) { // Intentionally empty } -static void set_layout(void *data, zdwl_output_v1 *zdwl_output_v1, uint32_t layout) { +static void set_layout(void* data, zdwl_ipc_output_v2* zdwl_output_v2, uint32_t layout) { // Intentionally empty } -static void appid(void *data, zdwl_output_v1 *zdwl_output_v1, const char *appid){ - // Intentionally empty +static void appid(void *data, zdwl_ipc_output_v2 *zdwl_output_v2, const char *appid) { + // Intentionally empty }; -static const zdwl_output_v1_listener output_status_listener_impl{ +static const zdwl_ipc_output_v2_listener output_status_listener_impl { .toggle_visibility = toggle_visibility, .active = active, .tag = set_tag, @@ -70,9 +69,9 @@ static const zdwl_output_v1_listener output_status_listener_impl{ static void handle_global(void *data, struct wl_registry *registry, uint32_t name, const char *interface, uint32_t version) { - if (std::strcmp(interface, zdwl_manager_v1_interface.name) == 0) { - static_cast(data)->status_manager_ = static_cast( - (zdwl_manager_v1 *)wl_registry_bind(registry, name, &zdwl_manager_v1_interface, 3)); + if (std::strcmp(interface, zdwl_ipc_manager_v2_interface.name) == 0) { + static_cast(data)->status_manager_ = static_cast( + (zdwl_ipc_manager_v2*)wl_registry_bind(registry, name, &zdwl_ipc_manager_v2_interface, 3)); } if (std::strcmp(interface, wl_seat_interface.name) == 0) { version = std::min(version, 1); @@ -101,7 +100,7 @@ Tags::Tags(const std::string &id, const waybar::Bar &bar, const Json::Value &con wl_display_roundtrip(display); if (!status_manager_) { - spdlog::error("dwl_status_manager_v1 not advertised"); + spdlog::error("dwl_status_manager_v2 not advertised"); return; } @@ -146,29 +145,29 @@ Tags::Tags(const std::string &id, const waybar::Bar &bar, const Json::Value &con } struct wl_output *output = gdk_wayland_monitor_get_wl_output(bar_.output->monitor->gobj()); - output_status_ = zdwl_manager_v1_get_output(status_manager_, output); - zdwl_output_v1_add_listener(output_status_, &output_status_listener_impl, this); + output_status_ = zdwl_ipc_manager_v2_get_output(status_manager_, output); + zdwl_ipc_output_v2_add_listener(output_status_, &output_status_listener_impl, this); - zdwl_manager_v1_destroy(status_manager_); + zdwl_ipc_manager_v2_destroy(status_manager_); status_manager_ = nullptr; } Tags::~Tags() { if (status_manager_) { - zdwl_manager_v1_destroy(status_manager_); + zdwl_ipc_manager_v2_destroy(status_manager_); } } void Tags::handle_primary_clicked(uint32_t tag) { if (!output_status_) return; - zdwl_output_v1_set_tags(output_status_, tag, 1); + zdwl_ipc_output_v2_set_tags(output_status_, tag, 1); } bool Tags::handle_button_press(GdkEventButton *event_button, uint32_t tag) { if (event_button->type == GDK_BUTTON_PRESS && event_button->button == 3) { if (!output_status_) return true; - zdwl_output_v1_set_tags(output_status_, num_tags ^ tag, 0); + zdwl_ipc_output_v2_set_tags(output_status_, num_tags ^ tag, 0); } return true; }