[LyX/2.3.x] Only set dummy X11 selection if we do not own it
Scott Kostyshak
skostysh at lyx.org
Wed May 6 12:16:25 UTC 2020
commit 7a158055fe6c05763f88ddb61a9c02b42614091d
Author: Scott Kostyshak <skostysh at lyx.org>
Date: Fri Mar 27 21:23:08 2020 -0400
Only set dummy X11 selection if we do not own it
Before, we would continually set the selection to the empty string,
to maintain ownership. This causes problems with clipboard managers
GPaste and CopyQ. Further, in theory this should have better
performance since checking ownership should be faster than setting.
A disadvantage of this change is that the timestamp of the selection
will be old at this point in the code. However, when the selection
is requested, we put the selection contents at that point so the
selection timestamp should be accurate then. Further, the selection
contents are not accurate at this point in the code (they are just
the empty string), so it is not clear whether having an accurate
timestamp is beneficial.
Fixes #11715.
(cherry picked from commit af4ee1a487c4d899b71df02ba57c2f024fea6786)
(cherry picked from commit 23abb5aaa36af07aadfa5e565869104778ba0d6d)
---
src/frontends/qt4/GuiSelection.cpp | 7 ++++---
status.23x | 2 ++
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/frontends/qt4/GuiSelection.cpp b/src/frontends/qt4/GuiSelection.cpp
index fef258c..f525942 100644
--- a/src/frontends/qt4/GuiSelection.cpp
+++ b/src/frontends/qt4/GuiSelection.cpp
@@ -51,14 +51,15 @@ void GuiSelection::haveSelection(bool own)
// an application actually requests it.
// This way calling Selection::have() is cheap and we can do it as
// often as we want.
- //LYXERR(Debug::SELECTION, "GuiSelection: setting dummy selection");
- if (own)
+ if (own && !qApp->clipboard()->ownsSelection()) {
+ LYXERR(Debug::SELECTION, "GuiSelection: setting dummy selection");
qApp->clipboard()->setText(QString(), QClipboard::Selection);
+ }
// We don't need to do anything if own = false, as this case is
// handled by QT.
// FIXME (gb): This is wrong. What is missing here is rather a call of
- //else
// qApp->clipboard()->clear(QClipboard::Selection);
+ // when own is false.
// Since we do not issue this call we rather implement
// "persistent selections" as far as X is concerned.
}
diff --git a/status.23x b/status.23x
index 81ebd0d..0d0c181 100644
--- a/status.23x
+++ b/status.23x
@@ -119,6 +119,8 @@ What's new
- Do not insert \textquoteright with Hunspell (bug 11832).
+- Fix disappearing selection with clipboard managers on X11 (bug 11715).
+
* INTERNALS
More information about the lyx-cvs
mailing list