Repository navigation
Conversation
Add opt-in keyboard or mouse activation, lightweight text/image previews, wrapping history navigation, selected-text copy/paste, and optional paste into a clicked destination. Reuse Ditto clipboard and target-tracking machinery. Include desktop image export and the reviewed popup styling.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds an opt-in Clipboard Carousel for browsing saved clips in a lightweight popup without opening the full Quick Paste list.
The main workflow is: open with a configured shortcut, scroll to a clip, optionally select part of its text, then click an editable destination to paste.
Motivation
Related to #151. This provides the global history-cycling and visible-preview workflow, but uses press-to-open with explicit confirmation rather than confirming when a modifier is released. It does not claim to implement that issue's exact interaction model.
A typical use case is retrieving an earlier snippet or image while working in another application, without navigating the full Ditto window. Text selection also lets the user paste only the useful part of a saved clip.
Behavior
clipOrder. Down/wheel down moves toward older entries; Up/wheel up moves toward newer entries. Navigation wraps at both ends.There is also a desktop image workflow: when the session starts on the desktop, selecting an image and left-clicking the desktop with outside-click paste enabled exports the original-resolution image as a uniquely named PNG. It uses Windows' configured Desktop folder and never overwrites an existing file. Export does not alter the clipboard or paste/history bookkeeping. Text/file clips, taskbar clicks, Enter, and application-started sessions do not export desktop files.
Implementation
MainFrm.clipOrder, not Quick Paste's current group/filter/sticky presentation.CProcessPaste/COleClipSource,CClip,GetClipData, existing image helpers, andExternalWindowTracker. Previews read saved data directly. A background thumbnail worker rejects stale results and stops before database shutdown.RegisterHotKey. Global mouse activation requires a low-level mouse hook; session wheel/outside-click handling and temporary keyboard controls share a dedicated hook thread. Callbacks dispatch to the UI thread rather than querying the database or pasting. Keyboard/session hooks drain consumed releases before cleanup; an idle mouse hook remains only for configured mouse activation.SendKeysto avoid unpaired Alt key-ups triggering Windows 11 Notepad's access-key hints.Testing
Clean Release x64 rebuild passed with MSVC v145, dynamic MFC, and Windows SDK 10.0.26100.0. There were no carousel-origin warnings or errors; existing warnings were not suppressed. This matches the solution/configuration used by the repository's PR workflow.
The following GUI checks were performed manually on Windows 11 against the same source now consolidated into this commit; they are not automated CI tests:
Additional source checks:
git diff --check upstream/master...HEAD.No automated end-to-end GUI suite is included. Elevated/protected targets, older Windows versions, and deliberately induced corrupt-image/disk-failure cases remain untested. Normal Windows paste restrictions still apply. Selecting a fragment is limited to the displayed 4,096-character preview; whole-clip confirmation is not truncated. Full-resolution desktop export may take longer for very large images.
Demo
GIF:

Video (with sound):
ditto-carousel-trailer-v2.mp4
The demonstration uses synthetic history in an isolated portable profile. A demo-only accommodation for automated input is not included in this PR; production input filtering is unchanged. Trailer camera effects are presentation, not application behavior. No screenshots, recordings, test databases, or recording tools are committed to the repository.