summaryrefslogtreecommitdiff
path: root/gui-libs/pixdecor/files/pixdecor-shade-deco-lifetime.patch
blob: cd98d36c431bf651cf9c2045c523d2c2db62255b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
--- a/src/shade.hpp
+++ b/src/shade.hpp
@@ -167,10 +167,13 @@
     {
         if (auto toplevel = wf::toplevel_cast(view))
         {
-            if (deco)
+            /* Re-resolve the decorator each frame: a cached observer_ptr dangles
+             * if the decoration is removed/recreated while the shade runs. */
+            auto live_deco = toplevel->toplevel()->get_data<simple_decorator_t>();
+            if (live_deco)
             {
                 /* SSD */
-                deco->get_margins(toplevel->toplevel()->pending());
+                live_deco->get_margins(toplevel->toplevel()->pending());
             } else
             {
                 /* CSD */