A cross-platform virtual mouse / dwell-clicker for Windows, macOS, and Linux, built in C++17 + Qt6.
- Floating toolbar — frameless, always-on-top, draggable
- Click types — Left, Right, Middle; single, double, drag start/stop
- Scroll — Up, Down, Left, Right
- Modifier toggles — Ctrl, Alt, Shift (one-shot, cleared after click)
- AutoMouse (dwell click) — hover to click automatically after a configurable delay; orange progress bar shows countdown
- Settings dialog — dwell time, sensitivity, visible buttons, opacity, button layout, icon-only mode
- Button layouts — Rectangle (grid), Horizontal (one row), or Vertical (one column)
- Multilingual UI — English, Čeština, Français, Español, 中文简体, 日本語, 한국어; language switches live without restart
- System tray — minimize to tray; double-click to restore
- Persistent settings — window position and all preferences saved across sessions
Prebuilt packages are produced by CI for each platform: a setup .exe on Windows, a .dmg on macOS, and a .deb for Debian/Ubuntu.
sudo apt install ./trackclick-<version>-Linux.debUbuntu 22.04 LTS or newer is required (Debian 12 "bookworm" or newer for Debian). The package links the system Qt 6 rather than bundling it, and its dependency list is derived from the distribution it was built on — so it declares libc6 (>= 2.35) and the libqt6* runtime packages.
Ubuntu 20.04 and older cannot install it. Those releases ship no Qt 6 packages at all — Qt 6 was first packaged in Ubuntu 22.04 — so apt refuses with:
Depends: libc6 (>= 2.35) but 2.31-0ubuntu9.18 is to be installed
Depends: libqt6core6 (>= 6.2.0) but it is not installable
No apt repository or --fix-broken will resolve this; the packages genuinely do not exist for that release. On an older distribution, either upgrade it or build from source (CMake falls back to Qt 5.12+ automatically, though that configuration is not covered by CI).
Building from source:
| Platform | Requirement |
|---|---|
| All | Qt 6.2+ (Qt 5.12+ works but is untested by CI), CMake 3.16+, C++17 compiler |
| Windows | MSVC 2019+ or MinGW-w64 |
| macOS | Xcode 13+; grant Accessibility permission on first launch |
| Linux | Ubuntu 22.04+ / Debian 12+ for the prebuilt .deb; libxtst-dev (Debian/Ubuntu) or libXtst-devel (Fedora/RHEL); X11/XWayland required |
git clone <this repo>
cd TrackClick
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel
# Run
./build/TrackClick # Linux/macOS
.\build\Release\TrackClick.exe # WindowsTo specify a custom Qt installation:
cmake -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=/path/to/Qt/6.x.x/gcc_64See BUILD.md for platform-specific notes.
All translation .ts files are embedded directly in the binary via resources.qrc and parsed at runtime — no external tools are required for any language to work.
If Qt LinguistTools (lrelease) happen to be installed, CMake automatically compiles the .ts files to binary .qm format, which loads slightly faster. You can also do this manually:
lrelease translations/trackclick_cs.ts -qm build/translations/trackclick_cs.qm
lrelease translations/trackclick_fr.ts -qm build/translations/trackclick_fr.qm
lrelease translations/trackclick_es.ts -qm build/translations/trackclick_es.qm
lrelease translations/trackclick_zh_CN.ts -qm build/translations/trackclick_zh_CN.qm
lrelease translations/trackclick_ja.ts -qm build/translations/trackclick_ja.qm
lrelease translations/trackclick_ko.ts -qm build/translations/trackclick_ko.qmPlace the resulting .qm files in a translations/ folder next to the executable. The app searches that directory first and falls back to the embedded .ts copy.
Translation files are searched in this order at startup and on every language switch:
| Priority | Location | Notes |
|---|---|---|
| 1 | <user-data>/translations/ |
Drop a file here to override the bundled copy |
| 2 | <binary>/translations/ |
Shipped alongside the executable |
| 3 | <binary>/../translations/ |
macOS app bundle |
| 4 | Embedded in binary | Built-in fallback, always present |
User-data paths by platform:
| Platform | Path |
|---|---|
| macOS | ~/Library/Application Support/TrackClick/translations/ |
| Windows | %LOCALAPPDATA%\TrackClick\TrackClick\translations\ |
| Linux | ~/.local/share/TrackClick/translations/ |
Place a file named trackclick_<code>.ts (e.g. trackclick_fr.ts) in that directory. The app picks it up the next time that language is selected — no restart or rebuild needed. A compiled .qm file of the same stem is accepted too and loads slightly faster.
- Create
translations/trackclick_<code>.tsfollowing the format of an existing file. - Add it to
resources.qrc(under the/translationsprefix) so it is embedded in the binary. - Add a
m_cmbLanguage->addItem(...)entry inSettingsDialog::buildUi()(settingsdialog.cpp). - (Optional) Add it to the
TS_FILESlist inCMakeLists.txtso CMake compiles a.qmfile when LinguistTools are available.
TrackClick/
├── CMakeLists.txt — Build system
├── resources.qrc — Embedded icons and translation files
├── icons/ — SVG button icons
├── translations/ — Qt Linguist .ts source files (cs, fr, es, zh_CN, ja, ko)
├── main.cpp — Entry point
├── mainwindow.h/cpp — Floating toolbar UI
├── dwellmanager.h/cpp — AutoMouse dwell-click engine
├── clickinjector.h/cpp — Platform-specific mouse event injection
└── settingsdialog.h/cpp — Configuration dialog & AppSettings struct
See LICENSE.