[Anvil] XDG activate support

This commit is contained in:
Poly 2021-06-27 03:47:04 +02:00 committed by Victor Berger
parent 453f33d5a4
commit 3623947939
1 changed files with 29 additions and 1 deletions

View File

@ -1,7 +1,7 @@
use std::cell::RefCell; use std::cell::RefCell;
use smithay::{ use smithay::{
reexports::wayland_server::protocol::wl_surface, reexports::{wayland_protocols::xdg_shell::server::xdg_toplevel, wayland_server::protocol::wl_surface},
utils::Rectangle, utils::Rectangle,
wayland::{ wayland::{
compositor::{with_states, with_surface_tree_downward, SubsurfaceCachedState, TraversalAction}, compositor::{with_states, with_surface_tree_downward, SubsurfaceCachedState, TraversalAction},
@ -52,6 +52,25 @@ impl Kind {
_ => false, _ => false,
} }
} }
/// Activate/Deactivate this window
pub fn set_activated(&self, active: bool) {
match *self {
Kind::Xdg(ref t) => {
let changed = t.with_pending_state(|state| {
if active {
state.states.set(xdg_toplevel::State::Activated)
} else {
state.states.unset(xdg_toplevel::State::Activated)
}
});
if let Ok(true) = changed {
t.send_configure();
}
}
_ => {}
};
}
} }
#[derive(Clone)] #[derive(Clone)]
@ -252,6 +271,15 @@ impl WindowMap {
} }
if let Some((i, surface)) = found { if let Some((i, surface)) = found {
let winner = self.windows.remove(i); let winner = self.windows.remove(i);
// Take activation away from all the windows
for window in self.windows.iter() {
window.toplevel.set_activated(false);
}
// Give activation to our winner
winner.toplevel.set_activated(true);
self.windows.insert(0, winner); self.windows.insert(0, winner);
Some(surface) Some(surface)
} else { } else {