Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

181 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TrackClick

A cross-platform virtual mouse / dwell-clicker for Windows, macOS, and Linux, built in C++17 + Qt6.

image

Features

  • 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

Install

Prebuilt packages are produced by CI for each platform: a setup .exe on Windows, a .dmg on macOS, and a .deb for Debian/Ubuntu.

Linux (.deb)

sudo apt install ./trackclick-<version>-Linux.deb

Ubuntu 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).

Requirements

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

Build

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  # Windows

To specify a custom Qt installation:

cmake -B build -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_PREFIX_PATH=/path/to/Qt/6.x.x/gcc_64

See BUILD.md for platform-specific notes.

Compiling translations to .qm (optional optimisation)

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.qm

Place 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.

Updating translations without rebuilding

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.

Adding a new language

  1. Create translations/trackclick_<code>.ts following the format of an existing file.
  2. Add it to resources.qrc (under the /translations prefix) so it is embedded in the binary.
  3. Add a m_cmbLanguage->addItem(...) entry in SettingsDialog::buildUi() (settingsdialog.cpp).
  4. (Optional) Add it to the TS_FILES list in CMakeLists.txt so CMake compiles a .qm file when LinguistTools are available.

Project Structure

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

License

See LICENSE.

About

Experimenting with rewriting a mouse controlling application.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages