From a474033bff68e62b7d7f9722d95afa9ea21c42b5 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Sat, 4 Jun 2022 14:07:34 +0200 Subject: [PATCH] xwayland: disallow focusing invisible windows --- src/xwayland/xwm.rs | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/xwayland/xwm.rs b/src/xwayland/xwm.rs index c26f58a1..fec714d6 100644 --- a/src/xwayland/xwm.rs +++ b/src/xwayland/xwm.rs @@ -22,7 +22,7 @@ use { rect::Rect, state::State, time::Time, - tree::ToplevelNode, + tree::{Node, ToplevelNode}, utils::{ bitflags::BitflagsExt, buf::Buf, clonecell::CloneCell, copyhashmap::CopyHashMap, errorfmt::ErrorFmt, linkedlist::LinkedList, numcell::NumCell, oserror::OsError, @@ -1757,15 +1757,18 @@ impl Wm { let new_window = self.windows.get(&event.event); let mut focus_window = self.focus_window.as_ref(); if let Some(window) = new_window { - if let Some(prev) = focus_window { - let prev_pid = prev.info.pid.get(); - let new_pid = window.info.pid.get(); - if prev_pid.is_some() - && prev_pid == new_pid - && revent.serial() >= self.last_input_serial - { - // log::info!("xwm ACCEPT"); - focus_window = new_window; + if let Some(w) = window.window.get() { + if let Some(prev) = focus_window { + let prev_pid = prev.info.pid.get(); + let new_pid = window.info.pid.get(); + if prev_pid.is_some() + && prev_pid == new_pid + && revent.serial() >= self.last_input_serial + && w.surface.node_visible() + { + // log::info!("xwm ACCEPT"); + focus_window = new_window; + } } } }