focus-follow-cursor: Change output focus when needed
This commit is contained in:
parent
0fecdf60cb
commit
49bf0e679f
3 changed files with 14 additions and 19 deletions
|
@ -136,10 +136,13 @@ that tag 1 through 9 are visible.
|
||||||
*focus-follows-cursor* *disabled*|*normal*|*strict*
|
*focus-follows-cursor* *disabled*|*normal*|*strict*
|
||||||
When _disabled_ moving the cursor will not influence the focus. This is the default setting.
|
When _disabled_ moving the cursor will not influence the focus. This is the default setting.
|
||||||
If set to _normal_ moving the cursor over a window will focus that window.
|
If set to _normal_ moving the cursor over a window will focus that window.
|
||||||
The focus still can be changed and moving the cursor within the (now unfocused) window will not change the focus to that window
|
The focus still can be changed and moving the cursor within the (now unfocused) window will
|
||||||
but let the currently focused window in focus.
|
not change the focus to that window but let the currently focused window in focus.
|
||||||
When set to _strict_ this is not the case. The focus will be updated on every cursor movement.
|
When set to _strict_ this is not the case. The focus will be updated on every cursor movement.
|
||||||
|
|
||||||
|
When the to be focused view is on another output than the currently focused output the view's
|
||||||
|
output is focused.
|
||||||
|
|
||||||
*map* [-release] _mode_ _modifiers_ _key_ _command_
|
*map* [-release] _mode_ _modifiers_ _key_ _command_
|
||||||
_mode_ is either "normal" (the default mode), "locked" (the mode entered when
|
_mode_ is either "normal" (the default mode), "locked" (the mode entered when
|
||||||
an input inhibitor such as a lock screen is active) or a mode created with *declare-mode*.
|
an input inhibitor such as a lock screen is active) or a mode created with *declare-mode*.
|
||||||
|
|
|
@ -584,25 +584,15 @@ fn passthrough(self: *Self, time: u32) void {
|
||||||
|
|
||||||
c.wlr_seat_pointer_notify_enter(self.seat.wlr_seat, wlr_surface, sx, sy);
|
c.wlr_seat_pointer_notify_enter(self.seat.wlr_seat, wlr_surface, sx, sy);
|
||||||
c.wlr_seat_pointer_notify_motion(self.seat.wlr_seat, time, sx, sy);
|
c.wlr_seat_pointer_notify_motion(self.seat.wlr_seat, time, sx, sy);
|
||||||
if (View.fromWlrSurface(wlr_surface)) |view| {
|
|
||||||
// Change focus according to config
|
|
||||||
switch (config.focus_follows_cursor) {
|
|
||||||
.disabled => {},
|
|
||||||
.normal => {
|
|
||||||
// Only refocus when the cursor entered a new surface
|
|
||||||
if (focus_change) {
|
|
||||||
self.seat.focus(view);
|
|
||||||
root.startTransaction();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
.strict => {
|
|
||||||
self.seat.focus(view);
|
|
||||||
root.startTransaction();
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
const follow_mode = config.focus_follows_cursor;
|
||||||
|
if (follow_mode == .strict or (follow_mode == .normal and focus_change)) {
|
||||||
|
if (View.fromWlrSurface(wlr_surface)) |view| {
|
||||||
|
self.seat.focus(view);
|
||||||
|
self.seat.focusOutput(view.output);
|
||||||
|
root.startTransaction();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// There is either no surface under the cursor or input is disallowed
|
// There is either no surface under the cursor or input is disallowed
|
||||||
|
|
|
@ -242,6 +242,8 @@ pub fn setFocusRaw(self: *Self, new_focus: FocusTarget) void {
|
||||||
|
|
||||||
/// Focus the given output, notifying any listening clients of the change.
|
/// Focus the given output, notifying any listening clients of the change.
|
||||||
pub fn focusOutput(self: *Self, output: *Output) void {
|
pub fn focusOutput(self: *Self, output: *Output) void {
|
||||||
|
if (self.focused_output == output) return;
|
||||||
|
|
||||||
const root = &self.input_manager.server.root;
|
const root = &self.input_manager.server.root;
|
||||||
|
|
||||||
var it = self.status_trackers.first;
|
var it = self.status_trackers.first;
|
||||||
|
|
Loading…
Reference in a new issue