Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions cosmic-settings/src/pages/desktop/window_management.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub enum Message {
SuperKey(usize),
CompConfigUpdate(Box<CosmicCompConfig>),
SetFocusFollowsCursor(bool),
SetFocusFollowsCursorRaise(bool),
SaveFocusFollowsCursorDelay(bool),
SetFocusFollowsCursorDelay(String),
SetCursorFollowsFocus(bool),
Expand All @@ -32,6 +33,9 @@ pub struct Page {
pub super_key_active: Option<usize>,
comp_config: cosmic_config::Config,
focus_follows_cursor: bool,
// Whether a window focused by the cursor is also raised. Only meaningful
// when `focus_follows_cursor` is enabled.
focus_follows_cursor_raise: bool,
focus_follows_cursor_delay: u64,
focus_delay_text: String,
cursor_follows_focus: bool,
Expand All @@ -50,6 +54,16 @@ impl Default for Page {
}
false
});
// Defaults to true so that turning on focus-follows-cursor keeps the

@gold gold Aug 27, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion only:

The historical behavior is a UX gaffe; thus part of the fix should be to change the default to focus and not raise, which is what the majority of users who enable focus follows cursor would want. Allow the user to opt in to the historical behavior.

// historical "focus and raise" behaviour unless the user opts out.
let focus_follows_cursor_raise = comp_config
.get("focus_follows_cursor_raise")
.unwrap_or_else(|err| {
if err.is_err() {
error!(?err, "Failed to read config 'focus_follows_cursor_raise'");
}
true
});
let cursor_follows_focus = comp_config
.get("cursor_follows_focus")
.unwrap_or_else(|err| {
Expand Down Expand Up @@ -96,6 +110,7 @@ impl Default for Page {
super_key_active: super_key_active_config(),
comp_config,
focus_follows_cursor,
focus_follows_cursor_raise,
focus_follows_cursor_delay,
focus_delay_text: format!("{focus_follows_cursor_delay}"),
cursor_follows_focus,
Expand Down Expand Up @@ -129,6 +144,15 @@ impl Page {
error!(?err, "Failed to set config 'focus_follows_cursor'");
}
}
Message::SetFocusFollowsCursorRaise(value) => {
self.focus_follows_cursor_raise = value;
if let Err(err) = self.comp_config.set(
"focus_follows_cursor_raise",
self.focus_follows_cursor_raise,
) {
error!(?err, "Failed to set config 'focus_follows_cursor_raise'");
}
}
Message::SaveFocusFollowsCursorDelay(save) => {
// Debounce to avoid spam writing config on user input
if save {
Expand Down Expand Up @@ -300,6 +324,7 @@ pub fn window_controls() -> Section<crate::pages::Message> {
pub fn focus_navigation() -> Section<crate::pages::Message> {
crate::slab!(descriptions {
focus_follows_cursor = fl!("focus-navigation", "focus-follows-cursor");
focus_follows_cursor_raise = fl!("focus-navigation", "focus-follows-cursor-raise");
focus_follows_cursor_delay = fl!("focus-navigation", "focus-follows-cursor-delay");
cursor_follows_focus = fl!("focus-navigation", "cursor-follows-focus");
});
Expand All @@ -316,6 +341,15 @@ pub fn focus_navigation() -> Section<crate::pages::Message> {
settings::item::builder(&descriptions[focus_follows_cursor])
.toggler(page.focus_follows_cursor, Message::SetFocusFollowsCursor),
)
// Sub-option of focus-follows-cursor: only shown while
// focus-follows-cursor is on, since raising has no effect
// without follow-cursor focus.
.add_maybe(page.focus_follows_cursor.then(|| {
settings::item::builder(&descriptions[focus_follows_cursor_raise]).toggler(
page.focus_follows_cursor_raise,
Message::SetFocusFollowsCursorRaise,
)
}))
.add(settings::item(
&descriptions[focus_follows_cursor_delay],
widget::editable_input("", &page.focus_delay_text, false, |editing| {
Expand Down
1 change: 1 addition & 0 deletions i18n/en/cosmic_settings.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -508,6 +508,7 @@ window-controls = Window controls

focus-navigation = Focus navigation
.focus-follows-cursor = Focus follows cursor
.focus-follows-cursor-raise = Raise window on focus
.focus-follows-cursor-delay = Focus follows cursor delay in ms
.cursor-follows-focus = Cursor follows focus

Expand Down