[Bug]: "Open Configuration Folder" on the config-error screen does nothing on Windows
- Dominant language
- Rust
- Stars
- 21k
- Forks
- 675
- Avg merge
- 2d 5h
- Merged PRs (30d)
- 172
Description
### Which part of OpenLogi?
GUI (desktop app)
### OpenLogi version
0.7.10 (local `master` build, 84aa1ed)
### Operating system
Windows
### OS version & architecture
Windows 11 Pro 10.0.26200, x86_64
### Device model
G502 Lightspeed + Unifying receiver (not device-dependent — the frame renders before any device state matters)
### How is the device connected?
Logi Bolt receiver
### Affected area(s)
- Settings / configuration (TOML)
### What happened?
On the fail-closed configuration-error screen (the frame with the ⚠ and "Configuration" headline, shown when `config.toml` fails to load), the **Open Configuration Folder** button does nothing at all. No Explorer window, no taskbar flash, no error surfaced to the user.
The other two buttons that reveal the same folder — the right panel's **Config folder** and Settings → About → **Show in file manager** — both work correctly. Only this one is dead.
### Steps to reproduce
1. Put an unsupported `schema_version` in `%USERPROFILE%\.config\openlogi\config.toml` (e.g. `schema_version = 99`).
2. Launch the GUI. The configuration-error frame appears.
3. Click **Open Configuration Folder**.
4. Nothing happens.
### Root cause
`crates/openlogi-desktop/src/app/status.rs:115` is the only `cx.dispatch_action` call site in the GUI:
```rust
.on_click(|_, _, cx| cx.dispatch_action(&OpenConfigFolder)),
```
`App::dispatch_action` routes through the *active* window rather than dispatching globally, and swallows the failure when that window cannot be resolved:
```rust
if let Some(active_window) = self.active_window() {
active_window
.update(self, |_, window, cx| window.dispatch_action(action.boxed_clone(), cx))
.log_err(); // <- "window not found", action dropped
} else {
self.dispatch_global_action(action);
}
```
`active_window()` on Windows resolves `GetActiveWindow()` against gpui's window list. On this frame that yields a handle `update()` cannot resolve, so the `OpenConfigFolder` handler never runs.
This screen is also the one place where a second window is always in play: an unreadable config falls back to `Config::ephemeral()`, so `update_prompt_seen` is `false` and `runtime.rs:113` opens the update-consent window alongside the error frame on every launch. That is the likely trigger for the unresolvable handle, though the dropped dispatch is what was directly observed.
Nothing about the mechanism is inherently Windows-only; it is labelled `platform: windows` because that is where it was reproduced and confirmed.
### Logs
Instrumented run, click on the button:
```
WARN openlogi_desktop::app::status: open-config-folder button clicked
ERROR gpui::app: window not found
```
The click reaches `on_click`; the action handler is never entered. The same handler body works when invoked directly from a button `on_click` on any other screen.
Contributor guide
No contributing guide indexed for this repository
Research direction
Reproduce the configuration-error screen on Windows, then read crates/openlogi-desktop/src/app/status.rs around line 115 and the App::dispatch_action path described in the report. Check runtime.rs around line 113 for the second-window setup; done means Open Configuration Folder opens the configuration directory from the error screen while the other buttons remain working.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- desktop
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 86/100