Accept Hyprland's input:follow_mouse, and turn focus-follows-mouse on

Focus follows mouse was already there and already off. cosmic-comp has
supported it for as long as this fork has existed -- focus_follows_cursor and
focus_follows_cursor_delay, both live-watched -- and the schema already exposed
them under general. What was missing was the Hyprland spelling: there was no
input section at all, so a config written the way a Hyprland user would write
it named a setting that did not exist.

So this is an alias, not a new setting. input.follow_mouse and
input.follow_mouse_delay resolve to exactly the same cosmic-config keys as
general.focus_follows_cursor and its delay, and both spellings stay. Setting
both in one file is not an error; the last assignment wins, which is the rule
the rest of the file already follows. A test pins the two pairs to the same
targets, because a rebase that renames a target key would otherwise leave one
spelling working and the other quietly dead.

follow_mouse needs its own type. Hyprland writes it as a number and COSMIC
stores a bool, so Ty::FollowMouse maps 0 to false and 1 to true -- the same
trick Ty::Mode already plays for dark/light. Hyprland's 2 and 3 split pointer
focus from keyboard focus, which cosmic-comp cannot express: it has one focus
and either moves it or does not. They are rejected with a diagnostic that says
why, rather than rounded up to 1, because silently handing click-to-focus to
someone who asked for the opposite is worse than telling them the mode does not
exist here. Anything else gets the ordinary "expected 0 or 1" error.

There is no autoraise key because autoraise is not a separate feature.
raise_with_children runs inside update_active, which is what the
focus-follows-cursor timer ends up calling, so a floating window under the
pointer comes to the front as part of being focused. Tiled windows do not
overlap, so raising one is a no-op.

The delay is left at COSMIC's 250ms rather than shortened. It is what stops
focus from skating across every window the pointer crosses on its way
somewhere else, and that failure is more irritating than the wait.

Installing the binary before editing the config is the required order, not a
preference: resolution is transactional, so the old binary meeting an unknown
input section would refuse to write the whole file, not just that block.
This commit is contained in:
2026-08-10 16:01:04 +07:00
parent 08028e6f2c
commit 4ba11d1bb5
3 changed files with 204 additions and 0 deletions
+26
View File
@@ -50,6 +50,32 @@ general {
gaps_out = $gap * 2
}
# --- Input ---------------------------------------------------------------
#
# Focus follows the mouse, which COSMIC supports but ships turned off. Hyprland
# spells it `input:follow_mouse`, and that spelling is what this file accepts;
# `general:focus_follows_cursor` is the same setting under COSMIC's own name,
# and setting both is not an error -- whichever comes last in the file wins.
#
# Autoraise comes with it and is not a separate key. cosmic-comp raises a
# window as part of focusing it, so a floating window under the pointer comes
# to the front on its own. Tiled windows do not overlap, so there is nothing
# there to raise.
#
# The delay is what stops the focus from skating across every window between
# where the pointer started and where it stopped -- moving the mouse to a menu
# on the far side of the screen should not hand focus to whatever it crossed on
# the way. 250ms is COSMIC's own default and is kept rather than shortened,
# because the failure it prevents is more annoying than the wait.
#
# Only 0 and 1 mean anything here. Hyprland's 2 and 3 separate pointer focus
# from keyboard focus, which cosmic-comp cannot do -- it has one focus. Those
# values are rejected with an explanation rather than rounded to 1.
input {
follow_mouse = 1
follow_mouse_delay = 250
}
# --- Launcher -----------------------------------------------------------
#
# The hyprcosmic profile does not start cosmic-launcher or cosmic-app-library,