Skip to content

Releases: rgdevment/CopyPaste

v2.2.6

23 Apr 19:47
v2.2.6
5dd8893

Choose a tag to compare

Standalone:

  • Skip registry write if exe does not exist on disk
  • Skip registry write when running from a Flutter build folder (\build\windows)
  • Auto-remove stale HKCU...\Run entry in both cases

MSIX:

  • Remove any leftover HKCU...\Run entry from previous standalone installs on launch
  • Replace openWindowsStartupSettings workaround with real WinRT StartupTask API
  • Add C++ MethodChannel (copypaste/startup_task) via cppwinrt for getState / enable / disable
  • Handle DisabledByUser state by surfacing ms-settings:startupapps as fallback

Tests:

  • MsixStartupTask: state parsing, method dispatch, taskId forwarding, PlatformException handling
  • StartupHelper: isDevBuildPath edge cases, MSIX channel interaction

Full Changelog: v2.2.5...v2.2.6

v2.2.5

23 Apr 17:12
v2.2.5
3f4bcb3

Choose a tag to compare

  • Replaced the fragile compile-time STORE_BUILD flag with a runtime FFI call to
    GetCurrentPackageFullName (kernel32). The app now detects at startup whether it
    is running as an MSIX (Microsoft Store) package or a standalone installer.

  • Bootstrap log now includes the install type, full package name, resolved data path
    and acrylic status: msix=true|false, package=..., base=..., acrylicInit=...

  • Added WinKnownFolders.localAppData() - resolves %LOCALAPPDATA% via
    SHGetKnownFolderPath (shell32) instead of reading the environment variable.
    Works correctly in edge cases where the env var is absent (services, scheduled tasks).

  • StorageConfig.create() now accepts a windowsLocalAppDataResolver parameter so
    the resolution strategy is fully injectable and testable.

  • Removed the PowerShell-based StartupTask registration (~1.5 s overhead, AV friction).

  • MSIX builds now declare the startup task in the manifest (Enabled="true") and, when
    the user toggles the setting in-app, open ms-settings:startupapps via
    explorer.exe so Windows handles enablement - consistent with Microsoft's 2026
    Store guidelines.

  • Fixed a critical issue where new installs on Windows started with the main window
    hidden. Users who installed via the Microsoft Store and clicked the app icon saw
    nothing because the window remained hidden during the entire initialisation sequence.

  • showOnStart now includes Windows for first-run and onboarding scenarios.

  • Gate-mode window (enterGateMode) now sets skipTaskbar=false so the onboarding
    window is always reachable via the taskbar and Alt+Tab even if tray init fails.

  • New CrashLogger service writes a persistent crash.log to the app data folder
    on every unhandled error or startup failure, even before AppLogger is ready.

  • Log entries include: UTC timestamp, OS name/version, Dart version, context label,
    error message and stack trace.

  • Automatic PII redaction at write time: USERPROFILE/HOME path, username
    segments (\Users<user>, /Users/, /home/) and email addresses
    are replaced with , and before anything is written.

  • File is capped at 512 KB; older content is cleared automatically when the limit
    is reached.

  • main() is now wrapped in runZonedGuarded + FlutterError.onError +
    PlatformDispatcher.onError, all routing to CrashLogger.report.

  • A 10-second watchdog timer in _initShell() calls _forceVisibleFallback() if
    shell initialisation hangs, making the app window visible as a recovery path.

  • exportLogs now bundles crash.log (if present) inside the exported zip.

  • All log and crash file content is passed through CrashLogger.redact before being
    added to the archive - submitted reports contain no usernames, home paths or emails.

  • PRIVACY.md updated: new Crash Log section, crash.log added to all per-platform
    storage tables, export section reflects redaction, "Does NOT do" list updated.

  • README.md updated: export description and bug-reporting guide mention crash.log
    and automatic PII redaction.

  • New crash_logger_test.dart - 35 tests covering initialize, report, file rotation,
    overridePath, redaction (HOME, username, email, no false-positives).

  • support_service_test.dart - 7 new tests: crash.log included/excluded in zip,
    count excludes crash.log, redaction applied to logs and crash.log, non-sensitive
    content preserved.

  • storage_config_test.dart - 2 new tests: resolver used on Windows, ignored on
    other platforms.

  • Additional tests for search functionality and backup restoration callbacks.

