aboutsummaryrefslogtreecommitdiff
path: root/src/handlers
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-02-07 10:49:01 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-02-07 10:49:01 +0400
commit9896fd67a0dcdade5f05568aa7b12fa17605976b (patch)
treed61647ec4c805629976f7c7c8b271bce2403b882 /src/handlers
parent15ec699fbbc9fc7fe1c865aa96584bec15fd2831 (diff)
downloadniri-9896fd67a0dcdade5f05568aa7b12fa17605976b.tar.gz
niri-9896fd67a0dcdade5f05568aa7b12fa17605976b.tar.bz2
niri-9896fd67a0dcdade5f05568aa7b12fa17605976b.zip
Open dialogs to the right of their parent, don't steal focus
Diffstat (limited to 'src/handlers')
-rw-r--r--src/handlers/compositor.rs18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/handlers/compositor.rs b/src/handlers/compositor.rs
index 517c8942..79ad5d12 100644
--- a/src/handlers/compositor.rs
+++ b/src/handlers/compositor.rs
@@ -104,8 +104,22 @@ impl CompositorHandler for State {
let window = entry.remove();
window.on_commit();
- if let Some(output) = self.niri.layout.add_window(window, None, false).cloned()
- {
+ let parent = window
+ .toplevel()
+ .parent()
+ .and_then(|parent| self.niri.layout.find_window_and_output(&parent))
+ .map(|(win, _)| win.clone());
+
+ let win = window.clone();
+
+ // Open dialogs immediately to the right of their parent window.
+ let output = if let Some(p) = parent {
+ self.niri.layout.add_window_right_of(&p, win, None, false)
+ } else {
+ self.niri.layout.add_window(win, None, false)
+ };
+
+ if let Some(output) = output.cloned() {
self.niri.queue_redraw(output);
}
return;