Releases: rgdevment/CopyPaste
v2.6.3
Problem (unresolved across 4 releases):
When copying an image and pasting it into a web app that treats the paste
as a file (Gemini, ChatGPT, uploaders), Chromium always assigned the same
fixed name 'imagen.png'. A second distinct image collided and the site
rejected it with 'la imagen imagen.png ya existe'. The name was invented by
Chromium, not the app, which is why adding/removing CF_HDROP changed nothing.
Fix:
SetImageToClipboard now also offers the image as a named virtual file with a
unique .png name (CFSTR_FILEDESCRIPTORW + CFSTR_FILECONTENTS) alongside
CF_DIBV5, via the plain SetClipboardData flow (no OLE). Chromium hands that
unique name to the uploader and the collision is gone. Inline paste (image
editors, rich-text) keeps taking the bitmap.
Validated in Gemini: two distinct images upload without error; inline OK.
Also includes:
- Copy icon in card hover actions (same action as the context menu).
- Self-write guard via GetClipboardOwner() (no longer drops external copies).
- processFiles ignores paths inside the internal images store.
Full Changelog: v2.6.2...v2.6.3
v2.6.2
- Remove unconditional CF_HDROP from SetImageToClipboard: browsers/chats
were pasting the file with the shell's generic 'imagen' name, colliding
on the second image. Restores inline-bitmap paste and fixes the
read-path hash/dedup inconsistency on self-writes. - Self-write guard now also checks GetClipboardOwner() so an external copy
made right after our own write is no longer lost. - processFiles ignores HDROP paths inside the app's own images store.
- Add copy icon to clipboard card hover actions.
Full Changelog: v2.6.1...v2.6.2
v2.6.1
Fixes the UI freeze when searching large lists: card text layout bounded to
a preview, metadata/ext parsing memoized, and source-file existence checks
moved off build(). The database already runs off the UI thread.
Severity: patch
Min-Supported: 2.3.0
Full Changelog: v2.6.0...v2.6.1
v2.6.0
Adds a Copy action (puts an item on the clipboard and moves it to the top
without pasting). Fixes the UI freeze when searching large lists (database
moved off the UI thread) and the Windows image-paste name collision in
Explorer/Desktop (now offers CF_HDROP with the file's unique name).
Hardening: error handling, stale temp-file cleanup, XDG autostart, MSIX
reveal, and native thumbnail-provider dedup.
Severity: recommended
Min-Supported: 2.3.0
Full Changelog: v2.5.0...v2.6.0
v2.5.0
Multi-monitor positioning, window position persistence, and clipboard
robustness improvements.
- Windows: fix multi-monitor positioning. The window now opens on the
monitor where the cursor lives, regardless of per-monitor DPI mix
(e.g. 4K@150% + 1080p@100%). Two underlying issues are addressed:
(a) bypasswindow_managerplugin's double-DPR scaling in setPosition
via direct Win32SetWindowPos/FindWindowW/GetWindowRect,
(b) fix latent FFI typedef bug forMonitorFromPointwhosePOINT
argument was being passed as two Int32s, breaking the x64 ABI and
silently making cursor monitor detection always fall back to the
primary work area. - Window position persistence: new "Remember window position" toggle in
Settings → Behavior (default OFF). When enabled, the window reopens at
the last position used, including across hide/show, settings entry/exit,
and gate mode. Saved coordinates are validated against current visible
monitors before restoration; out-of-range or off-screen values fall back
to cursor positioning. macOS/Linux include a 50ms post-set verification
with auto-recovery. - Clipboard image handling: BITMAPV5 support added so wider/taller images
copied from modern apps are no longer dropped or corrupted (#43). - Concurrency: config writes are now serialized through a single chained
future, eliminating last-writer-wins races between window-position
persistence and other settings (e.g. onboarding flags, accessibility). - Robustness: race fix in
hide()(visibility flag flipped before async
position read),FindWindowWscoped to the Flutter window class to
avoid matching foreign processes named "CopyPaste", sane-range guard
on saved coordinates rejects NaN, infinities and Windows minimized
sentinels (-32000), and "Reset to Defaults" now clears the persisted
coordinates. - Build: drop
sqlite3andsqlite3_flutter_libs(#45) and prune them
from iOS Podfile.lock; lower image build footprint and dependency
surface on macOS/iOS. - Tests: 16 new cases covering the three new
AppConfigfields
(defaults, JSON round-trip, copyWith sentinel for nullable, save/load),
plus 12 new cases for cross-platform sane-range validation.
Severity: recommended
Min-Supported: 2.3.0
What's Changed
- fix: enhance image processing for clipboard handling with BITMAPV5 su… by @rgdevment in #43
- chore: update dependencies and remove sqlite3_flutter_libs plugin by @rgdevment in #45
- feat: add window position persistence feature with settings toggle by @rgdevment in #46
Full Changelog: v2.4.1...v2.5.0
v2.4.1
What's Changed
- chore: add msix_config for startup_task and improve error logging in … by @rgdevment in #42
Full Changelog: v2.4.0...v2.4.1
v2.4.0
Primary focus of this release is Linux: new native distribution channels,
deeper platform integration, and onboarding parity with Windows/macOS.
Windows and macOS are unchanged at runtime.
Linux distribution
- Native apt/dnf/zypper repositories via the openSUSE Build Service
(Debian 12/13, Ubuntu 22.04/24.04, Fedora 40/41, openSUSE Tumbleweed). - Self-updating AppImage via AppImageUpdate: each release now embeds a
.zsync URL and ships the companion .zsync file. - New portable tarball artifact (CopyPaste--linux-x64.tar.gz)
used by OBS and available for manual installs.
Linux platform integration
- Native thumbnail provider and desktop notifier.
- Refactored X11 clipboard activation and pasting.
- Linux cursor monitoring and input focus retrieval.
- Enhanced tray functionality with capability warnings.
- Detailed error handling on global hotkey registration.
- Clipboard change handling simplified (debounce removed on Linux).
- Refactored Linux session detection with broader test coverage.
Linux onboarding & UX
- Dedicated desktop onboarding screen.
- Updated hotkey label handling.
- Default shortcut fix for Linux/X11.
Release pipeline
- Release manifest is now driven by the tag message (Severity,
Min-Supported, Blocked trailers). See RELEASING.md for the full flow. - GitHub Release now publishes AppImage+zsync, .deb, .rpm, portable
tarball and SHA256SUMS in one shot. - OBS publish job wired into the pipeline (tag-driven rebuild).
Documentation
- README: reorganized Linux install section (OBS → Homebrew →
self-updating AppImage → manual) with no hype icons, plus updated
download table and platform matrix. - SECURITY.md: documents the OBS-signed repositories and the AppImage
delta-update trust chain. - New RELEASING.md: single source of truth for how releases are cut.
Severity: recommended
Min-Supported: 2.3.0
What's Changed
- Feat linux improvments by @rgdevment in #41
Full Changelog: v2.3.0...v2.4.0
v2.3.0
-
Native thumbnail provider for macOS and Windows (WIC-based on Windows,
NSImage-based on macOS) integrated into ClipboardService -
Asynchronous image processing queue (ImageProcessingQueue) with async
disposal and retry logic for clipboard capture -
ThumbnailQueue: stale-item handling, logging, and new isIdle property
for accurate queue-state inspection -
New DB fields: thumbPath and sourceModifiedAt on ClipboardItem with
automatic schema migration -
WebP encoding support added and then removed in favour of native
platform codecs; BMP retained as universal fallback for unsupported formats -
Improved orphan-image cleanup and safety checks for file deletion in
ClipboardService -
CleanupService: image quota enforcement (imagesQuotaMB) to cap disk
usage by stored images -
CleanupService: tracking of broken external references across service
restarts; thumbnails are preserved during cleanup passes -
Paste-preset options and reset-filters-on-show toggle in Settings
-
Multimedia and cleanup settings exposed in onboarding and Settings screens
-
Simplified onboarding: removed personalisation step to reduce friction
-
AppConfig extended with keepBrokenItemsDays, resetFiltersOnShow and
imagesQuotaMB fields -
Release manifest service with Ed25519 signature verification
-
Blocked-version detection with InstallChannelDetector and UrlHelper
platform overrides; blocked-version screen with per-channel upgrade URLs -
Update-available store messages clarified in English and Spanish
-
release-manifest.json: latest=2.3.0, minimumSupported=2.3.0,
blockedVersions=["2.2.6"], severity=critical -
Fix async disposal order in service teardown to avoid race conditions
-
Fix safety checks preventing accidental deletion of unrelated files
-
Fix BMP fallback path when clipboard image format is unsupported
-
Codecov: PR comments enabled with diff-per-file and per-flag breakdown;
require_changes=true to avoid noise on doc-only PRs -
GitHub Actions: pull-requests: write permission added for bot comments
-
Removed auto_updater_macos / Sparkle dependency from Podfile.lock
-
New/extended tests: ImageProcessingQueue, ThumbnailQueue, MacOS/Windows
native thumbnail providers, SQLite migration, thumb path retrieval,
ClipboardService reclassification, SettingsScreen smoke tests,
AppConfig (keepBrokenItemsDays, resetFiltersOnShow, imagesQuotaMB),
BlockedVersionScreen with channel URL resolution
What's Changed
- fix: retain BMP fallback for unsupported image formats in clipboard p… by @rgdevment in #40
Full Changelog: v2.2.6...v2.3.0
v2.3.0-beta.1
-
Native thumbnail provider for macOS and Windows
-
Background thumbnail queue with stale-detection and manual refresh
-
Tracks
thumbPathandsourceModifiedAton clipboard items -
Async image processing queue with configurable max-bytes gate
-
Retain BMP fallback for unsupported formats (SVG, PDF, etc.)
-
Enhanced safety checks for file deletion (out-of-scope path guard)
-
Image quota enforcement: purge oldest images when storage exceeds limit
-
Track broken external references (
brokenSince) and auto-purge after configurable days -
New
updateKeepBrokenCallbackandupdateImagesQuotaCallbackhooks -
Release manifest service with signature verification
-
InstallChannelDetectorandUrlHelperwith platform overrides -
Blocked-version screen improvements
-
Paste preset options and reset-filters-on-show setting
-
Multimedia and cleanup settings in onboarding
-
isIdleproperty onThumbnailQueuefor UI state -
Remove onboarding personalization options
-
Remove WebP encoding (reverted)
-
Improved code formatting and readability across services
Full Changelog: v2.2.6...v2.3.0-beta.1
v2.2.6
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