qt5-qtwayland/0013-Client-do-not-empty-clipboard-when-a-new-popup-windo.patch

69 lines
2.6 KiB
Diff
Raw Permalink Normal View History

2023-04-18 08:01:07 +00:00
From 23327bb4cdc00b47e0f96efca2fe494540f01601 Mon Sep 17 00:00:00 2001
2021-10-13 07:51:45 +00:00
From: Jan Grulich <jgrulich@redhat.com>
Date: Fri, 16 Jul 2021 13:00:03 +0200
2023-04-18 08:01:07 +00:00
Subject: [PATCH 13/55] Client: do not empty clipboard when a new popup/window
2021-12-08 10:19:32 +00:00
is opened
2021-10-13 07:51:45 +00:00
If we open a new popup or a window within the same app we have to avoid
invalidating selection offer when losing focus, because it's still the
same client who has the focus and we might not get a new selection offer
by the compositor and therefore we would lose clipboard content.
Fixes: QTBUG-93474
Change-Id: Ia2ef826c2967b1daf1cdeb085e8dae66d090dbcf
2021-12-08 10:19:32 +00:00
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: David Edmundson <davidedmundson@kde.org>
Cherry-pick: 1e57ebd501cfc2255300392cd4565cd034efeed8
2021-10-13 07:51:45 +00:00
---
2021-12-08 10:19:32 +00:00
src/client/qwaylanddisplay.cpp | 13 +++++++++++++
src/client/qwaylandinputdevice.cpp | 8 --------
2 files changed, 13 insertions(+), 8 deletions(-)
2021-10-13 07:51:45 +00:00
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
2023-04-18 08:01:07 +00:00
index 1568052e..aa8808e9 100644
2021-10-13 07:51:45 +00:00
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
2023-04-18 08:01:07 +00:00
@@ -601,6 +601,19 @@ void QWaylandDisplay::handleWaylandSync()
2021-10-13 07:51:45 +00:00
QWindow *activeWindow = mActiveWindows.empty() ? nullptr : mActiveWindows.last()->window();
if (activeWindow != QGuiApplication::focusWindow())
QWindowSystemInterface::handleWindowActivated(activeWindow);
+
+ if (!activeWindow) {
+ if (lastInputDevice()) {
+#if QT_CONFIG(clipboard)
+ if (auto *dataDevice = lastInputDevice()->dataDevice())
+ dataDevice->invalidateSelectionOffer();
+#endif
+#if QT_CONFIG(wayland_client_primary_selection)
+ if (auto *device = lastInputDevice()->primarySelectionDevice())
+ device->invalidateSelectionOffer();
+#endif
+ }
+ }
}
2021-12-08 10:19:32 +00:00
2021-10-13 07:51:45 +00:00
const wl_callback_listener QWaylandDisplay::syncCallbackListener = {
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
2023-04-18 08:01:07 +00:00
index e931d1f5..5d704795 100644
2021-10-13 07:51:45 +00:00
--- a/src/client/qwaylandinputdevice.cpp
+++ b/src/client/qwaylandinputdevice.cpp
2023-04-18 08:01:07 +00:00
@@ -1304,14 +1304,6 @@ void QWaylandInputDevice::Keyboard::handleFocusDestroyed()
2021-10-13 07:51:45 +00:00
void QWaylandInputDevice::Keyboard::handleFocusLost()
{
mFocus = nullptr;
-#if QT_CONFIG(clipboard)
- if (auto *dataDevice = mParent->dataDevice())
- dataDevice->invalidateSelectionOffer();
-#endif
-#if QT_CONFIG(wayland_client_primary_selection)
- if (auto *device = mParent->primarySelectionDevice())
- device->invalidateSelectionOffer();
-#endif
mParent->mQDisplay->handleKeyboardFocusChanged(mParent);
mRepeatTimer.stop();
}
2021-12-08 10:19:32 +00:00
--
2023-04-18 08:01:07 +00:00
2.40.0
2021-12-08 10:19:32 +00:00