@@ -70,14 +70,28 @@ static void workspace_handle_resource_destroy(struct wl_resource *resource) {
7070 wl_list_remove (wl_resource_get_link (resource ));
7171}
7272
73+ static bool push_entry_in_array (struct wl_array * array , uint32_t entry ) {
74+ uint32_t * index = wl_array_add (array , sizeof (uint32_t ));
75+ if (index == NULL ) {
76+ return false;
77+ }
78+ * index = entry ;
79+ return true;
80+ }
81+
7382static bool fill_array_from_workspace_state (struct wl_array * array ,
7483 uint32_t state ) {
75- if (state & WLR_EXT_WORKSPACE_HANDLE_V1_STATE_ACTIVE ) {
76- uint32_t * index = wl_array_add (array , sizeof (uint32_t ));
77- if (index == NULL ) {
78- return false;
79- }
80- * index = ZEXT_WORKSPACE_HANDLE_V1_STATE_ACTIVE ;
84+ if ((state & WLR_EXT_WORKSPACE_HANDLE_V1_STATE_ACTIVE ) &&
85+ !push_entry_in_array (array , ZEXT_WORKSPACE_HANDLE_V1_STATE_ACTIVE )) {
86+ return false;
87+ }
88+ if ((state & WLR_EXT_WORKSPACE_HANDLE_V1_STATE_URGENT ) &&
89+ !push_entry_in_array (array , ZEXT_WORKSPACE_HANDLE_V1_STATE_URGENT )) {
90+ return false;
91+ }
92+ if ((state & WLR_EXT_WORKSPACE_HANDLE_V1_STATE_HIDDEN ) &&
93+ !push_entry_in_array (array , ZEXT_WORKSPACE_HANDLE_V1_STATE_HIDDEN )) {
94+ return false;
8195 }
8296
8397 return true;
@@ -136,14 +150,7 @@ void wlr_ext_workspace_handle_v1_set_coordinates(
136150 workspace_manager_update_idle_source (workspace -> group -> manager );
137151}
138152
139- void wlr_ext_workspace_handle_v1_set_active (
140- struct wlr_ext_workspace_handle_v1 * workspace , bool activate ) {
141- if (activate ) {
142- workspace -> server_state |= WLR_EXT_WORKSPACE_HANDLE_V1_STATE_ACTIVE ;
143- } else {
144- workspace -> server_state &= ~WLR_EXT_WORKSPACE_HANDLE_V1_STATE_ACTIVE ;
145- }
146-
153+ static void workspace_send_state (struct wlr_ext_workspace_handle_v1 * workspace ) {
147154 struct wl_array state ;
148155 wl_array_init (& state );
149156
@@ -166,6 +173,39 @@ void wlr_ext_workspace_handle_v1_set_active(
166173 workspace_manager_update_idle_source (workspace -> group -> manager );
167174}
168175
176+ void wlr_ext_workspace_handle_v1_set_active (
177+ struct wlr_ext_workspace_handle_v1 * workspace , bool activate ) {
178+ if (activate ) {
179+ workspace -> server_state |= WLR_EXT_WORKSPACE_HANDLE_V1_STATE_ACTIVE ;
180+ } else {
181+ workspace -> server_state &= ~WLR_EXT_WORKSPACE_HANDLE_V1_STATE_ACTIVE ;
182+ }
183+
184+ workspace_send_state (workspace );
185+ }
186+
187+ void wlr_ext_workspace_handle_v1_set_urgent (
188+ struct wlr_ext_workspace_handle_v1 * workspace , bool urgent ) {
189+ if (urgent ) {
190+ workspace -> server_state |= WLR_EXT_WORKSPACE_HANDLE_V1_STATE_URGENT ;
191+ } else {
192+ workspace -> server_state &= ~WLR_EXT_WORKSPACE_HANDLE_V1_STATE_URGENT ;
193+ }
194+
195+ workspace_send_state (workspace );
196+ }
197+
198+ void wlr_ext_workspace_handle_v1_set_hidden (
199+ struct wlr_ext_workspace_handle_v1 * workspace , bool hidden ) {
200+ if (hidden ) {
201+ workspace -> server_state |= WLR_EXT_WORKSPACE_HANDLE_V1_STATE_HIDDEN ;
202+ } else {
203+ workspace -> server_state &= ~WLR_EXT_WORKSPACE_HANDLE_V1_STATE_HIDDEN ;
204+ }
205+
206+ workspace_send_state (workspace );
207+ }
208+
169209static struct wl_resource * create_workspace_resource_for_group_resource (
170210 struct wlr_ext_workspace_handle_v1 * workspace ,
171211 struct wl_resource * group_resource ) {
0 commit comments