Skip to content
This repository was archived by the owner on Nov 1, 2021. It is now read-only.

Commit ebcad36

Browse files
committed
implement additional states in ext-workspace
1 parent d711c3c commit ebcad36

File tree

2 files changed

+62
-14
lines changed

2 files changed

+62
-14
lines changed

include/wlr/types/wlr_ext_workspace_v1.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ struct wlr_ext_workspace_group_handle_v1_output {
5757
enum wlr_ext_workspace_handle_v1_state
5858
{
5959
WLR_EXT_WORKSPACE_HANDLE_V1_STATE_ACTIVE = 1 << 0,
60+
WLR_EXT_WORKSPACE_HANDLE_V1_STATE_URGENT = 1 << 1,
61+
WLR_EXT_WORKSPACE_HANDLE_V1_STATE_HIDDEN = 1 << 2,
6062
};
6163

6264
struct wlr_ext_workspace_handle_v1 {
@@ -119,4 +121,10 @@ void wlr_ext_workspace_handle_v1_set_coordinates(
119121
void wlr_ext_workspace_handle_v1_set_active(
120122
struct wlr_ext_workspace_handle_v1 *workspace, bool active);
121123

124+
void wlr_ext_workspace_handle_v1_set_urgent(
125+
struct wlr_ext_workspace_handle_v1 *workspace, bool urgent);
126+
127+
void wlr_ext_workspace_handle_v1_set_hidden(
128+
struct wlr_ext_workspace_handle_v1 *workspace, bool hidden);
129+
122130
#endif

types/wlr_ext_workspace_v1.c

Lines changed: 54 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
7382
static 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+
169209
static 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

Comments
 (0)