From 6d9cfe28823e88df68f172496c928bd366777ad1 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Sat, 11 May 2024 10:30:51 +0400 Subject: Don't start a resize if edges is empty --- src/input.rs | 86 +++++++++++++++++++++++++++++++----------------------------- 1 file changed, 44 insertions(+), 42 deletions(-) (limited to 'src') diff --git a/src/input.rs b/src/input.rs index ccae9397..e30655ec 100644 --- a/src/input.rs +++ b/src/input.rs @@ -1095,51 +1095,53 @@ impl State { .resize_edges_under(output, pos_within_output) .unwrap(); - // See if we got a double resize-click gesture. - // FIXME: deduplicate with resize_request in xdg-shell somehow. - let time = get_monotonic_time(); - let last_cell = mapped.last_interactive_resize_start(); - let last = last_cell.get(); - last_cell.set(Some((time, edges))); - let mut did_gesture = false; - if let Some((last_time, last_edges)) = last { - if time.saturating_sub(last_time) <= DOUBLE_CLICK_TIME { - let intersection = edges.intersection(last_edges); - if intersection.intersects(ResizeEdge::LEFT_RIGHT) { - // FIXME: don't activate once we can pass specific windows to - // actions. - self.niri.layout.activate_window(&window); - self.niri.layout.toggle_full_width(); + if !edges.is_empty() { + // See if we got a double resize-click gesture. + // FIXME: deduplicate with resize_request in xdg-shell somehow. + let time = get_monotonic_time(); + let last_cell = mapped.last_interactive_resize_start(); + let last = last_cell.get(); + last_cell.set(Some((time, edges))); + let mut did_gesture = false; + if let Some((last_time, last_edges)) = last { + if time.saturating_sub(last_time) <= DOUBLE_CLICK_TIME { + let intersection = edges.intersection(last_edges); + if intersection.intersects(ResizeEdge::LEFT_RIGHT) { + // FIXME: don't activate once we can pass specific windows + // to actions. + self.niri.layout.activate_window(&window); + self.niri.layout.toggle_full_width(); + } + if intersection.intersects(ResizeEdge::TOP_BOTTOM) { + // FIXME: don't activate once we can pass specific windows + // to actions. + self.niri.layout.activate_window(&window); + self.niri.layout.reset_window_height(); + } + did_gesture = true; } - if intersection.intersects(ResizeEdge::TOP_BOTTOM) { - // FIXME: don't activate once we can pass specific windows to - // actions. - self.niri.layout.activate_window(&window); - self.niri.layout.reset_window_height(); - } - did_gesture = true; } - } - self.niri.layout.activate_window(&window); - - if !did_gesture - && self - .niri - .layout - .interactive_resize_begin(window.clone(), edges) - { - let start_data = PointerGrabStartData { - focus: None, - button: event.button_code(), - location, - }; - let grab = ResizeGrab::new(start_data, window.clone()); - pointer.set_grab(self, grab, serial, Focus::Clear); - self.niri.interactive_resize_ongoing = true; - self.niri - .cursor_manager - .set_cursor_image(CursorImageStatus::Named(edges.cursor_icon())); + self.niri.layout.activate_window(&window); + + if !did_gesture + && self + .niri + .layout + .interactive_resize_begin(window.clone(), edges) + { + let start_data = PointerGrabStartData { + focus: None, + button: event.button_code(), + location, + }; + let grab = ResizeGrab::new(start_data, window.clone()); + pointer.set_grab(self, grab, serial, Focus::Clear); + self.niri.interactive_resize_ongoing = true; + self.niri.cursor_manager.set_cursor_image( + CursorImageStatus::Named(edges.cursor_icon()), + ); + } } } } -- cgit