Full Changelog: v2.2.4...v2.2.5

v2.2.4

20 Apr 02:08
v2.2.4
7431adf

Choose a tag to compare

  • Fix invisible window on Windows 10 / Intel GPU: added timeout + fallback to
    waitUntilReadyToShow, Window.initialize(), and Window.setEffect() so the app
    always shows even when Impeller stalls or Mica is unavailable

  • Windows update badge: GitHub Releases check now runs on all platforms
    (previously skipped on Windows standalone — badge never appeared)

  • Windows startup: MSIX build now uses the native Windows StartupTask API
    instead of the registry, no admin rights required; standalone installer
    unchanged

  • Diagnostic logs added throughout the window init pipeline (platform, version,
    acrylic init status, each init step) to simplify future bug reports

  • Linux package smoke test: skip libdartjni.so (Android JNI bridge pulled
    transitively — not loaded on Linux, was causing false failures)

  • Markdown linting: scope changed to project-owned files only, ignoring
    build artifacts and third-party plugin changelogs

  • README: added download badges for Windows, macOS and Linux; SEO and
    formatting improvements; new 'Other Tools' section linking to LinkUnbound

  • PRIVACY.md / SECURITY.md: fixed table formatting

  • CODE_OF_CONDUCT.md: fixed heading punctuation

What's Changed

  • feat: Implement MSIX startup task for Windows and update installer co… by @rgdevment in #38
  • refactor: Enhance window initialization and logging in AppWindow class by @rgdevment in #39

Full Changelog: v2.2.3...v2.2.4

v2.2.3

30 Mar 09:00
v2.2.3
f9510f5

Choose a tag to compare

  • Fix Windows single-instance enforcement: second instances no longer spawn duplicate windows

    • Replace unreliable GetLastError() with WaitForSingleObject() for mutex ownership detection
    • Change mutex name from Global\ to Local\ for compatibility with MSIX (Microsoft Store) packaging
    • Add native C++ guard in main.cpp using OpenMutexW before Flutter window creation, so no window flash occurs on duplicate launch
  • Windows: re-launching the app while already running now shows the onboarding screen (centered, focused) instead of a small popup near the cursor, making it impossible for basic users to miss

  • Wayland: improve unsupported session messages and dark mode detection on Linux

  • Linux: improve window focus handling and Wayland session detection

  • Remove unused setting

  • Reorganize FFI typedefs in single_instance.dart; remove dead getLastError binding from _Win32 singleton

  • Expand test coverage: AutoUpdateService, WindowFocusManager, Linux session, focus manager, single-instance mutex

  • Refactor Wayland session and startup helper tests for clarity

What's Changed

Full Changelog: v2.2.2...v2.2.3

v2.2.2

29 Mar 04:31
v2.2.2
de80b0d

Choose a tag to compare

  • fix: tray icon setting is now Windows-only — on macOS and Linux the tray icon always shows and the toggle no longer appears in Settings

  • fix: default showTrayIcon=true ensures all users (including those upgrading from older versions without this config) always start with tray mode

  • fix(ci): update script paths for linux-package-smoke.sh (moved to resources/scripts/)

  • chore: update README screenshots with v2 assets

Full Changelog: v2.2.1...v2.2.2

v2.2.1

29 Mar 03:40
v2.2.1
bac83bf

Choose a tag to compare

  • 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

v2.2.0

27 Mar 21:49
v2.2.0
1efb87c

