@@ -87,12 +87,13 @@ static void layer_surface_handle_ack_configure(struct wl_client *client,
87
87
layer_surface_configure_destroy (configure );
88
88
}
89
89
90
- if (surface -> acked_configure ) {
91
- layer_surface_configure_destroy (surface -> acked_configure );
92
- }
93
- surface -> acked_configure = configure ;
94
- wl_list_remove (& configure -> link );
95
- wl_list_init (& configure -> link );
90
+ surface -> pending .configure_serial = configure -> serial ;
91
+ surface -> pending .actual_width = configure -> width ;
92
+ surface -> pending .actual_height = configure -> height ;
93
+
94
+ surface -> configured = true;
95
+
96
+ layer_surface_configure_destroy (configure );
96
97
}
97
98
98
99
static void layer_surface_handle_set_size (struct wl_client * client ,
@@ -102,8 +103,8 @@ static void layer_surface_handle_set_size(struct wl_client *client,
102
103
if (!surface ) {
103
104
return ;
104
105
}
105
- surface -> client_pending .desired_width = width ;
106
- surface -> client_pending .desired_height = height ;
106
+ surface -> pending .desired_width = width ;
107
+ surface -> pending .desired_height = height ;
107
108
}
108
109
109
110
static void layer_surface_handle_set_anchor (struct wl_client * client ,
@@ -123,7 +124,7 @@ static void layer_surface_handle_set_anchor(struct wl_client *client,
123
124
if (!surface ) {
124
125
return ;
125
126
}
126
- surface -> client_pending .anchor = anchor ;
127
+ surface -> pending .anchor = anchor ;
127
128
}
128
129
129
130
static void layer_surface_handle_set_exclusive_zone (struct wl_client * client ,
@@ -133,7 +134,7 @@ static void layer_surface_handle_set_exclusive_zone(struct wl_client *client,
133
134
if (!surface ) {
134
135
return ;
135
136
}
136
- surface -> client_pending .exclusive_zone = zone ;
137
+ surface -> pending .exclusive_zone = zone ;
137
138
}
138
139
139
140
static void layer_surface_handle_set_margin (
@@ -144,10 +145,10 @@ static void layer_surface_handle_set_margin(
144
145
if (!surface ) {
145
146
return ;
146
147
}
147
- surface -> client_pending .margin .top = top ;
148
- surface -> client_pending .margin .right = right ;
149
- surface -> client_pending .margin .bottom = bottom ;
150
- surface -> client_pending .margin .left = left ;
148
+ surface -> pending .margin .top = top ;
149
+ surface -> pending .margin .right = right ;
150
+ surface -> pending .margin .bottom = bottom ;
151
+ surface -> pending .margin .left = left ;
151
152
}
152
153
153
154
static void layer_surface_handle_set_keyboard_interactivity (
@@ -160,14 +161,14 @@ static void layer_surface_handle_set_keyboard_interactivity(
160
161
}
161
162
162
163
if (wl_resource_get_version (resource ) < ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND_SINCE_VERSION ) {
163
- surface -> client_pending .keyboard_interactive = !!interactive ;
164
+ surface -> pending .keyboard_interactive = !!interactive ;
164
165
} else {
165
166
if (interactive > ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND ) {
166
167
wl_resource_post_error (resource ,
167
168
ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_KEYBOARD_INTERACTIVITY ,
168
169
"wrong keyboard interactivity value: %" PRIu32 , interactive );
169
170
} else {
170
- surface -> client_pending .keyboard_interactive = interactive ;
171
+ surface -> pending .keyboard_interactive = interactive ;
171
172
}
172
173
}
173
174
}
@@ -203,7 +204,7 @@ static void layer_surface_set_layer(struct wl_client *client,
203
204
"Invalid layer %" PRIu32 , layer );
204
205
return ;
205
206
}
206
- surface -> client_pending .layer = layer ;
207
+ surface -> pending .layer = layer ;
207
208
}
208
209
209
210
static const struct zwlr_layer_surface_v1_interface layer_surface_implementation = {
@@ -233,8 +234,6 @@ static void layer_surface_unmap(struct wlr_layer_surface_v1 *surface) {
233
234
}
234
235
235
236
surface -> configured = surface -> mapped = false;
236
- surface -> configure_serial = 0 ;
237
- surface -> configure_next_serial = 0 ;
238
237
}
239
238
240
239
static void layer_surface_destroy (struct wlr_layer_surface_v1 * surface ) {
@@ -257,32 +256,27 @@ static void layer_surface_resource_destroy(struct wl_resource *resource) {
257
256
}
258
257
}
259
258
260
- static bool layer_surface_state_changed (struct wlr_layer_surface_v1 * surface ) {
261
- struct wlr_layer_surface_v1_state * state ;
259
+ static bool layer_surface_state_changed (struct wlr_layer_surface_v1 * surface ,
260
+ uint32_t width , uint32_t height ) {
261
+ struct wlr_layer_surface_v1_configure last_acked ;
262
+ struct wlr_layer_surface_v1_configure * configure ;
262
263
if (wl_list_empty (& surface -> configure_list )) {
263
- if (surface -> acked_configure ) {
264
- state = & surface -> acked_configure -> state ;
265
- } else if (!surface -> configured ) {
266
- return true;
267
- } else {
268
- state = & surface -> current ;
269
- }
264
+ last_acked .width = surface -> pending .actual_width ;
265
+ last_acked .height = surface -> pending .actual_height ;
266
+ configure = & last_acked ;
270
267
} else {
271
- struct wlr_layer_surface_v1_configure * configure =
272
- wl_container_of (surface -> configure_list .prev , configure , link );
273
- state = & configure -> state ;
268
+ configure = wl_container_of (surface -> configure_list .prev ,
269
+ configure , link );
274
270
}
275
271
276
- bool changed = state -> actual_width != surface -> server_pending . actual_width
277
- || state -> actual_height != surface -> server_pending . actual_height ;
272
+ bool changed = configure -> width != width
273
+ || configure -> height != height ;
278
274
return changed ;
279
275
}
280
276
281
277
void wlr_layer_surface_v1_configure (struct wlr_layer_surface_v1 * surface ,
282
278
uint32_t width , uint32_t height ) {
283
- surface -> server_pending .actual_width = width ;
284
- surface -> server_pending .actual_height = height ;
285
- if (layer_surface_state_changed (surface )) {
279
+ if (layer_surface_state_changed (surface , width , height )) {
286
280
struct wl_display * display =
287
281
wl_client_get_display (wl_resource_get_client (surface -> resource ));
288
282
struct wlr_layer_surface_v1_configure * configure =
@@ -291,14 +285,13 @@ void wlr_layer_surface_v1_configure(struct wlr_layer_surface_v1 *surface,
291
285
wl_client_post_no_memory (wl_resource_get_client (surface -> resource ));
292
286
return ;
293
287
}
294
- surface -> configure_next_serial = wl_display_next_serial (display );
295
288
wl_list_insert (surface -> configure_list .prev , & configure -> link );
296
- configure -> state . actual_width = width ;
297
- configure -> state . actual_height = height ;
298
- configure -> serial = surface -> configure_next_serial ;
289
+ configure -> width = width ;
290
+ configure -> height = height ;
291
+ configure -> serial = wl_display_next_serial ( display ) ;
299
292
zwlr_layer_surface_v1_send_configure (surface -> resource ,
300
- configure -> serial , configure -> state . actual_width ,
301
- configure -> state . actual_height );
293
+ configure -> serial , configure -> width ,
294
+ configure -> height );
302
295
}
303
296
}
304
297
@@ -316,8 +309,8 @@ static void layer_surface_role_commit(struct wlr_surface *wlr_surface) {
316
309
317
310
const uint32_t horiz = ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT |
318
311
ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT ;
319
- if (surface -> client_pending .desired_width == 0 &&
320
- (surface -> client_pending .anchor & horiz ) != horiz ) {
312
+ if (surface -> pending .desired_width == 0 &&
313
+ (surface -> pending .anchor & horiz ) != horiz ) {
321
314
wl_resource_post_error (surface -> resource ,
322
315
ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SIZE ,
323
316
"width 0 requested without setting left and right anchors" );
@@ -326,24 +319,15 @@ static void layer_surface_role_commit(struct wlr_surface *wlr_surface) {
326
319
327
320
const uint32_t vert = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP |
328
321
ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM ;
329
- if (surface -> client_pending .desired_height == 0 &&
330
- (surface -> client_pending .anchor & vert ) != vert ) {
322
+ if (surface -> pending .desired_height == 0 &&
323
+ (surface -> pending .anchor & vert ) != vert ) {
331
324
wl_resource_post_error (surface -> resource ,
332
325
ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SIZE ,
333
326
"height 0 requested without setting top and bottom anchors" );
334
327
return ;
335
328
}
336
329
337
- if (surface -> acked_configure ) {
338
- struct wlr_layer_surface_v1_configure * configure =
339
- surface -> acked_configure ;
340
- surface -> configured = true;
341
- surface -> configure_serial = configure -> serial ;
342
- surface -> current .actual_width = configure -> state .actual_width ;
343
- surface -> current .actual_height = configure -> state .actual_height ;
344
- layer_surface_configure_destroy (configure );
345
- surface -> acked_configure = NULL ;
346
- }
330
+ surface -> current = surface -> pending ;
347
331
348
332
if (wlr_surface_has_buffer (surface -> surface ) && !surface -> configured ) {
349
333
wl_resource_post_error (surface -> resource ,
@@ -352,14 +336,14 @@ static void layer_surface_role_commit(struct wlr_surface *wlr_surface) {
352
336
return ;
353
337
}
354
338
355
- surface -> current .anchor = surface -> client_pending .anchor ;
356
- surface -> current .exclusive_zone = surface -> client_pending .exclusive_zone ;
357
- surface -> current .margin = surface -> client_pending .margin ;
339
+ surface -> current .anchor = surface -> pending .anchor ;
340
+ surface -> current .exclusive_zone = surface -> pending .exclusive_zone ;
341
+ surface -> current .margin = surface -> pending .margin ;
358
342
surface -> current .keyboard_interactive =
359
- surface -> client_pending .keyboard_interactive ;
360
- surface -> current .desired_width = surface -> client_pending .desired_width ;
361
- surface -> current .desired_height = surface -> client_pending .desired_height ;
362
- surface -> current .layer = surface -> client_pending .layer ;
343
+ surface -> pending .keyboard_interactive ;
344
+ surface -> current .desired_width = surface -> pending .desired_width ;
345
+ surface -> current .desired_height = surface -> pending .desired_height ;
346
+ surface -> current .layer = surface -> pending .layer ;
363
347
364
348
if (!surface -> added ) {
365
349
surface -> added = true;
@@ -422,7 +406,7 @@ static void layer_shell_handle_get_layer_surface(struct wl_client *wl_client,
422
406
if (output_resource ) {
423
407
surface -> output = wlr_output_from_resource (output_resource );
424
408
}
425
- surface -> current .layer = surface -> client_pending .layer = layer ;
409
+ surface -> current .layer = surface -> pending .layer = layer ;
426
410
if (layer > ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY ) {
427
411
free (surface );
428
412
wl_resource_post_error (client_resource ,
0 commit comments