]> git.lyx.org Git - features.git/commitdiff
Fix X selection code.
authorDekel Tsur <dekelts@tau.ac.il>
Thu, 7 Nov 2002 22:46:30 +0000 (22:46 +0000)
committerDekel Tsur <dekelts@tau.ac.il>
Thu, 7 Nov 2002 22:46:30 +0000 (22:46 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@5600 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/qt2/ChangeLog
src/frontends/qt2/QWorkArea.C
src/frontends/qt2/lyx_gui.C

index 75912fa3086bdaea4eb593aaa088ddcbdf1516b0..77ce125df95f9f3ac9f78280f3e43f1f22b32c69 100644 (file)
@@ -1,3 +1,8 @@
+2002-11-08  Dekel Tsur  <dekelts@tau.ac.il>
+
+       * lyx_gui.C:
+       * QWorkArea.C: Fix X selection code.
+
 2002-11-07  John Levon  <levon@movementarian.org>
 
        * ui/QIncludeDialog.ui:
index 15af3200e361bf0bd0586f151b2f4b0ed9a52a90..3c3d8197c3be386d8974593755d93bd68c6b55b2 100644 (file)
 #include <qlayout.h>
 #include <qclipboard.h>
 
+#ifdef Q_WS_X11
+#include <X11/Xlib.h>
+#endif
+
 #include <cmath>
 #include <cctype>
 
@@ -79,15 +83,52 @@ void QWorkArea::setScrollbarParams(int h, int pos, int line_h)
        scrollbar_->setPageStep(height());
 }
 
+namespace {
+QWorkArea const * wa_ptr = 0;
+}
+
+#ifdef Q_WS_X11
+bool lyxX11EventFilter(XEvent * xev)
+{
+       switch (xev->type) {
+       case SelectionRequest:
+               lyxerr[Debug::GUI] << "X requested selection." << endl;
+               if (wa_ptr)
+                       wa_ptr->selectionRequested();
+               break;
+       case SelectionClear:
+               lyxerr[Debug::GUI] << "Lost selection." << endl;
+               if (wa_ptr)
+                       wa_ptr->selectionLost();
+               break;
+       }
+       return false;
+}
+#endif
 
-void QWorkArea::haveSelection(bool) const
+void QWorkArea::haveSelection(bool own) const
 {
-       // not possible in Qt !
+       wa_ptr = this;
+
+#if QT_VERSION >= 300
+       if (!QApplication::clipboard()->supportsSelection())
+               return;
+
+       if (own) {
+               QApplication::clipboard()->setSelectionMode(true);
+               QApplication::clipboard()->setText(QString());
+       }
+       // We don't need to do anything if own = false, as this case is
+       // handled by QT.
+#endif
 }
 
 
 string const QWorkArea::getClipboard() const
 {
+#if QT_VERSION >= 300
+       QApplication::clipboard()->setSelectionMode(true);
+#endif
        QString str = QApplication::clipboard()->text();
        if (str.isNull())
                return string();
@@ -97,5 +138,8 @@ string const QWorkArea::getClipboard() const
 
 void QWorkArea::putClipboard(string const & str) const
 {
+#if QT_VERSION >= 300
+       QApplication::clipboard()->setSelectionMode(true);
+#endif
        QApplication::clipboard()->setText(str.c_str());
 }
index ce2c78a88872cfc99741fd7b9e4bb328d1f82dff..c64afc720fded4539e31c216dcbcb76a349c8883 100644 (file)
@@ -78,10 +78,30 @@ map<int, io_callback *> io_callbacks;
 // FIXME: wrong place !
 LyXServer * lyxserver;
 
+#ifdef Q_WS_X11
+extern bool lyxX11EventFilter(XEvent * xev);
+#endif
+
+class LQApplication : public QApplication
+{
+public:
+       LQApplication(int &argc, char **argv);
+       ~LQApplication();
+#ifdef Q_WS_X11
+       bool x11EventFilter (XEvent * ev) { return lyxX11EventFilter(ev); }
+#endif
+};
+
+LQApplication::LQApplication(int &argc, char **argv)
+       : QApplication( argc, argv )
+{}
+
+LQApplication::~LQApplication()
+{}
 
 void lyx_gui::parse_init(int & argc, char * argv[])
 {
-       static QApplication a(argc, argv);
+       static LQApplication a(argc, argv);
 
        using namespace grfx;