Summary: | buffer activated through Klipper's list can't be pasted to any panel's field | ||
---|---|---|---|
Product: | [Plasma] plasmashell | Reporter: | Andrey <butirsky> |
Component: | Clipboard | Assignee: | Plasma Bugs List <plasma-bugs> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | bugseforuns, kde, nate, oiiu19 |
Priority: | NOR | Keywords: | wayland |
Version: | git-master | ||
Target Milestone: | 1.0 | ||
Platform: | Compiled Sources | ||
OS: | Linux | ||
See Also: | https://bugs.kde.org/show_bug.cgi?id=445751 | ||
Latest Commit: | https://invent.kde.org/frameworks/kguiaddons/commit/3984732e007e71632a525d89227fdfe94fa037ad | Version Fixed In: | 5.102 |
Sentry Crash Report: |
Description
Andrey
2021-09-16 13:27:14 UTC
This is a tough one, Qt (in Qt code) blocks when it reads clipboard data, so we block when trying to read data from ourselves. Any use of threads to write the data won't help as it's too late, we're blocked before we can get notified to send anything. Potentially we can update the regular clipboard from inside system clipboard, then Qt will think it owns the data and not try and fetch it remotely. We also have this problem the other way round, if you copy something within plasma it won't get into the system clipboard. (In reply to David Edmundson from comment #2) > We also have this problem the other way round, if you copy something within > plasma it won't get into the system clipboard. BTW, that way we get empty items in Klipper A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/1086 *** Bug 446835 has been marked as a duplicate of this bug. *** A possibly relevant merge request was started @ https://invent.kde.org/frameworks/kguiaddons/-/merge_requests/55 A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/1609 A possibly relevant merge request was started @ https://invent.kde.org/frameworks/kguiaddons/-/merge_requests/80 Git commit 3984732e007e71632a525d89227fdfe94fa037ad by David Redondo. Committed on 08/12/2022 at 09:54. Pushed by davidre into branch 'master'. waylandclipboard: Update QClipboard when gaining focus A process that owns the clipboard via KSystemClipboard (wlr-data-control) and tries to read the clipboard via QClipboard will deadlock itself and eventually times out because the read is done blocking and the send event is only received afterwards by WaylandClipboard. When Qt knows it owns the keyboard it can get the data directly, so the idea is to set QClipboard if possible. However this can be done only when the Application has focus. Unfortunately inside Qt window system events are delieverd asnycronously while QClipboard uses signal to indicate changes, this makes QGuiApplication::focusWindowChanged not useable here because it happens to late - after the QClipboard signal. For this reason we bind to the wl_seat and track focus ourselves. QClipboard takes ownership of QMimeData that is passed into it and so does KSystemClipboard and ultimately DataControlSource which now uses unique_ptr to signify this and make it clear that ownership is transferred when the QClipboard is set. Related: bug 454379 M +5 -0 src/CMakeLists.txt M +106 -4 src/systemclipboard/waylandclipboard.cpp M +3 -0 src/systemclipboard/waylandclipboard_p.h https://invent.kde.org/frameworks/kguiaddons/commit/3984732e007e71632a525d89227fdfe94fa037ad |