You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Linux Phase 3: fix build, verify on Ubuntu 24.04, wire real CI
Three Linux-only build errors were blocking the Qt6 app from compiling
on a real Linux system (the implementation had only ever been written,
never built). Fixed:
- MainWindow.h: <QChangeEvent> is not a Qt6 header — use <QEvent>
- MainWindow.cpp: X11/Xlib.h defines KeyPress/KeyRelease/FocusIn/FocusOut
as preprocessor macros that shadow QEvent::Type enumerators of the
same name; undef them after the X11 include
- MainWindow.h: HotkeyEditFilter (defined in MainWindow.cpp) calls a
private MainWindow method — declare it as friend
With these fixes the app builds clean on Ubuntu 24.04 with Qt 6.4.2 /
GCC 13.3, all three Qt Test suites pass, the CLI handles happy and
parse-error paths correctly, and the GUI launches and renders the
Taneth palette under WSLg. CI workflow build-linux.yml replaces its
no-op placeholder with a real install + build + test + artifact step.
Docs updated: README, linux/README, PLAN to mark Phase 3 build verified
and document the WSL2/WSLg path (including the WSLg-specific quirk that
XTEST events injected by the engine are not visible to other XInput
observers under XWayland).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: PLAN.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -654,6 +654,8 @@ quadclicker --minimized
654
654
- AppImage is self-contained (ldd shows no unexpected external deps)
655
655
- Unit tests pass
656
656
657
+
**Status (2026-04-25):** Build is **verified** on Ubuntu 24.04 LTS (Qt 6.4.2, GCC 13.3) under WSL2/WSLg. All three test suites pass (`ClickRateParserTests`, `ClickSessionTests`, `CliArgumentTests`). CLI mode handles happy-path (`--rate`, `--stop-after-clicks`, `--location`) and parse-error paths (exit 1 on bad arg) correctly. GUI launches and renders the Taneth palette. CI workflow `build-linux.yml` now runs the real build. **Remaining:** Wayland (`uinput`) injection path is unexercised under WSL — needs a real Linux desktop session. Fedora build, AppImage / `.deb` packaging not yet done.
658
+
657
659
---
658
660
659
661
### Phase 4: Distribution — Package Managers, Code Signing, Releases
| 1 | Windows WPF — released **v0.1.0** as a self-contained single-file EXE | ✅ Done |
213
217
| 2 | macOS SwiftUI — code-complete, **unverified** (never compiled or run; `build-macos.yml` is a no-op placeholder) | 🔨 Pending Mac + Xcode |
214
-
| 3 | Linux Qt6/C++ — code-complete, **unverified**(never compiled or run; `build-linux.yml` is a no-op placeholder) | 🔨 Pending Linux + Qt6|
218
+
| 3 | Linux Qt6/C++ — **build verified**on Ubuntu 24.04 (Qt 6.4.2) under WSL2/WSLg: clean compile, all unit tests pass, CLI happy + parse-error paths exercised, GUI launches and renders. CI (`build-linux.yml`) now runs the real build. No `.deb` / AppImage published yet. | ✅ Built + tested|
215
219
216
220
### Known limitations
217
221
218
-
- The mode-based **Click Rate** redesign (Delay vs Frequency radio, live conversion hint, >100/s warning) and the **Taneth** color palette are **Windows-only** at this time. The macOS and Linux source still uses the original single-row click-rate input and the emerald-green palette; both are scheduled to be brought to parity once their builds are verified.
222
+
- The mode-based **Click Rate** redesign and the **Taneth** palette are now in all three platforms' source. Linux is verified end-to-end; macOS source has them but remains unbuilt pending an Xcode-equipped machine.
223
+
- Linux global hotkeys: `XGrabKey` (X11) is used; Wayland support is limited to compositors that expose `org.kde.kglobalaccel` (KDE) — GNOME Wayland users will not get global hotkeys until a compositor-side API exists.
219
224
220
225
---
221
226
@@ -229,7 +234,7 @@ Latest builds are published on GitHub Releases:
229
234
|---|---|---|
230
235
| Windows x64 |`QuadClicker-win-x64.zip`| Self-contained single-file EXE — **no .NET install required**. Unzip and run. |
231
236
| macOS | Not yet released | Phase 2 build is unverified; no signed/notarized artifact yet. |
232
-
| Linux | Not yet released |Phase 3 build is unverified; no `.deb` / `.rpm` / AppImage yet. |
237
+
| Linux | Not yet released |Build verified on Ubuntu 24.04 (Qt 6.4.2). No signed `.deb` / `.rpm` / AppImage published yet — packaging is the next step. |
233
238
234
239
The Windows binary is currently **unsigned** — Windows SmartScreen will warn on first launch until an Authenticode certificate is in place (see `CODE_SIGNING.md`).
**Status: Phase 3 — build verified.** Compiles clean on Ubuntu 24.04 (Qt 6.4.2, GCC 13.3) including under WSL2 with WSLg. All unit tests pass; CLI happy and parse-error paths exercised; GUI launches and renders the Taneth palette correctly. No signed `.deb` / AppImage published yet.
- The Qt app builds and runs as expected; the GUI renders through XWayland.
44
+
- XTEST events injected by the engine are not visible to other XInput observers under XWayland — this is a WSLg compositor quirk, not a bug in the engine. Click delivery on a real Linux desktop is unaffected.
45
+
-`uinput` is unavailable in WSL (no `/dev/uinput` from the host); use a real Linux session to exercise the Wayland injection path.
46
+
47
+
## Distribution Targets (planned)
24
48
25
49
- AppImage (portable)
26
50
-`.deb` package (Debian/Ubuntu)
27
51
- Snap
28
52
- Flatpak (`io.quadstronaut.QuadClicker`)
53
+
54
+
See `PLAN.md § Phase 3` and `§ Phase 4` in the repo root for full specification.
0 commit comments