AprilNEA / AprilNEA/OpenLogi

[Bug]: "Open Configuration Folder" on the config-error screen does nothing on Windows

Open Beginner friendly
#941 0 comments 0 reactions 0 assignees View on GitHub
area: gui platform: windows type: bug
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.