From 6d7115bb60fcc974a7b3b74f64665a5715dadddc Mon Sep 17 00:00:00 2001 From: Dekel Tsur Date: Thu, 7 Nov 2002 22:46:30 +0000 Subject: [PATCH] Fix X selection code. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@5600 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/frontends/qt2/ChangeLog | 5 ++++ src/frontends/qt2/QWorkArea.C | 48 +++++++++++++++++++++++++++++++++-- src/frontends/qt2/lyx_gui.C | 22 +++++++++++++++- 3 files changed, 72 insertions(+), 3 deletions(-) diff --git a/src/frontends/qt2/ChangeLog b/src/frontends/qt2/ChangeLog index 75912fa308..77ce125df9 100644 --- a/src/frontends/qt2/ChangeLog +++ b/src/frontends/qt2/ChangeLog @@ -1,3 +1,8 @@ +2002-11-08 Dekel Tsur + + * lyx_gui.C: + * QWorkArea.C: Fix X selection code. + 2002-11-07 John Levon * ui/QIncludeDialog.ui: diff --git a/src/frontends/qt2/QWorkArea.C b/src/frontends/qt2/QWorkArea.C index 15af3200e3..3c3d8197c3 100644 --- a/src/frontends/qt2/QWorkArea.C +++ b/src/frontends/qt2/QWorkArea.C @@ -31,6 +31,10 @@ #include #include +#ifdef Q_WS_X11 +#include +#endif + #include #include @@ -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()); } diff --git a/src/frontends/qt2/lyx_gui.C b/src/frontends/qt2/lyx_gui.C index ce2c78a888..c64afc720f 100644 --- a/src/frontends/qt2/lyx_gui.C +++ b/src/frontends/qt2/lyx_gui.C @@ -78,10 +78,30 @@ map 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; -- 2.39.2