focus: Don't consider XWaylandGrab exclusive

This commit is contained in:
Victoria Brekenfeld 2025-08-15 13:14:13 +02:00 committed by Victoria Brekenfeld
parent 4209e61c48
commit b28f92a6e1
6 changed files with 36 additions and 61 deletions

View file

@ -26,7 +26,7 @@ use crate::{
},
utils::{float::NextDown, prelude::*, quirks::workspace_overview_is_open},
wayland::{
handlers::screencopy::SessionHolder,
handlers::{screencopy::SessionHolder, xwayland_keyboard_grab::XWaylandGrabSeat},
protocols::screencopy::{BufferConstraints, CursorSessionRef},
},
};
@ -241,12 +241,13 @@ impl State {
let current_focus = seat.get_keyboard().unwrap().current_focus();
let shortcuts_inhibited = current_focus.as_ref().is_some_and(|f| {
f.wl_surface()
.and_then(|surface| {
.map(|surface| {
seat.keyboard_shortcuts_inhibitor_for_surface(&surface)
.map(|inhibitor| inhibitor.is_active())
.unwrap_or(false)
|| seat.has_active_xwayland_grab(&surface)
})
.unwrap_or(false)
|| matches!(f, KeyboardFocusTarget::XWaylandGrab(_))
});
let sym = handle.modified_sym();
@ -686,12 +687,13 @@ impl State {
let current_focus = seat.get_keyboard().unwrap().current_focus();
let shortcuts_inhibited = current_focus.as_ref().is_some_and(|f| {
f.wl_surface()
.and_then(|surface| {
.map(|surface| {
seat.keyboard_shortcuts_inhibitor_for_surface(&surface)
.map(|inhibitor| inhibitor.is_active())
.unwrap_or(false)
|| seat.has_active_xwayland_grab(&surface)
})
.unwrap_or(false)
|| matches!(f, KeyboardFocusTarget::XWaylandGrab(_))
});
let serial = SERIAL_COUNTER.next_serial();
@ -1566,12 +1568,13 @@ impl State {
let shortcuts_inhibited = current_focus.as_ref().is_some_and(|f| {
f.wl_surface()
.and_then(|surface| {
.map(|surface| {
seat.keyboard_shortcuts_inhibitor_for_surface(&surface)
.map(|inhibitor| inhibitor.is_active())
.unwrap_or(false)
|| seat.has_active_xwayland_grab(&surface)
})
.unwrap_or(false)
|| matches!(f, KeyboardFocusTarget::XWaylandGrab(_))
});
self.common.atspi_ei.input(