diff options
author | Jørgen Lind <jorgen.lind@nokia.com> | 2011-04-27 17:28:51 +0200 |
---|---|---|
committer | Samuel Rødal <samuel.rodal@nokia.com> | 2011-04-28 15:39:44 +0200 |
commit | 9b8759284bc7d447227c9e0aaf3caade49e9f5f7 (patch) | |
tree | 2600297aef765f66a05bdb45f85ba540acb4ec90 /src/gui/kernel | |
parent | 0d12e17d253b5e9b7b3ee05fea864c43d44ce829 (diff) |
clipboard
(cherry picked from commit 3f5c0e26e0f8b6876c3fb4d3822df49c748b2eea)
Diffstat (limited to 'src/gui/kernel')
-rw-r--r-- | src/gui/kernel/qapplication.cpp | 13 | ||||
-rw-r--r-- | src/gui/kernel/qapplication.h | 2 | ||||
-rw-r--r-- | src/gui/kernel/qclipboard.h | 1 | ||||
-rw-r--r-- | src/gui/kernel/qguiapplication_qpa.cpp | 35 | ||||
-rw-r--r-- | src/gui/kernel/qguiapplication_qpa.h | 2 | ||||
-rw-r--r-- | src/gui/kernel/qguiapplication_qpa_p.h | 3 |
6 files changed, 48 insertions, 8 deletions
diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index bab2adae87..8533b39398 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -544,7 +544,7 @@ FontHash *qt_app_fonts_hash() QWidgetList *QApplicationPrivate::popupWidgets = 0; // has keyboard input focus QDesktopWidget *qt_desktopWidget = 0; // root window widgets -#ifndef QT_NO_CLIPBOARD +#if !defined(Q_WS_QPA) && !defined(QT_NO_CLIPBOARD) QClipboard *qt_clipboard = 0; // global clipboard object #endif QWidgetList * qt_modal_stack=0; // stack of modal widgets @@ -1084,7 +1084,7 @@ QApplication::~QApplication() { Q_D(QApplication); -#ifndef QT_NO_CLIPBOARD +#if !defined(Q_WS_QPA) && !defined(QT_NO_CLIPBOARD) // flush clipboard contents if (qt_clipboard) { QEvent event(QEvent::Clipboard); @@ -1099,8 +1099,10 @@ QApplication::~QApplication() d->toolTipWakeUp.stop(); d->toolTipFallAsleep.stop(); +#if !defined(Q_WS_QPA) d->eventDispatcher->closingDown(); d->eventDispatcher = 0; +#endif QApplicationPrivate::is_app_closing = true; QApplicationPrivate::is_app_running = false; @@ -1122,7 +1124,7 @@ QApplication::~QApplication() delete qt_desktopWidget; qt_desktopWidget = 0; -#ifndef QT_NO_CLIPBOARD +#if !defined(Q_WS_QPA) && !defined(QT_NO_CLIPBOARD) delete qt_clipboard; qt_clipboard = 0; #endif @@ -3258,7 +3260,7 @@ QDesktopWidget *QApplication::desktop() return qt_desktopWidget; } -#ifndef QT_NO_CLIPBOARD +#if !defined(Q_WS_QPA) && !defined(QT_NO_CLIPBOARD) /*! Returns a pointer to the application global clipboard. @@ -3276,8 +3278,7 @@ QClipboard *QApplication::clipboard() } return qt_clipboard; } -#endif // QT_NO_CLIPBOARD - +#endif // Q_WS_QPA && QT_NO_CLIPBOARD /*! Sets whether Qt should use the system's standard colors, fonts, etc., to \a on. By default, this is true. diff --git a/src/gui/kernel/qapplication.h b/src/gui/kernel/qapplication.h index 65267392b2..1bf7e8a240 100644 --- a/src/gui/kernel/qapplication.h +++ b/src/gui/kernel/qapplication.h @@ -188,7 +188,7 @@ public: static QWidget *activePopupWidget(); static QWidget *activeModalWidget(); -#ifndef QT_NO_CLIPBOARD +#if !defined(Q_WS_QPA) && !defined(QT_NO_CLIPBOARD) static QClipboard *clipboard(); #endif static QWidget *focusWidget(); diff --git a/src/gui/kernel/qclipboard.h b/src/gui/kernel/qclipboard.h index b55bdc684b..0a9e28ac8c 100644 --- a/src/gui/kernel/qclipboard.h +++ b/src/gui/kernel/qclipboard.h @@ -109,6 +109,7 @@ protected: friend class QApplication; friend class QApplicationPrivate; + friend class QGuiApplication; friend class QBaseApplication; friend class QDragManager; friend class QMimeSource; diff --git a/src/gui/kernel/qguiapplication_qpa.cpp b/src/gui/kernel/qguiapplication_qpa.cpp index 0a3c039534..67ad5a7169 100644 --- a/src/gui/kernel/qguiapplication_qpa.cpp +++ b/src/gui/kernel/qguiapplication_qpa.cpp @@ -46,6 +46,7 @@ #include "private/qevent_p.h" #include <QtCore/private/qcoreapplication_p.h> +#include <QtCore/private/qabstracteventdispatcher_p.h> #include <QtDebug> #include <QtGui/QPlatformIntegration> @@ -54,6 +55,10 @@ #include <QWindowSystemInterface> #include "private/qwindowsysteminterface_qpa_p.h" +#ifndef QT_NO_CLIPBOARD +#include <QtGui/QClipboard> +#endif + QT_BEGIN_NAMESPACE Qt::MouseButtons QGuiApplicationPrivate::mouse_buttons = Qt::NoButton; @@ -83,6 +88,10 @@ int QGuiApplicationPrivate::mouse_double_click_distance = 5; QGuiApplicationPrivate *QGuiApplicationPrivate::self = 0; +#ifndef QT_NO_CLIPBOARD +QClipboard *QGuiApplicationPrivate::qt_clipboard = 0; +#endif + QGuiApplication::QGuiApplication(int &argc, char **argv, int flags) : QCoreApplication(*new QGuiApplicationPrivate(argc, argv, flags)) { @@ -97,6 +106,18 @@ QGuiApplication::QGuiApplication(QGuiApplicationPrivate &p) QGuiApplication::~QGuiApplication() { + Q_D(QGuiApplication); + // flush clipboard contents + if (QGuiApplicationPrivate::qt_clipboard) { + QEvent event(QEvent::Clipboard); + QApplication::sendEvent(QGuiApplicationPrivate::qt_clipboard, &event); + } + + d->eventDispatcher->closingDown(); + d->eventDispatcher = 0; + + delete QGuiApplicationPrivate::qt_clipboard; + QGuiApplicationPrivate::qt_clipboard = 0; } QGuiApplicationPrivate::QGuiApplicationPrivate(int &argc, char **argv, int flags) @@ -703,5 +724,19 @@ void QGuiApplicationPrivate::reportAvailableGeometryChange( #endif } +#ifndef QT_NO_CLIPBOARD +QClipboard * QGuiApplication::clipboard() +{ + if (QGuiApplicationPrivate::qt_clipboard == 0) { + if (!qApp) { + qWarning("QApplication: Must construct a QApplication before accessing a QClipboard"); + return 0; + } + QGuiApplicationPrivate::qt_clipboard = new QClipboard(0); + } + return QGuiApplicationPrivate::qt_clipboard; +} +#endif + QT_END_NAMESPACE diff --git a/src/gui/kernel/qguiapplication_qpa.h b/src/gui/kernel/qguiapplication_qpa.h index 549ef9cdcc..4be4e193ef 100644 --- a/src/gui/kernel/qguiapplication_qpa.h +++ b/src/gui/kernel/qguiapplication_qpa.h @@ -79,11 +79,11 @@ public: static QFont font(const char *className); static void setFont(const QFont &, const char* className = 0); static QFontMetrics fontMetrics(); +#endif #ifndef QT_NO_CLIPBOARD static QClipboard *clipboard(); #endif -#endif static Qt::KeyboardModifiers keyboardModifiers(); static Qt::MouseButtons mouseButtons(); diff --git a/src/gui/kernel/qguiapplication_qpa_p.h b/src/gui/kernel/qguiapplication_qpa_p.h index fbbb010ef9..b3ecd01703 100644 --- a/src/gui/kernel/qguiapplication_qpa_p.h +++ b/src/gui/kernel/qguiapplication_qpa_p.h @@ -114,6 +114,9 @@ public: static int mousePressY; static int mouse_double_click_distance; +#ifndef QT_NO_CLIPBOARD + static QClipboard *qt_clipboard; +#endif private: void init(); |