Choose a tag to compare

  • Balloon notifications now display the app icon instead of the generic blue info icon (fixed FFI struct offsets for NOTIFYICONDATAW + ExtractIconW)

  • Startup and wakeup balloons are now localized (EN/ES)

  • Balloon messages correctly reflect the configured hotkey

  • Show in taskbar setting now defaults to off for all users

  • When taskbar mode is active, only a native taskbar click (or Escape) hides the window — hotkey and tray icon are unaffected

  • In-app hint (snackbar) is shown only when opening via the taskbar button, not via hotkey or tray

  • Fixed: pasting an item no longer leaves the window visible in taskbar mode

  • Update notifications are now enabled for Store builds — shows a Store-appropriate message with no GitHub links or Homebrew instructions

  • Store builds skip the Squirrel/WinSparkle updater and use the GitHub release API directly

  • Reset & Clean Install section moved from the About tab to the General tab

  • Snackbar hints are dismissed when the window is minimized and suppressed when Settings is open

  • Panel width default increased to 380 px (existing users keep their saved value)

  • Added NSAppleEventsUsageDescription to Info.plist for Accessibility compliance

  • Improved AppDelegate for accessibility permission handling

  • Windows 10/11 detection corrected in exported support logs (build ≥ 22000 → Windows 11)

  • Wakeup hint no longer stacks with existing snackbars

  • Single-instance wakeup handling improved on Windows

  • Added full test suite for SupportService (correctWindowsVersion, exportLogs)

  • Added showInTaskbar field coverage in AppConfigTest

  • Fixed pre-existing Windows binding error in AutoUpdateService tests

  • Coverage raised from ~78 % to ~86 % (excluding generated/l10n files)

What's Changed

  • feat: Add wakeup hint and improve single instance handling for Windows by @rgdevment in #34

Full Changelog: v2.1.6...v2.2.0

v2.1.6

27 Mar 04:45
v2.1.6
3bc6fe6

Choose a tag to compare

What's new since v2.1.5:

  • New: Enhanced support and reset features for CopyPaste, improving usability and reliability.
  • New: Added support for new clipboard content types (email, phone, color, etc.).
  • Improved: Updated localization files and user interface for a better experience.
  • Improved: Major updates to the settings screen and main window.
  • Improved: Better compatibility with macOS, including workflow and build improvements.
  • Improved: Updated dependencies for improved stability and compatibility.
  • Fixed: Various bug fixes and code refactoring for improved performance and maintainability.

This release includes many enhancements, new features, and bug fixes across the app, core, and workflows. For a full list of changes, see the project history.

What's Changed

  • feat: add support for new clipboard content types (email, phone, colo… by @rgdevment in #32
  • feat: Enhance support and reset features in CopyPaste by @rgdevment in #33

Full Changelog: v2.1.5...v2.1.6

v2.1.5

23 Mar 13:34
v2.1.5
0023fe3

Choose a tag to compare

  • Enhance Wayland support and update tray icon handling for Linux
  • Improve error handling and cleanup in various services and screens
  • Enhance Linux shell cleanup and improve clipboard event handling
  • Fix Microsoft Store CLI publish job: migrate from ubuntu-latest to windows-latest to resolve libsecret dependency error

What's Changed

  • fix: enhance Wayland support and update tray icon handling for Linux by @rgdevment in #30

Full Changelog: v2.1.4...v2.1.5

v2.1.4

20 Mar 13:22
v2.1.4
29785ba

Choose a tag to compare

  • Improve clipboard UI refresh: add debounce on reload and force-reload logic to prevent stale list after app update without restart (macOS/Linux/Windows)
  • Windows listener: replace redundant kWmClipboardUpdate with standard WM_CLIPBOARDUPDATE
  • Windows listener: fix IsUrl to only lowercase first 9 chars instead of full string copy (avoids MB-scale allocations on large clipboard content)
  • Windows listener: fix SetTextToClipboard to return false on encoding failure instead of writing empty string to clipboard
  • Windows listener: ShouldExclude now reads 4 bytes directly via GlobalLock instead of copying full clipboard format into vector
  • Windows listener: DetectFileType uses unordered_map for O(1) extension lookup instead of O(log n) map
  • Fix Microsoft OAuth token endpoint URL and change resource to scope parameter
  • Fix GitHub token handling and improve error reporting for asset downloads

What's Changed

  • fix: add GitHub token handling and improve error reporting for downloads by @rgdevment in #27
  • fix: update Microsoft OAuth token URL and change resource to scope by @rgdevment in #28
  • feat: improve clipboard handling with debounce and reload logic by @rgdevment in #29

Full Changelog: v2.1.3...v2.1.4