Merge pull request #148 from pop-os/xwayland-keyboard-grab

This commit is contained in:
Victoria Brekenfeld 2023-08-09 23:51:05 +02:00 committed by GitHub
commit 1f3761a5da
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 25 additions and 2 deletions

2
Cargo.lock generated
View file

@ -3765,7 +3765,7 @@ checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
[[package]]
name = "smithay"
version = "0.3.0"
source = "git+https://github.com/smithay//smithay?rev=cd2f688a0d#cd2f688a0d56a762cf1c3e4606898d0eb5cbe964"
source = "git+https://github.com/smithay//smithay?rev=02ccc8ca17#02ccc8ca17fbc655d2247124fe628d276cb5179a"
dependencies = [
"appendlist",
"ash",

View file

@ -80,4 +80,4 @@ debug = true
lto = "fat"
[patch."https://github.com/Smithay/smithay.git"]
smithay = { git = "https://github.com/smithay//smithay", rev = "cd2f688a0d" }
smithay = { git = "https://github.com/smithay//smithay", rev = "02ccc8ca17" }

View file

@ -69,6 +69,7 @@ use smithay::{
shell::{kde::decoration::KdeDecorationState, xdg::decoration::XdgDecorationState},
shm::ShmState,
viewporter::ViewporterState,
xwayland_keyboard_grab::XWaylandKeyboardGrabState,
},
};
use tracing::error;
@ -299,6 +300,7 @@ impl State {
let wl_drm_state = WlDrmState;
let kde_decoration_state = KdeDecorationState::new::<Self>(&dh, Mode::Client);
let xdg_decoration_state = XdgDecorationState::new::<Self>(&dh);
XWaylandKeyboardGrabState::new::<Self>(&dh);
let shell = Shell::new(&config, dh);

View file

@ -22,3 +22,4 @@ pub mod viewporter;
pub mod wl_drm;
pub mod workspace;
pub mod xdg_shell;
pub mod xwayland_keyboard_grab;

View file

@ -0,0 +1,20 @@
// SPDX-License-Identifier: GPL-3.0-only
use crate::{shell::focus::target::KeyboardFocusTarget, state::State};
use smithay::{
delegate_xwayland_keyboard_grab, reexports::wayland_server::protocol::wl_surface::WlSurface,
wayland::xwayland_keyboard_grab::XWaylandKeyboardGrabHandler,
};
impl XWaylandKeyboardGrabHandler for State {
fn keyboard_focus_for_xsurface(&self, surface: &WlSurface) -> Option<KeyboardFocusTarget> {
let element = self
.common
.shell
.workspaces
.spaces()
.find_map(|x| x.element_for_wl_surface(surface))?;
Some(KeyboardFocusTarget::Element(element.clone()))
}
}
delegate_xwayland_keyboard_grab!(State);