Revert "Keep drag source focused until pointer leaves release window"

This reverts commit 7b6e592cb4.
This commit is contained in:
Samuel Onoja committed 2026-09-29 13:55:58 +01:00
1 parent 7b6e592cb4
commit 9b78aabf0a
2 files changed
+5 -67

No files matched your search

+2 -50
View File
@@ -25,17 +25,6 @@ use smithay::{
};
use crate::{Ferese, config::BindingAction};
use ferese_layout::WindowId;
fn hover_blocked_after_drag(blocked: &mut Option<WindowId>, target: Option<WindowId>) -> bool {
if let Some(window) = *blocked {
if target == Some(window) {
return true;
}
*blocked = None;
}
false
}
impl Ferese {
pub fn process_input_event<I: InputBackend>(&mut self, event: InputEvent<I>) {
@@ -290,12 +279,6 @@ impl Ferese {
InputEvent::PointerButton { event, .. } => {
let pointer = self.seat.get_pointer().expect("seat has a pointer");
let serial = SERIAL_COUNTER.next_serial();
let released_over_another_window = (event.state() == ButtonState::Released
&& pointer.is_grabbed())
.then(|| self.window_under_visual(pointer.current_location()))
.flatten()
.and_then(|window| self.window_ids.get(&window).copied())
.filter(|window| Some(*window) != self.focused_window);
// Native popup_done destroys Iced's window immediately. For
// effects-capable shell popups, release input now but defer
@@ -354,7 +337,6 @@ impl Ferese {
}
if event.state() == ButtonState::Pressed && !pointer.is_grabbed() {
self.hover_focus_blocked = None;
self.focus_window_at(pointer.current_location(), serial, true);
}
@@ -368,9 +350,6 @@ impl Ferese {
},
);
pointer.frame(self);
if event.state() == ButtonState::Released {
self.hover_focus_blocked = released_over_another_window;
}
}
InputEvent::PointerAxis { event, .. } => {
let source = event.source();
@@ -645,19 +624,8 @@ impl Ferese {
{
return;
}
if self.layer_under(position).is_some() {
self.hover_focus_blocked = None;
return;
}
let window = self.window_under_visual(position);
let target = window
.as_ref()
.and_then(|window| self.window_ids.get(window).copied());
if hover_blocked_after_drag(&mut self.hover_focus_blocked, target) {
return;
}
let Some(window) = window else {
let Some(window) = self.window_under_visual(position) else {
return;
};
if self.window_ids.get(&window).copied() == self.focused_window {
@@ -829,23 +797,7 @@ fn overview_escape(symbol: u32, overview_active: bool) -> bool {
#[cfg(test)]
mod tests {
use super::{
WindowId, emergency_shortcut_escape, hover_blocked_after_drag, overview_escape,
virtual_terminal,
};
#[test]
fn drag_release_does_not_turn_motion_inside_the_same_window_into_hover_focus() {
let selected = WindowId(1);
let other = WindowId(2);
let mut blocked = Some(other);
assert!(hover_blocked_after_drag(&mut blocked, Some(other)));
assert!(hover_blocked_after_drag(&mut blocked, Some(other)));
assert!(!hover_blocked_after_drag(&mut blocked, Some(selected)));
assert_eq!(blocked, None);
assert!(!hover_blocked_after_drag(&mut blocked, Some(other)));
}
use super::{emergency_shortcut_escape, overview_escape, virtual_terminal};
#[test]
fn escape_closes_only_an_active_overview() {