Am Mittwoch, 3. Januar 2007 12:33 schrieb Abdelrazak Younes:
> It was easy so I've done it. It works quite well. Could you please it on
> X11 and verify that I did not miss something?
What I don't like is that you used the fake selection even if on systems
that have a real one. That is aginst the "simple mental model": If the
selection is empty, then it is empty, and the middle mouse button does not
paste anything. What I had in mind was rather something like the attached.
I also like the fact that I don't need to make selection_ mutable.
> In particular I think
> there's nothing to do in haveSelection() but I am not sure of that.
I am not sure either, but I think you are right.
Georg
Index: src/frontends/qt4/GuiSelection.C
===================================================================
--- src/frontends/qt4/GuiSelection.C (Revision 16478)
+++ src/frontends/qt4/GuiSelection.C (Arbeitskopie)
@@ -15,6 +15,8 @@
#include "GuiSelection.h"
#include "qt_helpers.h"
+#include "frontends/Clipboard.h"
+
#include "debug.h"
#include <QApplication>
@@ -44,6 +46,12 @@ void GuiSelection::haveSelection(bool ow
docstring const GuiSelection::get() const
{
+ if (!qApp->clipboard()->supportsSelection()) {
+ if (!selection_.empty())
+ return selection_;
+ return theClipboard().get();
+ }
+
QString const str = qApp->clipboard()->text(QClipboard::Selection);
lyxerr[Debug::ACTION] << "GuiSelection::get: " << fromqstr(str)
<< endl;
@@ -56,17 +64,18 @@ docstring const GuiSelection::get() cons
void GuiSelection::put(docstring const & str)
{
- lyxerr[Debug::ACTION] << "GuiSelection::put: " << lyx::to_utf8(str) << endl;
+ lyxerr[Debug::ACTION] << "GuiSelection::put: " << to_utf8(str) << endl;
+
+ // Store the string for further use within LyX and for platform
+ // that do not support the Selection concept.
+ if (!qApp->clipboard()->supportsSelection()) {
+ selection_ = str;
+ return;
+ }
qApp->clipboard()->setText(toqstr(externalLineEnding(str)),
QClipboard::Selection);
}
-
-bool GuiSelection::isInternal() const
-{
- return qApp->clipboard()->ownsSelection();
-}
-
} // namespace frontend
} // namespace lyx
Index: src/frontends/qt4/GuiSelection.h
===================================================================
--- src/frontends/qt4/GuiSelection.h (Revision 16478)
+++ src/frontends/qt4/GuiSelection.h (Arbeitskopie)
@@ -33,8 +33,10 @@ public:
void haveSelection(bool own);
docstring const get() const;
void put(docstring const & str);
- bool isInternal() const;
//@}
+private:
+ /// Emulated selection for platforms that don't have a real one
+ docstring selection_;
};
} // namespace frontend
Index: src/frontends/Selection.h
===================================================================
--- src/frontends/Selection.h (Revision 16478)
+++ src/frontends/Selection.h (Arbeitskopie)
@@ -43,10 +43,6 @@ public:
* This should be called whenever some text is highlighted.
*/
virtual void put(docstring const &) = 0;
-
- /// state of clipboard.
- /// \retval true if the system clipboard has been set within LyX.
- virtual bool isInternal() const = 0;
};
} // namespace frontend