aboutsummaryrefslogtreecommitdiff
path: root/src/handlers
diff options
context:
space:
mode:
authorChristian Meissl <meissl.christian@gmail.com>2024-11-03 14:50:02 +0100
committerIvan Molodetskikh <yalterz@gmail.com>2024-11-03 09:13:41 -0800
commit354c365a0345787f6b98ee2d77d4516150a61254 (patch)
treeff7e82d849fad0c7bbe9563010c1387e1ef987d9 /src/handlers
parente0ebf1bdff06c38ae3cc9e3114b41572cb792dc0 (diff)
downloadniri-354c365a0345787f6b98ee2d77d4516150a61254.tar.gz
niri-354c365a0345787f6b98ee2d77d4516150a61254.tar.bz2
niri-354c365a0345787f6b98ee2d77d4516150a61254.zip
xdg: cleanup activation tokens
valid tokens will stay around until explicitly cleaned-up. remove the token after it has been successfully used or we consider it timed out to prevent leaking the memory used by the activation tokens
Diffstat (limited to 'src/handlers')
-rw-r--r--src/handlers/mod.rs9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs
index f3f5cb82..6de1e09e 100644
--- a/src/handlers/mod.rs
+++ b/src/handlers/mod.rs
@@ -7,6 +7,7 @@ use std::io::Write;
use std::os::fd::OwnedFd;
use std::sync::Arc;
use std::thread;
+use std::time::Duration;
use smithay::backend::allocator::dmabuf::Dmabuf;
use smithay::backend::drm::DrmNode;
@@ -80,6 +81,8 @@ use crate::{
delegate_output_management, delegate_screencopy,
};
+pub const XDG_ACTIVATION_TOKEN_TIMEOUT: Duration = Duration::from_secs(10);
+
impl SeatHandler for State {
type KeyboardFocus = WlSurface;
type PointerFocus = WlSurface;
@@ -624,16 +627,18 @@ impl XdgActivationHandler for State {
fn request_activation(
&mut self,
- _token: XdgActivationToken,
+ token: XdgActivationToken,
token_data: XdgActivationTokenData,
surface: WlSurface,
) {
- if token_data.timestamp.elapsed().as_secs() < 10 {
+ if token_data.timestamp.elapsed() < XDG_ACTIVATION_TOKEN_TIMEOUT {
if let Some((mapped, _)) = self.niri.layout.find_window_and_output(&surface) {
let window = mapped.window.clone();
self.niri.layout.activate_window(&window);
self.niri.layer_shell_on_demand_focus = None;
self.niri.queue_redraw_all();
+
+ self.niri.activation_state.remove_token(&token);
}
}
}