diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/input/mod.rs | 40 | ||||
| -rw-r--r-- | src/niri.rs | 3 |
2 files changed, 16 insertions, 27 deletions
diff --git a/src/input/mod.rs b/src/input/mod.rs index 74290692..e753c42d 100644 --- a/src/input/mod.rs +++ b/src/input/mod.rs @@ -29,7 +29,7 @@ use smithay::input::touch::{ }; use smithay::input::SeatHandler; use smithay::output::Output; -use smithay::utils::{Logical, Point, Rectangle, Size, Transform, SERIAL_COUNTER}; +use smithay::utils::{Logical, Point, Rectangle, Transform, SERIAL_COUNTER}; use smithay::wayland::keyboard_shortcuts_inhibit::KeyboardShortcutsInhibitor; use smithay::wayland::pointer_constraints::{with_pointer_constraint, PointerConstraint}; use smithay::wayland::selection::data_device::DnDGrab; @@ -2295,20 +2295,13 @@ impl State { pointer.frame(self); - // contents_under() will return no surface when the hot corner should trigger. - let hot_corners = self.niri.config.borrow().gestures.hot_corners; - if !hot_corners.off - && pointer.current_focus().is_none() - && !self.niri.screenshot_ui.is_open() - { - let hot_corner = Rectangle::from_size(Size::from((1., 1.))); - if let Some((_, pos_within_output)) = self.niri.output_under(pos) { - let inside_hot_corner = hot_corner.contains(pos_within_output); - if inside_hot_corner && !was_inside_hot_corner { - self.niri.layout.toggle_overview(); - } - self.niri.pointer_inside_hot_corner = inside_hot_corner; + // contents_under() will return no surface when the hot corner should trigger, so + // pointer.motion() will set the current focus to None. + if under.hot_corner && pointer.current_focus().is_none() { + if !was_inside_hot_corner { + self.niri.layout.toggle_overview(); } + self.niri.pointer_inside_hot_corner = true; } // Activate a new confinement if necessary. @@ -2384,20 +2377,13 @@ impl State { pointer.frame(self); - // contents_under() will return no surface when the hot corner should trigger. - let hot_corners = self.niri.config.borrow().gestures.hot_corners; - if !hot_corners.off - && pointer.current_focus().is_none() - && !self.niri.screenshot_ui.is_open() - { - let hot_corner = Rectangle::from_size(Size::from((1., 1.))); - if let Some((_, pos_within_output)) = self.niri.output_under(pos) { - let inside_hot_corner = hot_corner.contains(pos_within_output); - if inside_hot_corner && !was_inside_hot_corner { - self.niri.layout.toggle_overview(); - } - self.niri.pointer_inside_hot_corner = inside_hot_corner; + // contents_under() will return no surface when the hot corner should trigger, so + // pointer.motion() will set the current focus to None. + if under.hot_corner && pointer.current_focus().is_none() { + if !was_inside_hot_corner { + self.niri.layout.toggle_overview(); } + self.niri.pointer_inside_hot_corner = true; } self.niri.maybe_activate_pointer_constraint(); diff --git a/src/niri.rs b/src/niri.rs index c59a3df8..5b270f48 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -528,6 +528,8 @@ pub struct PointContents { pub window: Option<(Window, HitType)>, // If surface belongs to a layer surface, this is that layer surface. pub layer: Option<LayerSurface>, + // Pointer is over a hot corner. + pub hot_corner: bool, } #[derive(Debug, Default)] @@ -3403,6 +3405,7 @@ impl Niri { if !hot_corners.off { let hot_corner = Rectangle::from_size(Size::from((1., 1.))); if hot_corner.contains(pos_within_output) { + rv.hot_corner = true; return rv; } } |
