2022-07-18 21:26:02 +02:00
|
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
|
|
|
|
|
|
use smithay::{
|
|
|
|
|
desktop::{Kind, Window},
|
2022-08-31 13:01:23 +02:00
|
|
|
input::Seat,
|
2022-07-18 21:26:02 +02:00
|
|
|
reexports::wayland_server::DisplayHandle,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
use crate::{
|
|
|
|
|
utils::prelude::*,
|
|
|
|
|
wayland::protocols::toplevel_management::{
|
|
|
|
|
delegate_toplevel_management, ToplevelManagementHandler, ToplevelManagementState,
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
impl ToplevelManagementHandler for State {
|
|
|
|
|
fn toplevel_management_state(&mut self) -> &mut ToplevelManagementState {
|
|
|
|
|
&mut self.common.shell.toplevel_management_state
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-31 13:01:23 +02:00
|
|
|
fn activate(&mut self, _dh: &DisplayHandle, window: &Window, seat: Option<Seat<Self>>) {
|
2022-08-30 13:28:36 +02:00
|
|
|
if let Some(idx) = self
|
|
|
|
|
.common
|
|
|
|
|
.shell
|
|
|
|
|
.space_for_window(window.toplevel().wl_surface())
|
|
|
|
|
.map(|w| w.idx)
|
|
|
|
|
{
|
2022-07-18 21:26:02 +02:00
|
|
|
let seat = seat.unwrap_or(self.common.last_active_seat.clone());
|
|
|
|
|
let output = active_output(&seat, &self.common);
|
|
|
|
|
if self.common.shell.active_space(&output).idx != idx {
|
|
|
|
|
self.common.shell.activate(&seat, &output, idx as usize);
|
|
|
|
|
}
|
2022-08-31 13:01:23 +02:00
|
|
|
Common::set_focus(self, Some(window.toplevel().wl_surface()), &seat, None);
|
2022-07-18 21:26:02 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn close(&mut self, _dh: &DisplayHandle, window: &Window) {
|
|
|
|
|
#[allow(irrefutable_let_patterns)]
|
|
|
|
|
if let Kind::Xdg(xdg) = &window.toplevel() {
|
|
|
|
|
xdg.send_close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
delegate_toplevel_management!(State);
|