diff --git a/src/layout.rs b/src/layout.rs
index e78fdc1b5eeb54fe22bc5f9c139859d51dffa391..d417c00630aa498c302eda9f835483e0bc5ae90a 100644
--- a/src/layout.rs
+++ b/src/layout.rs
@@ -910,7 +910,6 @@ mod seat {
 
         // update
         let key = key.into_released();
-        let mut locked = key.action.is_locked(&layout.current_view);
 
         // process changes
         match action {
@@ -924,12 +923,12 @@ mod seat {
                 try_set_view(layout, view)
             },
             Action::LockView { lock, unlock } => {
-                locked ^= true;
+                let gets_locked = !key.action.is_locked(&layout.current_view);
                 unstick_locks(layout)
                     // It doesn't matter what the resulting view should be,
                     // it's getting changed anyway.
                     .choose_view(
-                        match locked {
+                        match gets_locked {
                             true => lock.clone(),
                             false => unlock.clone(),
                         }