From 518c254c93ad0b128dafeeeb24289993fb1ca4a7 Mon Sep 17 00:00:00 2001
From: noonebtw <noonebtw@gmail.com>
Date: Tue, 19 Jan 2021 05:19:25 +0100
Subject: [PATCH] fixed master / aux stack movement

---
 src/wm.rs | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/src/wm.rs b/src/wm.rs
index eed0383..2e01405 100644
--- a/src/wm.rs
+++ b/src/wm.rs
@@ -366,7 +366,18 @@ impl WMState {
 						.next()
 						.and_then(|(_, c)| Some(c.clone())))
 					.and_then(|c| {
-						mstate.master_stack.push(Rc::downgrade(&c));
+						let weak_c = Rc::downgrade(&c);
+						if mstate
+							.master_stack
+							.iter()
+							.filter(|w| w.ptr_eq(&weak_c))
+							.count() == 0
+						{
+							mstate.master_stack.push(Rc::downgrade(&c));
+						} else {
+							mstate.master_stack.retain(|w| !w.ptr_eq(&weak_c));
+						}
+
 						Some(())
 					})
 				});
@@ -746,17 +757,7 @@ impl WMState {
 				}
 
 				let window_w = {
-					let has_aux_stack = state
-						.clients
-						.iter()
-						.filter(|&(_, client)| {
-							state
-								.master_stack
-								.iter()
-								.filter(|weak_client| weak_client.upgrade().unwrap() != *client)
-								.count() != 0
-						})
-						.count() != 0;
+					let has_aux_stack = state.clients.len() != state.master_stack.len();
 
 					if has_aux_stack {
 						screen_w / 2