blob: a3a0b2067f5dbdb7c9a7a9442c21484c451ccebd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
From 97df88c6c8af925382bb1f59b7c6ad75f28142a0 Mon Sep 17 00:00:00 2001
From: David Edmundson <kde@davidedmundson.co.uk>
Date: Tue, 5 Apr 2022 13:26:26 +0100
Subject: [PATCH] Fix layer shell reset
In the current form any client committing multiple times without
attaching a buffer would unset the cached state and trigger an error.
It's legal (though weird) to commit multiple times before attaching a
buffer.
We should only reset the state if we commit an empty buffer after having
committed an existing buffer. This brings us in line with XdgShell.
(cherry picked from commit a5c55b68589a8771cde0bf4ce552702da6fca41c)
---
src/server/layershell_v1_interface.cpp | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/server/layershell_v1_interface.cpp b/src/server/layershell_v1_interface.cpp
index 17086334..19fcd68e 100644
--- a/src/server/layershell_v1_interface.cpp
+++ b/src/server/layershell_v1_interface.cpp
@@ -69,6 +69,7 @@ public:
bool isClosed = false;
bool isConfigured = false;
bool isCommitted = false;
+ bool firstBufferAttached = false;
protected:
void zwlr_layer_surface_v1_destroy_resource(Resource *resource) override;
@@ -290,8 +291,10 @@ void LayerSurfaceV1InterfacePrivate::commit()
return;
}
- if (!surface->isMapped() && isCommitted) {
+ // detect reset
+ if (!surface->isMapped() && firstBufferAttached) {
isCommitted = false;
+ firstBufferAttached = false;
isConfigured = false;
current = LayerSurfaceV1State();
@@ -303,6 +306,9 @@ void LayerSurfaceV1InterfacePrivate::commit()
const LayerSurfaceV1State previous = std::exchange(current, pending);
isCommitted = true; // Must set the committed state before emitting any signals.
+ if (surface->isMapped()) {
+ firstBufferAttached = true;
+ }
if (previous.acceptsFocus != current.acceptsFocus) {
Q_EMIT q->acceptsFocusChanged();
--
GitLab
|