filter new windows by level, size, and visibility
- SHA
645d1f575714e29358739b431e3ee3230f8ce698- Parents
-
52420a9 - Tree
bb14475
645d1f5
645d1f575714e29358739b431e3ee3230f8ce69852420a9
bb14475| Status | File | + | - |
|---|---|---|---|
| M |
src/main.rs
|
10 | 1 |
src/main.rsmodified@@ -45,17 +45,26 @@ impl BorderMap { | ||
| 45 | 45 | fn add_fresh(&mut self, target_wid: u32) { |
| 46 | 46 | if self.overlays.contains_key(&target_wid) { return; } |
| 47 | 47 | |
| 48 | - // Filter: must be ordered in and owned by another process | |
| 48 | + // Filter: must be visible, layer 0, owned by another process | |
| 49 | 49 | unsafe { |
| 50 | 50 | let mut shown = false; |
| 51 | 51 | SLSWindowIsOrderedIn(self.main_cid, target_wid, &mut shown); |
| 52 | 52 | if !shown { return; } |
| 53 | 53 | |
| 54 | + let mut level: i64 = -1; | |
| 55 | + SLSGetWindowLevel(self.main_cid, target_wid, &mut level); | |
| 56 | + if level != 0 { return; } | |
| 57 | + | |
| 54 | 58 | let mut wid_cid: CGSConnectionID = 0; |
| 55 | 59 | SLSGetWindowOwner(self.main_cid, target_wid, &mut wid_cid); |
| 56 | 60 | let mut pid: i32 = 0; |
| 57 | 61 | SLSConnectionGetPID(wid_cid, &mut pid); |
| 58 | 62 | if pid == self.own_pid { return; } |
| 63 | + | |
| 64 | + // Skip tiny windows | |
| 65 | + let mut bounds = CGRect::default(); | |
| 66 | + SLSGetWindowBounds(self.main_cid, target_wid, &mut bounds); | |
| 67 | + if bounds.size.width < 50.0 || bounds.size.height < 50.0 { return; } | |
| 59 | 68 | } |
| 60 | 69 | |
| 61 | 70 | let fresh = unsafe { |