aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-01-03 16:59:53 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-01-03 17:00:13 +0300
commita5f3b2a94902d10cfda6549e8a79cc638d2e2b08 (patch)
tree3121ca5b3c625d51ee0b76ac599d828e35a17970 /src
parent152ed59502bb0e7279d896f2ab4eaabfbcc536da (diff)
downloadniri-a5f3b2a94902d10cfda6549e8a79cc638d2e2b08.tar.gz
niri-a5f3b2a94902d10cfda6549e8a79cc638d2e2b08.tar.bz2
niri-a5f3b2a94902d10cfda6549e8a79cc638d2e2b08.zip
Clear on-demand layer-shell focus in more cases
Diffstat (limited to 'src')
-rw-r--r--src/handlers/compositor.rs2
-rw-r--r--src/handlers/mod.rs1
-rw-r--r--src/input/mod.rs29
3 files changed, 32 insertions, 0 deletions
diff --git a/src/handlers/compositor.rs b/src/handlers/compositor.rs
index dec86929..4b080cd8 100644
--- a/src/handlers/compositor.rs
+++ b/src/handlers/compositor.rs
@@ -201,7 +201,9 @@ impl CompositorHandler for State {
let new_focus = self.niri.layout.focus().map(|m| &m.window);
if new_focus == Some(&window) {
+ // We activated the newly opened window.
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
}
self.niri.queue_redraw(&output);
diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs
index 5b59ec45..f8cf1832 100644
--- a/src/handlers/mod.rs
+++ b/src/handlers/mod.rs
@@ -317,6 +317,7 @@ impl ClientDndGrabHandler for State {
if let Some((mapped, _)) = self.niri.layout.find_window_and_output(root) {
let window = mapped.window.clone();
self.niri.layout.activate_window(&window);
+ self.niri.layer_shell_on_demand_focus = None;
activate_output = false;
}
}
diff --git a/src/input/mod.rs b/src/input/mod.rs
index f30bf168..1a64930f 100644
--- a/src/input/mod.rs
+++ b/src/input/mod.rs
@@ -768,36 +768,42 @@ impl State {
Action::FocusColumnLeft => {
self.niri.layout.focus_left();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
Action::FocusColumnRight => {
self.niri.layout.focus_right();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
Action::FocusColumnFirst => {
self.niri.layout.focus_column_first();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
Action::FocusColumnLast => {
self.niri.layout.focus_column_last();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
Action::FocusColumnRightOrFirst => {
self.niri.layout.focus_column_right_or_first();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
Action::FocusColumnLeftOrLast => {
self.niri.layout.focus_column_left_or_last();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
@@ -814,6 +820,7 @@ impl State {
self.niri.layout.focus_up();
self.maybe_warp_cursor_to_focus();
}
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
@@ -831,6 +838,7 @@ impl State {
self.niri.layout.focus_down();
self.maybe_warp_cursor_to_focus();
}
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
@@ -848,6 +856,7 @@ impl State {
self.niri.layout.focus_left();
self.maybe_warp_cursor_to_focus();
}
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
@@ -865,6 +874,7 @@ impl State {
self.niri.layout.focus_right();
self.maybe_warp_cursor_to_focus();
}
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
@@ -872,48 +882,56 @@ impl State {
Action::FocusWindowDown => {
self.niri.layout.focus_down();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
Action::FocusWindowUp => {
self.niri.layout.focus_up();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
Action::FocusWindowDownOrColumnLeft => {
self.niri.layout.focus_down_or_left();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
Action::FocusWindowDownOrColumnRight => {
self.niri.layout.focus_down_or_right();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
Action::FocusWindowUpOrColumnLeft => {
self.niri.layout.focus_up_or_left();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
Action::FocusWindowUpOrColumnRight => {
self.niri.layout.focus_up_or_right();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
Action::FocusWindowOrWorkspaceDown => {
self.niri.layout.focus_window_or_workspace_down();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
Action::FocusWindowOrWorkspaceUp => {
self.niri.layout.focus_window_or_workspace_up();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
@@ -1042,12 +1060,14 @@ impl State {
Action::FocusWorkspaceDown => {
self.niri.layout.switch_workspace_down();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
Action::FocusWorkspaceUp => {
self.niri.layout.switch_workspace_up();
self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
@@ -1076,6 +1096,7 @@ impl State {
}
self.maybe_warp_cursor_to_focus();
}
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
@@ -1083,6 +1104,8 @@ impl State {
}
Action::FocusWorkspacePrevious => {
self.niri.layout.switch_workspace_previous();
+ self.maybe_warp_cursor_to_focus();
+ self.niri.layer_shell_on_demand_focus = None;
// FIXME: granular
self.niri.queue_redraw_all();
}
@@ -1160,6 +1183,7 @@ impl State {
if !self.maybe_warp_cursor_to_focus_centered() {
self.move_cursor_to_output(&output);
}
+ self.niri.layer_shell_on_demand_focus = None;
}
}
Action::FocusMonitorRight => {
@@ -1168,6 +1192,7 @@ impl State {
if !self.maybe_warp_cursor_to_focus_centered() {
self.move_cursor_to_output(&output);
}
+ self.niri.layer_shell_on_demand_focus = None;
}
}
Action::FocusMonitorDown => {
@@ -1176,6 +1201,7 @@ impl State {
if !self.maybe_warp_cursor_to_focus_centered() {
self.move_cursor_to_output(&output);
}
+ self.niri.layer_shell_on_demand_focus = None;
}
}
Action::FocusMonitorUp => {
@@ -1184,6 +1210,7 @@ impl State {
if !self.maybe_warp_cursor_to_focus_centered() {
self.move_cursor_to_output(&output);
}
+ self.niri.layer_shell_on_demand_focus = None;
}
}
Action::FocusMonitorPrevious => {
@@ -1192,6 +1219,7 @@ impl State {
if !self.maybe_warp_cursor_to_focus_centered() {
self.move_cursor_to_output(&output);
}
+ self.niri.layer_shell_on_demand_focus = None;
}
}
Action::FocusMonitorNext => {
@@ -1200,6 +1228,7 @@ impl State {
if !self.maybe_warp_cursor_to_focus_centered() {
self.move_cursor_to_output(&output);
}
+ self.niri.layer_shell_on_demand_focus = None;
}
}
Action::MoveWindowToMonitorLeft => {