From 823543a75b673ec4210fcefaeba2abe6505d678d Mon Sep 17 00:00:00 2001 From: Tyler Date: Sun, 16 Aug 2026 06:17:11 +0000 Subject: [PATCH 1/3] Document float_bar_selection_mode and float_bar_foreground_detection in SETTINGS_JSON.md. The schema doc claimed to mirror settings.rs while omitting two shipped float-bar fields. --- docs/SETTINGS_JSON.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/SETTINGS_JSON.md b/docs/SETTINGS_JSON.md index 148b7017..794c1058 100644 --- a/docs/SETTINGS_JSON.md +++ b/docs/SETTINGS_JSON.md @@ -70,6 +70,8 @@ fields marked safe, but Ceiling may overwrite the file when the app exits. | `taskbar_widget_open_on_hover` | boolean | `true` | Open the taskbar glance panel after pointer dwell. Safe to edit. | | `float_bar_density` | string | `"standard"` | `"compact"`, `"standard"`, or `"detailed"`. Safe to edit. | | `float_bar_information_mode` | string | `"exact"` | `"exact"` or `"calm"`. Safe to edit. | +| `float_bar_selection_mode` | string | `"pinned"` | `"pinned"` (the configured list), `"active"` (the focused supported app), or `"activePlusCritical"` (active plus any pinned provider at or above the warning threshold); an invalid string normalizes to `"pinned"`. Safe to edit. | +| `float_bar_foreground_detection` | boolean | `true` | When `false`, `"active"` / `"activePlusCritical"` keep the pinned list and do not read the focused window. Safe to edit. | | `float_bar_contrast` | string or null | `"auto"` | `"auto"`, `"light-text"`, or `"dark-text"`; an invalid string normalizes to `"auto"`. `null` is accepted and deserializes to `None`, which resolves through the legacy `float_bar_dark_text` flag instead. Safe to edit. | | `float_bar_click_through` | boolean | `false` | Make the floating bar fully click-through. Safe to edit. | | `float_bar_provider_ids` | array of strings | `[]` | Empty means all enabled providers. Safe to edit. | From a454e28e5eae71be25b78e18b0a1bff5f752b544 Mon Sep 17 00:00:00 2001 From: tsouth89 Date: Sun, 16 Aug 2026 06:24:22 -0400 Subject: [PATCH 2/3] Document the last-active stickiness of float_bar_selection_mode (SBS-877) `"active"` does not mean "only the app focused right now". `snapshot_now` writes a match into `LAST_ACTIVE` and never clears it, and `selectVisibleFloatBarProviders` keeps that id when the focused window does not match; before anything has matched it returns the pinned list. A reader of the old row would expect the bar to drop the provider as soon as focus left a supported app. --- docs/SETTINGS_JSON.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/SETTINGS_JSON.md b/docs/SETTINGS_JSON.md index 794c1058..6c162ff7 100644 --- a/docs/SETTINGS_JSON.md +++ b/docs/SETTINGS_JSON.md @@ -70,7 +70,7 @@ fields marked safe, but Ceiling may overwrite the file when the app exits. | `taskbar_widget_open_on_hover` | boolean | `true` | Open the taskbar glance panel after pointer dwell. Safe to edit. | | `float_bar_density` | string | `"standard"` | `"compact"`, `"standard"`, or `"detailed"`. Safe to edit. | | `float_bar_information_mode` | string | `"exact"` | `"exact"` or `"calm"`. Safe to edit. | -| `float_bar_selection_mode` | string | `"pinned"` | `"pinned"` (the configured list), `"active"` (the focused supported app), or `"activePlusCritical"` (active plus any pinned provider at or above the warning threshold); an invalid string normalizes to `"pinned"`. Safe to edit. | +| `float_bar_selection_mode` | string | `"pinned"` | `"pinned"` (the configured list), `"active"` (the focused supported app), or `"activePlusCritical"` (active plus any pinned provider at or above the warning threshold); an invalid string normalizes to `"pinned"`. The active provider is sticky: focusing an unsupported app keeps the last matched provider, and the pinned list is used until something has matched at least once. Safe to edit. | | `float_bar_foreground_detection` | boolean | `true` | When `false`, `"active"` / `"activePlusCritical"` keep the pinned list and do not read the focused window. Safe to edit. | | `float_bar_contrast` | string or null | `"auto"` | `"auto"`, `"light-text"`, or `"dark-text"`; an invalid string normalizes to `"auto"`. `null` is accepted and deserializes to `None`, which resolves through the legacy `float_bar_dark_text` flag instead. Safe to edit. | | `float_bar_click_through` | boolean | `false` | Make the floating bar fully click-through. Safe to edit. | From 5d154c9c3ac421cc840594d6a7b67853ac84ec3e Mon Sep 17 00:00:00 2001 From: tsouth89 Date: Sun, 16 Aug 2026 07:33:21 -0400 Subject: [PATCH 3/3] Correct the active-mode and display-set claims in the settings table (SBS-877) Four things the previous wording got wrong or left out. "Any pinned provider at or above the warning threshold" reads as "only what I explicitly pinned", but `float_bar_provider_ids` defaults to empty and `pinned` in FloatBar.tsx then means every enabled provider, so the critical overlay is evaluated against a much wider set than a hand-editor expects. Stickiness is not just about unsupported windows. `snapshot_now` writes every `match_foreground_provider` hit into `LAST_ACTIVE` with no enabled or error check, and `selectVisibleFloatBarProviders` looks that id up only in the eligible set. Focus a mapped app whose provider is off or failing and the sticky id becomes unusable, so the bar drops back to the display set rather than keeping the provider you last used. Same path covers a provider that is later disabled or unpinned. `normalize_float_bar_selection_mode` matches the three tokens exactly, with no trim and no case folding, so `"Active"` and `" active "` silently become `"pinned"`. The row now says so rather than leaving "an invalid string" to the reader. --- docs/SETTINGS_JSON.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/SETTINGS_JSON.md b/docs/SETTINGS_JSON.md index 6c162ff7..aa35231b 100644 --- a/docs/SETTINGS_JSON.md +++ b/docs/SETTINGS_JSON.md @@ -70,7 +70,7 @@ fields marked safe, but Ceiling may overwrite the file when the app exits. | `taskbar_widget_open_on_hover` | boolean | `true` | Open the taskbar glance panel after pointer dwell. Safe to edit. | | `float_bar_density` | string | `"standard"` | `"compact"`, `"standard"`, or `"detailed"`. Safe to edit. | | `float_bar_information_mode` | string | `"exact"` | `"exact"` or `"calm"`. Safe to edit. | -| `float_bar_selection_mode` | string | `"pinned"` | `"pinned"` (the configured list), `"active"` (the focused supported app), or `"activePlusCritical"` (active plus any pinned provider at or above the warning threshold); an invalid string normalizes to `"pinned"`. The active provider is sticky: focusing an unsupported app keeps the last matched provider, and the pinned list is used until something has matched at least once. Safe to edit. | +| `float_bar_selection_mode` | string | `"pinned"` | `"pinned"` (the configured list), `"active"` (the focused supported app), or `"activePlusCritical"` (active plus any provider in the display set at or above the warning threshold). The display set is `float_bar_provider_ids` when that is non-empty, otherwise every enabled provider. Matching is exact and untrimmed, so `"Active"` or `" active "` fall back to `"pinned"`, as does any other unrecognized string. The active provider is sticky: an unrecognized window keeps it, but focusing an app mapped to a provider that is disabled or failing replaces it, and the bar falls back to the display set until a usable provider is focused. The display set is also what you see before anything has matched. Safe to edit. | | `float_bar_foreground_detection` | boolean | `true` | When `false`, `"active"` / `"activePlusCritical"` keep the pinned list and do not read the focused window. Safe to edit. | | `float_bar_contrast` | string or null | `"auto"` | `"auto"`, `"light-text"`, or `"dark-text"`; an invalid string normalizes to `"auto"`. `null` is accepted and deserializes to `None`, which resolves through the legacy `float_bar_dark_text` flag instead. Safe to edit. | | `float_bar_click_through` | boolean | `false` | Make the floating bar fully click-through. Safe to edit. |