summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@nokia.com>2011-04-27 17:28:51 +0200
committerSamuel Rødal <samuel.rodal@nokia.com>2011-04-28 15:39:44 +0200
commit9b8759284bc7d447227c9e0aaf3caade49e9f5f7 (patch)
tree2600297aef765f66a05bdb45f85ba540acb4ec90 /src/gui/kernel
parent0d12e17d253b5e9b7b3ee05fea864c43d44ce829 (diff)
clipboard
(cherry picked from commit 3f5c0e26e0f8b6876c3fb4d3822df49c748b2eea)
Diffstat (limited to 'src/gui/kernel')
-rw-r--r--src/gui/kernel/qapplication.cpp13
-rw-r--r--src/gui/kernel/qapplication.h2
-rw-r--r--src/gui/kernel/qclipboard.h1
-rw-r--r--src/gui/kernel/qguiapplication_qpa.cpp35
-rw-r--r--src/gui/kernel/qguiapplication_qpa.h2
-rw-r--r--src/gui/kernel/qguiapplication_qpa_p.h3
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();