v2.2.1
- New onboarding screen shown on first launch for Windows users, guiding them through
the hotkey, tray icon, and background operation. - Default hotkey changed from Ctrl+Alt+V to Ctrl+Shift+V to avoid conflicts with
common system shortcuts on Windows. - Wakeup via named pipe: when a second instance is launched, the running instance
is brought to the foreground instead of opening a duplicate window. - Version-aware onboarding: the screen is shown once per install and correctly
suppressed on subsequent launches and after updates. - Improved Windows balloon notification copy.
- Wayland is now officially unsupported (X11 only). When CopyPaste is launched on a
Wayland session, a clear on-brand gate screen is shown explaining the limitation and
linking to the GitHub repo. The app does not attempt to run. - Autostart blocked on Wayland: the .desktop autostart entry is never created (and
any existing one is removed) when a Wayland session is detected. - Fixed: spurious OS notification ("CopyPaste esta preparado") appearing on the first
hotkey press. Caused by a missing gdk_notify_startup_complete() call in the GTK
application activate handler. - Fixed: Settings window not resizing correctly on Linux. Added GTK event-loop flush
delays around setResizable and geometry constraint calls to prevent race conditions
with the compositor. - Improved paste focus restoration: the _NET_ACTIVE_WINDOW message now uses source=2
(pager) instead of source=1 (application), which bypasses focus-stealing prevention
on KDE Plasma and some GNOME configurations. Added XRaiseWindow and a fallback
XSetInputFocus with X11 error trapping. - X11 atom caching: _NET_ACTIVE_WINDOW and _NET_WM_PID atoms are now interned once per
process instead of on every clipboard poll, reducing unnecessary round-trips to the
X server. - XTest extension check: XTestQueryExtension() is called once at startup; if the
extension is unavailable a warning is logged and paste simulation is disabled cleanly
instead of crashing. - Fixed potential memory leak in activateAndPaste: the return value of g_timeout_add()
is now checked; if registration fails the method call reference is released and paste
falls through immediately. - Cleaner hotkey registration errors: failure paths in registerHotkey now emit g_warning
messages (unsupported key, no modifiers, missing keycode, XGrabKey conflict), making
debugging on unusual desktop environments significantly easier. - XSync before XGetWindowAttributes: flushes pending X requests before reading window
attributes during hotkey registration, preventing stale-state reads. - Clipboard type constants: replaced magic numbers 0-6 throughout the Linux native code
with named #define constants (CLIP_TYPE_TEXT, CLIP_TYPE_IMAGE, etc.), matching the
Dart ClipboardDataType enum. - Removed all dead Wayland compatibility code (_waylandMode field, setWaylandMode()
method, all related guards).
- ClipboardService now handles unsupported or corrupt image formats gracefully instead
of throwing an unhandled exception. - StorageConfig: improved directory resolution logic for cross-platform consistency.
- CleanupService: orphan file detection is now more accurate — avoids incorrectly
deleting files that are referenced but whose records are in a different state. - ImageProcessor: improved file-existence checks and error handling paths.
- BackupService: minor directory management fixes to prevent failures on first run
when the backup directory does not yet exist.
A large batch of new tests was added across the codebase:
- TextClassifier edge cases: multiline input, all email/UUID/IP/color/JSON/phone
patterns, boundary conditions. - ClipboardService reclassification: ensures legacy plain-text items are correctly
re-typed as email, UUID, IP, color, JSON, phone, link on load. - Repository search integration: FTS5 full-text search and LIKE fallback paths,
combined filters, empty queries, special characters. - BackupService integration: full backup/restore cycle, directory creation, file integrity.
- ClipboardEvent platform parsing: all content types, malformed payloads, missing fields.
- Linux: isWaylandSession() — idempotency, non-Linux platforms, GDK_BACKEND=x11
override, headless/CI environment. - Linux: WaylandUnsupportedScreen — title, badge, body text, both buttons, callback,
dark mode, Spanish locale. - Linux: StartupHelper Wayland skip — verifies no .desktop file is created on Wayland
and that stale entries are removed. - Windows: WindowsOnboardingScreen — full widget coverage including locale, dark mode,
button callbacks. - Windows: SingleInstance — wakeup file handling, named pipe signalling, debounce logic.
- README updated with Linux beta notice, Wayland limitation explanation, and clearer
getting-started instructions. - Fixed broken Table of Contents anchor link in README.
- PRIVACY.md refreshed.
What's Changed
- Fix: windows instances by @rgdevment in #35
- feat: Update README and implement Wayland support checks in Linux cli… by @rgdevment in #36
Full Changelog: v2.2.0...v2.2.1