From 81b4893b27a3581b098a3e359aee439f48035131 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Bonithon?= <gael@xfce.org> Date: Thu, 26 Dec 2024 17:58:28 +0100 Subject: [PATCH 1/4] XfwWorkspaceGroupWayland: Add missing property and private struct --- .../xfw-workspace-group-wayland.c | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/libxfce4windowing/xfw-workspace-group-wayland.c b/libxfce4windowing/xfw-workspace-group-wayland.c index a7701e9..6cafda8 100644 --- a/libxfce4windowing/xfw-workspace-group-wayland.c +++ b/libxfce4windowing/xfw-workspace-group-wayland.c @@ -42,6 +42,11 @@ enum { N_SIGNALS, }; +enum { + PROP0, + PROP_HANDLE, +}; + struct _XfwWorkspaceGroupWaylandPrivate { XfwScreen *screen; XfwWorkspaceManager *workspace_manager; @@ -86,6 +91,7 @@ static const struct ext_workspace_group_handle_v1_listener group_listener = { }; G_DEFINE_TYPE_WITH_CODE(XfwWorkspaceGroupWayland, xfw_workspace_group_wayland, G_TYPE_OBJECT, + G_ADD_PRIVATE(XfwWorkspaceGroupWayland) G_IMPLEMENT_INTERFACE(XFW_TYPE_WORKSPACE_GROUP, xfw_workspace_group_wayland_workspace_group_init)) @@ -105,6 +111,12 @@ xfw_workspace_group_wayland_class_init(XfwWorkspaceGroupWaylandClass *klass) { g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + g_object_class_install_property(gklass, + PROP_HANDLE, + g_param_spec_pointer("handle", + "handle", + "handle", + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); _xfw_workspace_group_install_properties(gklass); } @@ -124,6 +136,10 @@ xfw_workspace_group_wayland_set_property(GObject *obj, guint prop_id, const GVal XfwWorkspaceGroupWayland *group = XFW_WORKSPACE_GROUP_WAYLAND(obj); switch (prop_id) { + case PROP_HANDLE: + group->priv->handle = g_value_get_pointer(value); + break; + case WORKSPACE_GROUP_PROP_SCREEN: group->priv->screen = g_value_get_object(value); break; @@ -148,6 +164,10 @@ xfw_workspace_group_wayland_get_property(GObject *obj, guint prop_id, GValue *va XfwWorkspaceGroupWayland *group = XFW_WORKSPACE_GROUP_WAYLAND(obj); switch (prop_id) { + case PROP_HANDLE: + g_value_set_pointer(value, group->priv->handle); + break; + case WORKSPACE_GROUP_PROP_SCREEN: g_value_set_object(value, group->priv->screen); break; -- GitLab From 54cea3bbc436cb19a84b8017d8536363b377aa5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Bonithon?= <gael@xfce.org> Date: Thu, 26 Dec 2024 18:00:00 +0100 Subject: [PATCH 2/4] XfwWorkspaceManagerWayland: Fix typo --- libxfce4windowing/xfw-workspace-manager-wayland.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libxfce4windowing/xfw-workspace-manager-wayland.c b/libxfce4windowing/xfw-workspace-manager-wayland.c index 442faa3..00c612c 100644 --- a/libxfce4windowing/xfw-workspace-manager-wayland.c +++ b/libxfce4windowing/xfw-workspace-manager-wayland.c @@ -225,7 +225,7 @@ manager_workspace(void *data, struct ext_workspace_manager_v1 *manager, struct e _xfw_workspace_wayland_set_number(workspace, g_list_length(wmanager->priv->workspaces)); wmanager->priv->workspaces = g_list_append(wmanager->priv->workspaces, workspace); g_signal_connect(workspace, "destroyed", G_CALLBACK(workspace_destroyed), manager); - g_signal_emit_by_name(manager, "workspace-created", workspace); + g_signal_emit_by_name(wmanager, "workspace-created", workspace); } static void -- GitLab From 6b468ecc119dd54bb49f98a43c879c5451519b44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Bonithon?= <gael@xfce.org> Date: Thu, 26 Dec 2024 18:01:25 +0100 Subject: [PATCH 3/4] XfwWorkspaceWayland: Add missing sanity check It seems that the group can legitimately be NULL in some cases. If it shouldn't, the fix needs to be adapted. --- libxfce4windowing/xfw-workspace-wayland.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/libxfce4windowing/xfw-workspace-wayland.c b/libxfce4windowing/xfw-workspace-wayland.c index e4ccbe3..5cd4898 100644 --- a/libxfce4windowing/xfw-workspace-wayland.c +++ b/libxfce4windowing/xfw-workspace-wayland.c @@ -271,6 +271,8 @@ xfw_workspace_wayland_get_layout_column(XfwWorkspace *workspace) { static XfwWorkspace * xfw_workspace_wayland_get_neighbor(XfwWorkspace *workspace, XfwDirection direction) { + XfwWorkspaceWayland *wworkspace = XFW_WORKSPACE_WAYLAND(workspace); + switch (direction) { case XFW_DIRECTION_UP: case XFW_DIRECTION_DOWN: @@ -278,18 +280,22 @@ xfw_workspace_wayland_get_neighbor(XfwWorkspace *workspace, XfwDirection directi case XFW_DIRECTION_LEFT: { gint num = xfw_workspace_wayland_get_layout_column(workspace); - if (num < 1) { + if (wworkspace->priv->group == NULL || num < 1) { return NULL; } else { - GList *workspaces = xfw_workspace_group_list_workspaces(XFW_WORKSPACE_WAYLAND(workspace)->priv->group); + GList *workspaces = xfw_workspace_group_list_workspaces(wworkspace->priv->group); return XFW_WORKSPACE(g_list_nth_data(workspaces, num - 1)); } } case XFW_DIRECTION_RIGHT: { - gint num = xfw_workspace_wayland_get_layout_column(workspace); - GList *workspaces = xfw_workspace_group_list_workspaces(XFW_WORKSPACE_WAYLAND(workspace)->priv->group); - return XFW_WORKSPACE(g_list_nth_data(workspaces, num + 1)); + if (wworkspace->priv->group == NULL) { + return NULL; + } else { + gint num = xfw_workspace_wayland_get_layout_column(workspace); + GList *workspaces = xfw_workspace_group_list_workspaces(wworkspace->priv->group); + return XFW_WORKSPACE(g_list_nth_data(workspaces, num + 1)); + } } } @@ -403,7 +409,7 @@ workspace_state(void *data, struct ext_workspace_handle_v1 *wl_workspace, uint32 changed_mask = old_state ^ new_state; g_object_notify(G_OBJECT(workspace), "state"); g_signal_emit_by_name(workspace, "state-changed", changed_mask, new_state); - if ((changed_mask & XFW_WORKSPACE_STATE_ACTIVE) != 0) { + if (workspace->priv->group != NULL && (changed_mask & XFW_WORKSPACE_STATE_ACTIVE) != 0) { if ((new_state & XFW_WORKSPACE_STATE_ACTIVE) != 0) { _xfw_workspace_group_wayland_set_active_workspace(XFW_WORKSPACE_GROUP_WAYLAND(workspace->priv->group), XFW_WORKSPACE(workspace)); } else { -- GitLab From 2df513c434c8f5befec80024739427dfad150c95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Bonithon?= <gael@xfce.org> Date: Thu, 26 Dec 2024 18:03:38 +0100 Subject: [PATCH 4/4] Update ext-workspace protocol version This may require further corrections to take account of new properties. This fix just allows you to compile and not segfault at startup with xfce4-panel. Also, the conditional part for the meson build is missing, allowing you to use the installed version of ext-workspace-v1.xml if available. --- configure.ac | 4 + libxfce4windowing/xfw-screen-wayland.c | 2 +- .../xfw-workspace-group-wayland.c | 4 +- .../xfw-workspace-group-wayland.h | 2 +- .../xfw-workspace-manager-wayland.c | 2 +- .../xfw-workspace-manager-wayland.h | 2 +- libxfce4windowing/xfw-workspace-wayland.c | 12 +- libxfce4windowing/xfw-workspace-wayland.h | 2 +- protocols/Makefile.am | 26 ++-- ...e-v1-20230427.xml => ext-workspace-v1.xml} | 117 +++++++++++------- protocols/meson.build | 2 +- 11 files changed, 112 insertions(+), 63 deletions(-) rename protocols/{ext-workspace-v1-20230427.xml => ext-workspace-v1.xml} (82%) diff --git a/configure.ac b/configure.ac index 4eb8921..668cd91 100644 --- a/configure.ac +++ b/configure.ac @@ -161,6 +161,10 @@ AS_IF([test x"$ENABLE_WAYLAND" = x"yes"], LIBXFCE4WINDOWING_HAS_WAYLAND="/* #undef LIBXFCE4WINDOWING_HAS_WAYLAND */" ]) +dnl FIXME: Bump wayland_protocols_minimum_version to 1.39 when it is an acceptable requirement, +dnl and remove this and protocols/ext-workspace-v1.xml +AM_CONDITIONAL([HAVE_WORKSPACE], [test -f "$WL_PROTOCOLS_PKGDATADIR/staging/ext-workspace/ext-workspace-v1.xml"]) + AC_SUBST([LIBXFCE4WINDOWING_HAS_X11]) AC_SUBST([LIBXFCE4WINDOWING_HAS_WAYLAND]) diff --git a/libxfce4windowing/xfw-screen-wayland.c b/libxfce4windowing/xfw-screen-wayland.c index 7593c22..cac7ac8 100644 --- a/libxfce4windowing/xfw-screen-wayland.c +++ b/libxfce4windowing/xfw-screen-wayland.c @@ -25,7 +25,7 @@ #include <string.h> #include <wayland-client.h> -#include "protocols/ext-workspace-v1-20230427-client.h" +#include "protocols/ext-workspace-v1-client.h" #include "protocols/wlr-foreign-toplevel-management-unstable-v1-client.h" #include "protocols/xdg-output-unstable-v1-client.h" diff --git a/libxfce4windowing/xfw-workspace-group-wayland.c b/libxfce4windowing/xfw-workspace-group-wayland.c index 6cafda8..dcb2905 100644 --- a/libxfce4windowing/xfw-workspace-group-wayland.c +++ b/libxfce4windowing/xfw-workspace-group-wayland.c @@ -24,7 +24,7 @@ #include <glib/gi18n-lib.h> #include <limits.h> -#include "protocols/ext-workspace-v1-20230427-client.h" +#include "protocols/ext-workspace-v1-client.h" #include "libxfce4windowing-private.h" #include "xfw-monitor-wayland.h" @@ -286,7 +286,7 @@ group_capabilities(void *data, struct ext_workspace_group_handle_v1 *wl_group, u XfwWorkspaceGroupCapabilities changed_mask; XfwWorkspaceGroupCapabilities new_capabilities = XFW_WORKSPACE_GROUP_CAPABILITIES_NONE; - if ((wl_capabilities & EXT_WORKSPACE_GROUP_HANDLE_V1_EXT_WORKSPACE_GROUP_CAPABILITIES_V1_CREATE_WORKSPACE) != 0) { + if ((wl_capabilities & EXT_WORKSPACE_GROUP_HANDLE_V1_GROUP_CAPABILITIES_CREATE_WORKSPACE) != 0) { new_capabilities |= XFW_WORKSPACE_GROUP_CAPABILITIES_CREATE_WORKSPACE; } diff --git a/libxfce4windowing/xfw-workspace-group-wayland.h b/libxfce4windowing/xfw-workspace-group-wayland.h index 498db51..a571733 100644 --- a/libxfce4windowing/xfw-workspace-group-wayland.h +++ b/libxfce4windowing/xfw-workspace-group-wayland.h @@ -26,7 +26,7 @@ #include <glib-object.h> -#include "protocols/ext-workspace-v1-20230427-client.h" +#include "protocols/ext-workspace-v1-client.h" #include "xfw-workspace.h" diff --git a/libxfce4windowing/xfw-workspace-manager-wayland.c b/libxfce4windowing/xfw-workspace-manager-wayland.c index 00c612c..9b4ad50 100644 --- a/libxfce4windowing/xfw-workspace-manager-wayland.c +++ b/libxfce4windowing/xfw-workspace-manager-wayland.c @@ -26,7 +26,7 @@ #include <wayland-client-core.h> #include <wayland-client-protocol.h> -#include "protocols/ext-workspace-v1-20230427-client.h" +#include "protocols/ext-workspace-v1-client.h" #include "libxfce4windowing-private.h" #include "xfw-screen-private.h" diff --git a/libxfce4windowing/xfw-workspace-manager-wayland.h b/libxfce4windowing/xfw-workspace-manager-wayland.h index 83131cb..4451dc2 100644 --- a/libxfce4windowing/xfw-workspace-manager-wayland.h +++ b/libxfce4windowing/xfw-workspace-manager-wayland.h @@ -26,7 +26,7 @@ #include <gdk/gdk.h> -#include "protocols/ext-workspace-v1-20230427-client.h" +#include "protocols/ext-workspace-v1-client.h" #include "xfw-screen-wayland.h" #include "xfw-workspace-manager.h" diff --git a/libxfce4windowing/xfw-workspace-wayland.c b/libxfce4windowing/xfw-workspace-wayland.c index 5cd4898..0e4be7d 100644 --- a/libxfce4windowing/xfw-workspace-wayland.c +++ b/libxfce4windowing/xfw-workspace-wayland.c @@ -23,7 +23,7 @@ #include <limits.h> -#include "protocols/ext-workspace-v1-20230427-client.h" +#include "protocols/ext-workspace-v1-client.h" #include "libxfce4windowing-private.h" #include "xfw-util.h" @@ -424,13 +424,13 @@ workspace_state(void *data, struct ext_workspace_handle_v1 *wl_workspace, uint32 } static const struct { - enum ext_workspace_handle_v1_ext_workspace_capabilities_v1 wl_capability; + enum ext_workspace_handle_v1_workspace_capabilities wl_capability; XfwWorkspaceCapabilities capability_bit; } capabilities_converters[] = { - { EXT_WORKSPACE_HANDLE_V1_EXT_WORKSPACE_CAPABILITIES_V1_ACTIVATE, XFW_WORKSPACE_CAPABILITIES_ACTIVATE }, - { EXT_WORKSPACE_HANDLE_V1_EXT_WORKSPACE_CAPABILITIES_V1_DEACTIVATE, XFW_WORKSPACE_CAPABILITIES_DEACTIVATE }, - { EXT_WORKSPACE_HANDLE_V1_EXT_WORKSPACE_CAPABILITIES_V1_REMOVE, XFW_WORKSPACE_CAPABILITIES_REMOVE }, - { EXT_WORKSPACE_HANDLE_V1_EXT_WORKSPACE_CAPABILITIES_V1_ASSIGN, XFW_WORKSPACE_CAPABILITIES_ASSIGN }, + { EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_ACTIVATE, XFW_WORKSPACE_CAPABILITIES_ACTIVATE }, + { EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_DEACTIVATE, XFW_WORKSPACE_CAPABILITIES_DEACTIVATE }, + { EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_REMOVE, XFW_WORKSPACE_CAPABILITIES_REMOVE }, + { EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_ASSIGN, XFW_WORKSPACE_CAPABILITIES_ASSIGN }, }; static void diff --git a/libxfce4windowing/xfw-workspace-wayland.h b/libxfce4windowing/xfw-workspace-wayland.h index ee293a5..0abc633 100644 --- a/libxfce4windowing/xfw-workspace-wayland.h +++ b/libxfce4windowing/xfw-workspace-wayland.h @@ -26,7 +26,7 @@ #include <glib-object.h> -#include "protocols/ext-workspace-v1-20230427-client.h" +#include "protocols/ext-workspace-v1-client.h" #include "xfw-workspace-group.h" diff --git a/protocols/Makefile.am b/protocols/Makefile.am index c44f4bc..5f7002d 100644 --- a/protocols/Makefile.am +++ b/protocols/Makefile.am @@ -4,8 +4,8 @@ noinst_LTLIBRARIES = \ libwayland-protocols.la libwayland_protocols_built_sources = \ - ext-workspace-v1-20230427.c \ - ext-workspace-v1-20230427-client.h \ + ext-workspace-v1.c \ + ext-workspace-v1-client.h \ wlr-foreign-toplevel-management-unstable-v1.c \ wlr-foreign-toplevel-management-unstable-v1-client.h \ xdg-output-unstable-v1.c \ @@ -29,16 +29,24 @@ xdg-output-unstable-v1.c: $(WL_PROTOCOLS_PKGDATADIR)/unstable/xdg-output/xdg-out xdg-output-unstable-v1-client.h: $(WL_PROTOCOLS_PKGDATADIR)/unstable/xdg-output/xdg-output-unstable-v1.xml $(AM_V_GEN) $(WAYLAND_SCANNER) client-header $< $@ -%.c: $(WLR_PROTOCOLS_PKGDATADIR)/unstable/%.xml +if HAVE_WORKSPACE +ext-workspace-v1.c: $(WL_PROTOCOLS_PKGDATADIR)/staging/ext-workspace/ext-workspace-v1.xml $(AM_V_GEN) $(WAYLAND_SCANNER) private-code $< $@ -%-client.h: $(WLR_PROTOCOLS_PKGDATADIR)/unstable/%.xml +ext-workspace-v1-client.h: $(WL_PROTOCOLS_PKGDATADIR)/staging/ext-workspace/ext-workspace-v1.xml + $(AM_V_GEN) $(WAYLAND_SCANNER) client-header $< $@ +else +ext-workspace-v1.c: ext-workspace-v1.xml + $(AM_V_GEN) $(WAYLAND_SCANNER) private-code $< $@ + +ext-workspace-v1-client.h: ext-workspace-v1.xml $(AM_V_GEN) $(WAYLAND_SCANNER) client-header $< $@ +endif -%.c: %.xml +%.c: $(WLR_PROTOCOLS_PKGDATADIR)/unstable/%.xml $(AM_V_GEN) $(WAYLAND_SCANNER) private-code $< $@ -%-client.h: %.xml +%-client.h: $(WLR_PROTOCOLS_PKGDATADIR)/unstable/%.xml $(AM_V_GEN) $(WAYLAND_SCANNER) client-header $< $@ @@ -51,9 +59,13 @@ BUILT_SOURCES = \ endif EXTRA_DIST = \ - ext-workspace-v1-20230427.xml \ meson.build \ wlr-protocols/unstable/wlr-foreign-toplevel-management-unstable-v1.xml +if !HAVE_WORKSPACE +EXTRA_DIST += \ + ext-workspace-v1.xml +endif + # required for make distcheck (gtk-doc) dist-hook: all diff --git a/protocols/ext-workspace-v1-20230427.xml b/protocols/ext-workspace-v1.xml similarity index 82% rename from protocols/ext-workspace-v1-20230427.xml rename to protocols/ext-workspace-v1.xml index 1b2fc9f..b19c770 100644 --- a/protocols/ext-workspace-v1-20230427.xml +++ b/protocols/ext-workspace-v1.xml @@ -61,7 +61,6 @@ <arg name="workspace_group" type="new_id" interface="ext_workspace_group_handle_v1"/> </event> - <event name="workspace"> <description summary="workspace has been created"> This event is emitted whenever a new workspace has been created. @@ -104,12 +103,11 @@ </description> </event> - <event name="finished"> + <event name="finished" type="destructor"> <description summary="the compositor has finished with the workspace_manager"> This event indicates that the compositor is done sending events to the ext_workspace_manager_v1. The server will destroy the object - immediately after sending this request, so it will become invalid and - the client should free any resources associated with it. + immediately after sending this request. </description> </event> @@ -120,9 +118,11 @@ events, until the finished event is emitted. The compositor is expected to send the finished event eventually once the stop request has been processed. - The client must not send any more requests after this one. + The client must not send any requests after this one, doing so will raise a wl_display + invalid_object error. </description> </request> + </interface> <interface name="ext_workspace_group_handle_v1" version="1"> @@ -140,7 +140,7 @@ outputs. </description> - <enum name="ext_workspace_group_capabilities_v1" bitfield="true"> + <enum name="group_capabilities" bitfield="true"> <entry name="create_workspace" value="1" summary="create_workspace request is available"/> </enum> @@ -157,16 +157,17 @@ create_workspace requests. Compositors must send this event once after creation of an - ext_workspace_group_handle_v1 . When the capabilities change, compositors + ext_workspace_group_handle_v1. When the capabilities change, compositors must send this event again. </description> - <arg name="capabilities" type="uint" summary="capabilities" enum="ext_workspace_group_capabilities_v1"/> + <arg name="capabilities" type="uint" summary="capabilities" enum="group_capabilities"/> </event> <event name="output_enter"> <description summary="output assigned to workspace group"> This event is emitted whenever an output is assigned to the workspace - group. + group or a new `wl_output` object is bound by the client, which was already + assigned to this workspace_group. </description> <arg name="output" type="object" interface="wl_output"/> </event> @@ -190,16 +191,18 @@ <event name="workspace_leave"> <description summary="workspace removed from workspace group"> - This event is emitted whenever a workspace is remove from this group. + This event is emitted whenever a workspace is removed from this group. </description> <arg name="workspace" type="object" interface="ext_workspace_handle_v1"/> </event> + <event name="removed"> - <description summary="this workspace group has been destroyed"> - This event means the ext_workspace_group_handle_v1 has been destroyed. - It is guaranteed there won't be any more events for this - ext_workspace_group_handle_v1. The ext_workspace_group_handle_v1 becomes - inert so any requests will be ignored except the destroy request. + <description summary="this workspace group has been removed"> + This event is send when the group associated with the ext_workspace_group_handle_v1 + has been removed. After sending this request the compositor will immediately consider + the object inert. Any requests will be ignored except the destroy request. + It is guaranteed there won't be any more events referencing this + ext_workspace_group_handle_v1. The compositor must remove all workspaces belonging to a workspace group via a workspace_leave event before removing the workspace group. @@ -221,7 +224,7 @@ <description summary="destroy the ext_workspace_group_handle_v1 object"> Destroys the ext_workspace_group_handle_v1 object. - This request should be called either when the client does not want to + This request should be send either when the client does not want to use the workspace group object any more or after the removed event to finalize the destruction of the object. </description> @@ -233,11 +236,14 @@ A ext_workspace_handle_v1 object represents a workspace that handles a group of surfaces. - Each workspace has a name, conveyed to the client with the name event; a - list of states, conveyed to the client with the state event; and - optionally a set of coordinates, conveyed to the client with the - coordinates event. The client may request that the compositor activate or - deactivate the workspace. + Each workspace has: + - a name, conveyed to the client with the name event + - potentially an id conveyed with the id event + - a list of states, conveyed to the client with the state event + - and optionally a set of coordinates, conveyed to the client with the + coordinates event + + The client may request that the compositor activate or deactivate the workspace. Each workspace can belong to only a single workspace group. Depepending on the compositor policy, there might be workspaces with @@ -245,10 +251,32 @@ separate (e.g. one of them might be active while the other is not). </description> + <event name="id"> + <description summary="workspace id"> + If this event is emitted, it will be send immediately after the + ext_workspace_handle_v1 is created or when an id is assigned to + a workspace (at most once during it's lifetime). + + An id will never change during the lifetime of the `ext_workspace_handle_v1` + and is guaranteed to be unique during it's lifetime. + + Ids are not human-readable and shouldn't be displayed, use `name` for that purpose. + + Compositors are expected to only send ids for workspaces likely stable across multiple + sessions and can be used by clients to store preferences for workspaces. Workspaces without + ids should be considered temporary and any data associated with them should be deleted once + the respective object is lost. + </description> + <arg name="id" type="string"/> + </event> + <event name="name"> <description summary="workspace name changed"> This event is emitted immediately after the ext_workspace_handle_v1 is created and whenever the name of the workspace changes. + + A name is meant to be human-readable and can be displayed to a user. + Unlike the id it is neither stable nor unique. </description> <arg name="name" type="string"/> </event> @@ -277,18 +305,6 @@ <arg name="coordinates" type="array"/> </event> - <event name="state"> - <description summary="the state of the workspace changed"> - This event is emitted immediately after the ext_workspace_handle_v1 is - created and each time the workspace state changes, either because of a - compositor action or because of a request in this protocol. - - Missing states convey the opposite meaning, e.g. an unset active bit - the workspace is currently inactive. - </description> - <arg name="state" type="uint" enum="state"/> - </event> - <enum name="state" bitfield="true"> <description summary="types of states on the workspace"> The different states that a workspace can have. @@ -305,7 +321,19 @@ </entry> </enum> - <enum name="ext_workspace_capabilities_v1" bitfield="true"> + <event name="state"> + <description summary="the state of the workspace changed"> + This event is emitted immediately after the ext_workspace_handle_v1 is + created and each time the workspace state changes, either because of a + compositor action or because of a request in this protocol. + + Missing states convey the opposite meaning, e.g. an unset active bit + means the workspace is currently inactive. + </description> + <arg name="state" type="uint" enum="state"/> + </event> + + <enum name="workspace_capabilities" bitfield="true"> <entry name="activate" value="1" summary="activate request is available"/> <entry name="deactivate" value="2" summary="deactivate request is available"/> <entry name="remove" value="4" summary="remove request is available"/> @@ -328,15 +356,20 @@ ext_workspace_handle_v1 . When the capabilities change, compositors must send this event again. </description> - <arg name="capabilities" type="uint" summary="capabilities" enum="ext_workspace_capabilities_v1"/> + <arg name="capabilities" type="uint" summary="capabilities" enum="workspace_capabilities"/> </event> <event name="removed"> - <description summary="this workspace has been destroyed"> - This event means the ext_workspace_handle_v1 has been destroyed. It is - guaranteed there won't be any more events for this - ext_workspace_handle_v1. The ext_workspace_handle_v1 becomes inert so - any requests will be ignored except the destroy request. + <description summary="this workspace has been removed"> + This event is send when the workspace associated with the ext_workspace_handle_v1 + has been removed. After sending this request, the compositor will immediately consider + the object inert. Any requests will be ignored except the destroy request. + + It is guaranteed there won't be any more events referencing this + ext_workspace_handle_v1. + + The compositor must only remove a workspaces not currently belonging to any + workspace_group. </description> </event> @@ -344,7 +377,7 @@ <description summary="destroy the ext_workspace_handle_v1 object"> Destroys the ext_workspace_handle_v1 object. - This request should be called either when the client does not want to + This request should be made either when the client does not want to use the workspace object any more or after the remove event to finalize the destruction of the object. </description> @@ -362,7 +395,7 @@ </request> <request name="deactivate"> - <description summary="activate the workspace"> + <description summary="deactivate the workspace"> Request that this workspace be deactivated. There is no guarantee the workspace will be actually deactivated. diff --git a/protocols/meson.build b/protocols/meson.build index 6b0f8c5..935d715 100644 --- a/protocols/meson.build +++ b/protocols/meson.build @@ -2,7 +2,7 @@ if enable_wayland wayland_protocols_generated_sources = [] protocols = { - 'ext-workspace-v1-20230427': 'ext-workspace-v1-20230427.xml', + 'ext-workspace-v1': 'ext-workspace-v1.xml', 'wlr-foreign-toplevel-management-unstable-v1': wlr_protocols_pkgdatadir / 'unstable' / 'wlr-foreign-toplevel-management-unstable-v1.xml', 'xdg-output-unstable-v1': wl_protocols_pkgdatadir / 'unstable' / 'xdg-output' / 'xdg-output-unstable-v1.xml', } -- GitLab