diff options
| -rw-r--r-- | completions/bash/riverctl | 2 | ||||
| -rw-r--r-- | completions/fish/riverctl.fish | 2 | ||||
| -rw-r--r-- | completions/zsh/_riverctl | 2 | ||||
| -rw-r--r-- | doc/riverctl.1.scd | 6 | ||||
| -rw-r--r-- | river/Config.zig | 2 | ||||
| -rw-r--r-- | river/Cursor.zig | 4 |
6 files changed, 12 insertions, 6 deletions
diff --git a/completions/bash/riverctl b/completions/bash/riverctl index 881946f..14a5bfb 100644 --- a/completions/bash/riverctl +++ b/completions/bash/riverctl @@ -59,7 +59,7 @@ function __riverctl_completion () "map") OPTS="-release -repeat -layout" ;; "unmap") OPTS="-release" ;; "attach-mode") OPTS="top bottom" ;; - "focus-follows-cursor") OPTS="disabled normal" ;; + "focus-follows-cursor") OPTS="disabled normal always" ;; "set-cursor-warp") OPTS="disabled on-output-change" ;; "hide-cursor") OPTS="timeout when-typing" ;; *) return ;; diff --git a/completions/fish/riverctl.fish b/completions/fish/riverctl.fish index 7a09063..443e986 100644 --- a/completions/fish/riverctl.fish +++ b/completions/fish/riverctl.fish @@ -73,7 +73,7 @@ complete -c riverctl -x -n '__fish_seen_subcommand_from swap' -a complete -c riverctl -x -n '__fish_seen_subcommand_from map' -a '-release -repeat -layout' complete -c riverctl -x -n '__fish_seen_subcommand_from unmap' -a '-release' complete -c riverctl -x -n '__fish_seen_subcommand_from attach-mode' -a 'top bottom' -complete -c riverctl -x -n '__fish_seen_subcommand_from focus-follows-cursor' -a 'disabled normal' +complete -c riverctl -x -n '__fish_seen_subcommand_from focus-follows-cursor' -a 'disabled normal always' complete -c riverctl -x -n '__fish_seen_subcommand_from set-cursor-warp' -a 'disabled on-output-change' # Subcommands for 'input' diff --git a/completions/zsh/_riverctl b/completions/zsh/_riverctl index 8fec8fe..ed2662d 100644 --- a/completions/zsh/_riverctl +++ b/completions/zsh/_riverctl @@ -172,7 +172,7 @@ _riverctl() map) _alternative 'arguments:optional:(-release -repeat -layout)' ;; unmap) _alternative 'arguments:optional:(-release)' ;; attach-mode) _alternative 'arguments:args:(top bottom)' ;; - focus-follows-cursor) _alternative 'arguments:args:(disabled normal)' ;; + focus-follows-cursor) _alternative 'arguments:args:(disabled normal always)' ;; set-cursor-warp) _alternative 'arguments:args:(disabled on-output-change)' ;; hide-cursor) _riverctl_hide_cursor ;; *) return 0 ;; diff --git a/doc/riverctl.1.scd b/doc/riverctl.1.scd index 42e1500..0de4045 100644 --- a/doc/riverctl.1.scd +++ b/doc/riverctl.1.scd @@ -282,14 +282,16 @@ A complete list may be found in _/usr/include/linux/input-event-codes.h_ *border-width* _pixels_ Set the border width to _pixels_. -*focus-follows-cursor* *disabled*|*normal* - There are two available modes: +*focus-follows-cursor* *disabled*|*normal*|*always* + There are three available modes: - _disabled_: Moving the cursor does not affect focus. This is the default. - _normal_: Moving the cursor over a view will focus that view. Moving the cursor within a view will not re-focus that view if focus has moved elsewhere. + - _always_: Moving the cursor will always focus whatever view is + under the cursor. If the view to be focused is on an output that does not have focus, focus is switched to that output. diff --git a/river/Config.zig b/river/Config.zig index 9d0fa4c..7916621 100644 --- a/river/Config.zig +++ b/river/Config.zig @@ -29,6 +29,8 @@ pub const FocusFollowsCursorMode = enum { disabled, /// Only change focus on entering a surface normal, + /// Change focus on any cursor movement + always, }; pub const WarpCursorMode = enum { diff --git a/river/Cursor.zig b/river/Cursor.zig index d02a2bd..0b90054 100644 --- a/river/Cursor.zig +++ b/river/Cursor.zig @@ -902,7 +902,9 @@ pub fn checkFocusFollowsCursor(self: *Self) void { if (self.seat.pointer_drag) return; if (server.config.focus_follows_cursor == .disabled) return; if (self.surfaceAt()) |result| { - if (self.seat.wlr_seat.pointer_state.focused_surface != result.surface) { + if (server.config.focus_follows_cursor == .always or + self.seat.wlr_seat.pointer_state.focused_surface != result.surface) + { switch (result.parent) { .view => |view| { if (self.seat.focused != .view or self.seat.focused.view != view) { |
