gardesk/ers / 0057c42

Browse files

defer create until tarmac positions window, filter transients

Authored by espadonne
SHA
0057c42f7549f3b8d96cc0723a0bcf1057283a45
Parents
c6c264a
Tree
27cfde5

1 changed file

StatusFile+-
M src/main.rs 17 4
src/main.rsmodified
@@ -223,6 +223,8 @@ fn main() {
223223
             // Deduplicate: track which wids need move vs resize
224224
             let mut moved: HashSet<u32> = HashSet::new();
225225
             let mut resized: HashSet<u32> = HashSet::new();
226
+            let mut created: HashSet<u32> = HashSet::new();
227
+            let mut destroyed: HashSet<u32> = HashSet::new();
226228
 
227229
             for event in events {
228230
                 match event {
@@ -238,14 +240,16 @@ fn main() {
238240
                     }
239241
                     Event::Close(wid) | Event::Destroy(wid) => {
240242
                         if !borders.is_overlay(wid) {
241
-                            borders.remove(wid);
243
+                            destroyed.insert(wid);
244
+                            created.remove(&wid);
242245
                             moved.remove(&wid);
243246
                             resized.remove(&wid);
244247
                         }
245248
                     }
246249
                     Event::Create(wid) => {
247250
                         if !borders.is_overlay(wid) {
248
-                            borders.add_fresh(wid);
251
+                            created.insert(wid);
252
+                            // Subscribe immediately so we get Move/Resize for it
249253
                             borders.subscribe_target(wid);
250254
                         }
251255
                     }
@@ -255,8 +259,9 @@ fn main() {
255259
                 }
256260
             }
257261
 
258
-            if !moved.is_empty() || !resized.is_empty() {
259
-                eprintln!("[batch] moved={:?}, resized={:?}", moved, resized);
262
+            // Process destroys first
263
+            for wid in &destroyed {
264
+                borders.remove(*wid);
260265
             }
261266
 
262267
             // Process moves (just reposition, fast)
@@ -272,6 +277,14 @@ fn main() {
272277
                     borders.recreate(*wid);
273278
                 }
274279
             }
280
+
281
+            // Process creates: only add if NOT destroyed in same batch
282
+            // and if the window has been moved/resized (tarmac positioned it)
283
+            for wid in &created {
284
+                if !destroyed.contains(wid) && (moved.contains(wid) || resized.contains(wid)) {
285
+                    borders.add_fresh(*wid);
286
+                }
287
+            }
275288
         }
276289
     });
277290