summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/windows
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/windows')
-rw-r--r--src/plugins/platforms/windows/main.cpp4
-rw-r--r--src/plugins/platforms/windows/qtwindowsglobal.h3
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.cpp10
-rw-r--r--src/plugins/platforms/windows/qwindowsfontdatabase.cpp3
-rw-r--r--src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h2
-rw-r--r--src/plugins/platforms/windows/qwindowsgdiintegration.cpp83
-rw-r--r--src/plugins/platforms/windows/qwindowsgdiintegration.h66
-rw-r--r--src/plugins/platforms/windows/qwindowsgdinativeinterface.cpp62
-rw-r--r--src/plugins/platforms/windows/qwindowsgdinativeinterface.h58
-rw-r--r--src/plugins/platforms/windows/qwindowsglcontext.cpp26
-rw-r--r--src/plugins/platforms/windows/qwindowsglcontext.h6
-rw-r--r--src/plugins/platforms/windows/qwindowsintegration.cpp199
-rw-r--r--src/plugins/platforms/windows/qwindowsintegration.h5
-rw-r--r--src/plugins/platforms/windows/qwindowsmousehandler.cpp13
-rw-r--r--src/plugins/platforms/windows/qwindowsnativeinterface.cpp169
-rw-r--r--src/plugins/platforms/windows/qwindowsnativeinterface.h94
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.cpp2
-rw-r--r--src/plugins/platforms/windows/windows.pri180
-rw-r--r--src/plugins/platforms/windows/windows.pro181
19 files changed, 776 insertions, 390 deletions
diff --git a/src/plugins/platforms/windows/main.cpp b/src/plugins/platforms/windows/main.cpp
index ffd87af193..a0057534b8 100644
--- a/src/plugins/platforms/windows/main.cpp
+++ b/src/plugins/platforms/windows/main.cpp
@@ -43,7 +43,7 @@
#include <qpa/qplatformintegrationplugin.h>
#include <QtCore/QStringList>
-#include "qwindowsintegration.h"
+#include "qwindowsgdiintegration.h"
QT_BEGIN_NAMESPACE
@@ -113,7 +113,7 @@ public:
QPlatformIntegration *QWindowsIntegrationPlugin::create(const QString& system, const QStringList& paramList, int &, char **)
{
if (system.compare(system, QStringLiteral("windows"), Qt::CaseInsensitive) == 0)
- return new QWindowsIntegration(paramList);
+ return new QWindowsGdiIntegration(paramList);
return 0;
}
diff --git a/src/plugins/platforms/windows/qtwindowsglobal.h b/src/plugins/platforms/windows/qtwindowsglobal.h
index 7b574b0a56..ee640224cf 100644
--- a/src/plugins/platforms/windows/qtwindowsglobal.h
+++ b/src/plugins/platforms/windows/qtwindowsglobal.h
@@ -73,6 +73,7 @@ enum WindowsEventType // Simplify event types
ExposeEvent = WindowEventFlag + 1,
ActivateWindowEvent = WindowEventFlag + 2,
DeactivateWindowEvent = WindowEventFlag + 3,
+ MouseActivateWindowEvent = WindowEventFlag + 4,
LeaveEvent = WindowEventFlag + 5,
CloseEvent = WindowEventFlag + 6,
ShowEvent = WindowEventFlag + 7,
@@ -131,6 +132,8 @@ inline QtWindows::WindowsEventType windowsEventType(UINT message, WPARAM wParamI
case WM_ACTIVATEAPP:
return (int)wParamIn ?
QtWindows::ActivateApplicationEvent : QtWindows::DeactivateApplicationEvent;
+ case WM_MOUSEACTIVATE:
+ return QtWindows::MouseActivateWindowEvent;
case WM_ACTIVATE:
return LOWORD(wParamIn) == WA_INACTIVE ?
QtWindows::DeactivateWindowEvent : QtWindows::ActivateWindowEvent;
diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp
index 77cac647ba..a87dfe5f16 100644
--- a/src/plugins/platforms/windows/qwindowscontext.cpp
+++ b/src/plugins/platforms/windows/qwindowscontext.cpp
@@ -928,6 +928,10 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message,
return true;
#ifndef Q_OS_WINCE
case QtWindows::ActivateWindowEvent:
+ if (platformWindow->window()->flags() & Qt::WindowDoesNotAcceptFocus) {
+ *result = LRESULT(MA_NOACTIVATE);
+ return true;
+ }
#ifndef QT_NO_TABLETEVENT
if (!d->m_tabletSupport.isNull())
d->m_tabletSupport->notifyActivate();
@@ -936,6 +940,12 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message,
if (const QWindow *modalWindow = QGuiApplication::modalWindow())
QWindowsWindow::baseWindowOf(modalWindow)->alertWindow();
break;
+ case QtWindows::MouseActivateWindowEvent:
+ if (platformWindow->window()->flags() & Qt::WindowDoesNotAcceptFocus) {
+ *result = LRESULT(MA_NOACTIVATE);
+ return true;
+ }
+ break;
#endif
#ifndef QT_NO_CONTEXTMENU
case QtWindows::ContextMenu:
diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
index 3a6f9f72e3..2b6a6255b8 100644
--- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
@@ -1620,7 +1620,8 @@ QStringList QWindowsFontDatabase::fallbacksForFamily(const QString &family, QFon
result << QString::fromLatin1("Arial");
}
- result.append(extraTryFontsForFamily(family));
+ if (script == QChar::Script_Common || script == QChar::Script_Han)
+ result.append(extraTryFontsForFamily(family));
if (QWindowsContext::verboseFonts)
qDebug() << __FUNCTION__ << family << style << styleHint
diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h
index 57a6a3ba1d..399bb5f5ad 100644
--- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h
+++ b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h
@@ -105,6 +105,8 @@ public:
static QString fontNameSubstitute(const QString &familyName);
+ IDWriteFontFace *directWriteFontFace() const { return m_directWriteFontFace; }
+
private:
QImage imageForGlyph(glyph_t t, QFixed subPixelPosition, int margin, const QTransform &xform);
void collectMetrics();
diff --git a/src/plugins/platforms/windows/qwindowsgdiintegration.cpp b/src/plugins/platforms/windows/qwindowsgdiintegration.cpp
new file mode 100644
index 0000000000..00b47bf338
--- /dev/null
+++ b/src/plugins/platforms/windows/qwindowsgdiintegration.cpp
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qwindowsgdiintegration.h"
+#include "qwindowscontext.h"
+#include "qwindowsbackingstore.h"
+#include "qwindowsgdinativeinterface.h"
+
+#include <QtCore/QDebug>
+#include <QtGui/private/qpixmap_raster_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QWindowsGdiIntegrationPrivate
+{
+public:
+ QWindowsGdiNativeInterface m_nativeInterface;
+};
+
+QWindowsGdiIntegration::QWindowsGdiIntegration(const QStringList &paramList)
+ : QWindowsIntegration(paramList)
+ , d(new QWindowsGdiIntegrationPrivate)
+{}
+
+QWindowsGdiIntegration::~QWindowsGdiIntegration()
+{}
+
+QPlatformNativeInterface *QWindowsGdiIntegration::nativeInterface() const
+{
+ return &d->m_nativeInterface;
+}
+
+QPlatformPixmap *QWindowsGdiIntegration::createPlatformPixmap(QPlatformPixmap::PixelType type) const
+{
+ return new QRasterPlatformPixmap(type);
+}
+
+QPlatformBackingStore *QWindowsGdiIntegration::createPlatformBackingStore(QWindow *window) const
+{
+ if (QWindowsContext::verboseIntegration)
+ qDebug() << __FUNCTION__ << window;
+ return new QWindowsBackingStore(window);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsgdiintegration.h b/src/plugins/platforms/windows/qwindowsgdiintegration.h
new file mode 100644
index 0000000000..0bf44d5439
--- /dev/null
+++ b/src/plugins/platforms/windows/qwindowsgdiintegration.h
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSGDIINTEGRATION_H
+#define QWINDOWSGDIINTEGRATION_H
+
+#include "qwindowsintegration.h"
+
+QT_BEGIN_NAMESPACE
+
+class QWindowsGdiIntegrationPrivate;
+class QWindowsGdiIntegration : public QWindowsIntegration
+{
+public:
+ explicit QWindowsGdiIntegration(const QStringList &paramList);
+ virtual ~QWindowsGdiIntegration();
+
+ QPlatformNativeInterface *nativeInterface() const Q_DECL_OVERRIDE;
+ QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const Q_DECL_OVERRIDE;
+ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
+
+private:
+ QScopedPointer<QWindowsGdiIntegrationPrivate> d;
+};
+
+QT_END_NAMESPACE
+
+#endif // QWINDOWSGDIINTEGRATION_H
diff --git a/src/plugins/platforms/windows/qwindowsgdinativeinterface.cpp b/src/plugins/platforms/windows/qwindowsgdinativeinterface.cpp
new file mode 100644
index 0000000000..c1b0c139c9
--- /dev/null
+++ b/src/plugins/platforms/windows/qwindowsgdinativeinterface.cpp
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qwindowsgdinativeinterface.h"
+#include "qwindowsbackingstore.h"
+
+#include <QtGui/QBackingStore>
+
+QT_BEGIN_NAMESPACE
+
+void *QWindowsGdiNativeInterface::nativeResourceForBackingStore(const QByteArray &resource, QBackingStore *bs)
+{
+ if (!bs || !bs->handle()) {
+ qWarning("%s: '%s' requested for null backingstore or backingstore without handle.", __FUNCTION__, resource.constData());
+ return 0;
+ }
+ QWindowsBackingStore *wbs = static_cast<QWindowsBackingStore *>(bs->handle());
+ if (resource == "getDC")
+ return wbs->getDC();
+ qWarning("%s: Invalid key '%s' requested.", __FUNCTION__, resource.constData());
+ return 0;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsgdinativeinterface.h b/src/plugins/platforms/windows/qwindowsgdinativeinterface.h
new file mode 100644
index 0000000000..3aa3a0b175
--- /dev/null
+++ b/src/plugins/platforms/windows/qwindowsgdinativeinterface.h
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSGDINATIVEINTERFACE_H
+#define QWINDOWSGDINATIVEINTERFACE_H
+
+#include "qwindowsnativeinterface.h"
+
+QT_BEGIN_NAMESPACE
+
+class QWindowsGdiNativeInterface : public QWindowsNativeInterface
+{
+ Q_OBJECT
+public:
+ void *nativeResourceForBackingStore(const QByteArray &resource, QBackingStore *bs) Q_DECL_OVERRIDE;
+};
+
+QT_END_NAMESPACE
+
+#endif // QWINDOWSGDINATIVEINTERFACE_H
diff --git a/src/plugins/platforms/windows/qwindowsglcontext.cpp b/src/plugins/platforms/windows/qwindowsglcontext.cpp
index 82deb0f473..281f54a9d9 100644
--- a/src/plugins/platforms/windows/qwindowsglcontext.cpp
+++ b/src/plugins/platforms/windows/qwindowsglcontext.cpp
@@ -882,7 +882,9 @@ QWindowsGLContext::QWindowsGLContext(const QOpenGLStaticContextPtr &staticContex
m_staticContext(staticContext),
m_context(context),
m_renderingContext(0),
- m_pixelFormat(0), m_extensionsUsed(false)
+ m_pixelFormat(0),
+ m_extensionsUsed(false),
+ m_swapInterval(-1)
{
QSurfaceFormat format = context->format();
if (format.renderableType() == QSurfaceFormat::DefaultRenderableType)
@@ -979,11 +981,9 @@ QWindowsGLContext::QWindowsGLContext(const QOpenGLStaticContextPtr &staticContex
QWindowsOpenGLContextFormat::current().apply(&m_obtainedFormat);
- if (requestedAdditional.swapInterval != -1 && m_staticContext->wglSwapInternalExt) {
- m_staticContext->wglSwapInternalExt(requestedAdditional.swapInterval);
- if (m_staticContext->wglGetSwapInternalExt)
- obtainedSwapInternal = m_staticContext->wglGetSwapInternalExt();
- }
+ if (m_staticContext->wglGetSwapInternalExt)
+ obtainedSwapInternal = m_staticContext->wglGetSwapInternalExt();
+
wglMakeCurrent(0, 0);
} while (false);
if (hdc)
@@ -1087,7 +1087,19 @@ bool QWindowsGLContext::makeCurrent(QPlatformSurface *surface)
window->setFlag(QWindowsWindow::OpenGLDoubleBuffered);
}
m_windowContexts.append(newContext);
- return wglMakeCurrent(newContext.hdc, newContext.renderingContext);
+
+ bool success = wglMakeCurrent(newContext.hdc, newContext.renderingContext);
+
+ // Set the swap interval
+ if (m_staticContext->wglSwapInternalExt) {
+ const int interval = surface->format().swapInterval();
+ if (interval >= 0 && m_swapInterval != interval) {
+ m_swapInterval = interval;
+ m_staticContext->wglSwapInternalExt(interval);
+ }
+ }
+
+ return success;
}
void QWindowsGLContext::doneCurrent()
diff --git a/src/plugins/platforms/windows/qwindowsglcontext.h b/src/plugins/platforms/windows/qwindowsglcontext.h
index 730e90bf70..c6b477128a 100644
--- a/src/plugins/platforms/windows/qwindowsglcontext.h
+++ b/src/plugins/platforms/windows/qwindowsglcontext.h
@@ -64,11 +64,10 @@ enum QWindowsGLFormatFlags
// Additional format information for Windows.
struct QWindowsOpenGLAdditionalFormat
{
- QWindowsOpenGLAdditionalFormat(unsigned formatFlagsIn = 0, unsigned pixmapDepthIn = 0, unsigned swapIntervalIn = -1) :
- formatFlags(formatFlagsIn), pixmapDepth(pixmapDepthIn), swapInterval(swapIntervalIn) {}
+ QWindowsOpenGLAdditionalFormat(unsigned formatFlagsIn = 0, unsigned pixmapDepthIn = 0) :
+ formatFlags(formatFlagsIn), pixmapDepth(pixmapDepthIn) { }
unsigned formatFlags; // QWindowsGLFormatFlags.
unsigned pixmapDepth; // for QWindowsGLRenderToPixmap
- int swapInterval;
};
// Per-window data for active OpenGL contexts.
@@ -178,6 +177,7 @@ private:
PIXELFORMATDESCRIPTOR m_obtainedPixelFormatDescriptor;
int m_pixelFormat;
bool m_extensionsUsed;
+ int m_swapInterval;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp
index b6e75929f8..4c3a8e69c3 100644
--- a/src/plugins/platforms/windows/qwindowsintegration.cpp
+++ b/src/plugins/platforms/windows/qwindowsintegration.cpp
@@ -41,7 +41,6 @@
****************************************************************************/
#include "qwindowsintegration.h"
-#include "qwindowsbackingstore.h"
#include "qwindowswindow.h"
#include "qwindowscontext.h"
#if defined(QT_OPENGL_ES_2)
@@ -75,8 +74,6 @@
#if !defined(Q_OS_WINCE) && !defined(QT_NO_SESSIONMANAGER)
# include "qwindowssessionmanager.h"
#endif
-#include <QtGui/QBackingStore>
-#include <QtGui/private/qpixmap_raster_p.h>
#include <QtGui/private/qguiapplication_p.h>
#include <QtCore/private/qeventdispatcher_win_p.h>
@@ -86,174 +83,6 @@
QT_BEGIN_NAMESPACE
/*!
- \class QWindowsNativeInterface
- \brief Provides access to native handles.
-
- Currently implemented keys
- \list
- \li handle (HWND)
- \li getDC (DC)
- \li releaseDC Releases the previously acquired DC and returns 0.
- \endlist
-
- \internal
- \ingroup qt-lighthouse-win
-*/
-
-class QWindowsNativeInterface : public QPlatformNativeInterface
-{
- Q_OBJECT
- Q_PROPERTY(bool asyncExpose READ asyncExpose WRITE setAsyncExpose)
-public:
-#ifndef QT_NO_OPENGL
- virtual void *nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context);
-#endif
- virtual void *nativeResourceForWindow(const QByteArray &resource, QWindow *window);
- virtual void *nativeResourceForBackingStore(const QByteArray &resource, QBackingStore *bs);
-
- Q_INVOKABLE void *createMessageWindow(const QString &classNameTemplate,
- const QString &windowName,
- void *eventProc) const;
-
- Q_INVOKABLE QString registerWindowClass(const QString &classNameIn, void *eventProc) const;
-
- Q_INVOKABLE void beep() { MessageBeep(MB_OK); } // For QApplication
-
- bool asyncExpose() const;
- void setAsyncExpose(bool value);
-
- QVariantMap windowProperties(QPlatformWindow *window) const;
- QVariant windowProperty(QPlatformWindow *window, const QString &name) const;
- QVariant windowProperty(QPlatformWindow *window, const QString &name, const QVariant &defaultValue) const;
- void setWindowProperty(QPlatformWindow *window, const QString &name, const QVariant &value);
-};
-
-void *QWindowsNativeInterface::nativeResourceForWindow(const QByteArray &resource, QWindow *window)
-{
- if (!window || !window->handle()) {
- qWarning("%s: '%s' requested for null window or window without handle.", __FUNCTION__, resource.constData());
- return 0;
- }
- QWindowsWindow *bw = static_cast<QWindowsWindow *>(window->handle());
- if (resource == "handle")
- return bw->handle();
- if (window->surfaceType() == QWindow::RasterSurface) {
- if (resource == "getDC")
- return bw->getDC();
- if (resource == "releaseDC") {
- bw->releaseDC();
- return 0;
- }
- }
- qWarning("%s: Invalid key '%s' requested.", __FUNCTION__, resource.constData());
- return 0;
-}
-
-void *QWindowsNativeInterface::nativeResourceForBackingStore(const QByteArray &resource, QBackingStore *bs)
-{
- if (!bs || !bs->handle()) {
- qWarning("%s: '%s' requested for null backingstore or backingstore without handle.", __FUNCTION__, resource.constData());
- return 0;
- }
- QWindowsBackingStore *wbs = static_cast<QWindowsBackingStore *>(bs->handle());
- if (resource == "getDC")
- return wbs->getDC();
- qWarning("%s: Invalid key '%s' requested.", __FUNCTION__, resource.constData());
- return 0;
-}
-
-static const char customMarginPropertyC[] = "WindowsCustomMargins";
-
-QVariant QWindowsNativeInterface::windowProperty(QPlatformWindow *window, const QString &name) const
-{
- QWindowsWindow *platformWindow = static_cast<QWindowsWindow *>(window);
- if (name == QLatin1String(customMarginPropertyC))
- return qVariantFromValue(platformWindow->customMargins());
- return QVariant();
-}
-
-QVariant QWindowsNativeInterface::windowProperty(QPlatformWindow *window, const QString &name, const QVariant &defaultValue) const
-{
- const QVariant result = windowProperty(window, name);
- return result.isValid() ? result : defaultValue;
-}
-
-void QWindowsNativeInterface::setWindowProperty(QPlatformWindow *window, const QString &name, const QVariant &value)
-{
- QWindowsWindow *platformWindow = static_cast<QWindowsWindow *>(window);
- if (name == QLatin1String(customMarginPropertyC))
- platformWindow->setCustomMargins(qvariant_cast<QMargins>(value));
-}
-
-QVariantMap QWindowsNativeInterface::windowProperties(QPlatformWindow *window) const
-{
- QVariantMap result;
- const QString customMarginProperty = QLatin1String(customMarginPropertyC);
- result.insert(customMarginProperty, windowProperty(window, customMarginProperty));
- return result;
-}
-
-#ifndef QT_NO_OPENGL
-void *QWindowsNativeInterface::nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context)
-{
- if (!context || !context->handle()) {
- qWarning("%s: '%s' requested for null context or context without handle.", __FUNCTION__, resource.constData());
- return 0;
- }
-#ifdef QT_OPENGL_ES_2
- QWindowsEGLContext *windowsEglContext = static_cast<QWindowsEGLContext *>(context->handle());
- if (resource == QByteArrayLiteral("eglDisplay"))
- return windowsEglContext->eglDisplay();
- if (resource == QByteArrayLiteral("eglContext"))
- return windowsEglContext->eglContext();
- if (resource == QByteArrayLiteral("eglConfig"))
- return windowsEglContext->eglConfig();
-#else // QT_OPENGL_ES_2
- QWindowsGLContext *windowsContext = static_cast<QWindowsGLContext *>(context->handle());
- if (resource == QByteArrayLiteral("renderingContext"))
- return windowsContext->renderingContext();
-#endif // !QT_OPENGL_ES_2
-
- qWarning("%s: Invalid key '%s' requested.", __FUNCTION__, resource.constData());
- return 0;
-}
-#endif // !QT_NO_OPENGL
-
-/*!
- \brief Creates a non-visible window handle for filtering messages.
-*/
-
-void *QWindowsNativeInterface::createMessageWindow(const QString &classNameTemplate,
- const QString &windowName,
- void *eventProc) const
-{
- QWindowsContext *ctx = QWindowsContext::instance();
- const HWND hwnd = ctx->createDummyWindow(classNameTemplate,
- (wchar_t*)windowName.utf16(),
- (WNDPROC)eventProc);
- return hwnd;
-}
-
-/*!
- \brief Registers a unique window class with a callback function based on \a classNameIn.
-*/
-
-QString QWindowsNativeInterface::registerWindowClass(const QString &classNameIn, void *eventProc) const
-{
- return QWindowsContext::instance()->registerWindowClass(classNameIn, (WNDPROC)eventProc);
-}
-
-bool QWindowsNativeInterface::asyncExpose() const
-{
- return QWindowsContext::instance()->asyncExpose();
-}
-
-void QWindowsNativeInterface::setAsyncExpose(bool value)
-{
- QWindowsContext::instance()->setAsyncExpose(value);
-}
-
-/*!
\class QWindowsIntegration
\brief QPlatformIntegration implementation for Windows.
\internal
@@ -308,7 +137,6 @@ struct QWindowsIntegrationPrivate
const unsigned m_options;
QWindowsContext m_context;
QPlatformFontDatabase *m_fontDatabase;
- QWindowsNativeInterface m_nativeInterface;
#ifndef QT_NO_CLIPBOARD
QWindowsClipboard m_clipboard;
# ifndef QT_NO_DRAGANDDROP
@@ -345,8 +173,8 @@ static inline unsigned parseOptions(const QStringList &paramList)
}
} else if (param == QLatin1String("gl=gdi")) {
options |= QWindowsIntegration::DisableArb;
- } else if (param == QLatin1String("mousefromtouch")) {
- options |= QWindowsIntegration::PassOsMouseEventsSynthesizedFromTouch;
+ } else if (param == QLatin1String("nomousefromtouch")) {
+ options |= QWindowsIntegration::DontPassOsMouseEventsSynthesizedFromTouch;
}
}
return options;
@@ -406,11 +234,6 @@ bool QWindowsIntegration::hasCapability(QPlatformIntegration::Capability cap) co
return false;
}
-QPlatformPixmap *QWindowsIntegration::createPlatformPixmap(QPlatformPixmap::PixelType type) const
-{
- return new QRasterPlatformPixmap(type);
-}
-
QPlatformWindow *QWindowsIntegration::createPlatformWindow(QWindow *window) const
{
QWindowsWindow::WindowData requested;
@@ -444,13 +267,6 @@ QPlatformWindow *QWindowsIntegration::createPlatformWindow(QWindow *window) cons
return new QWindowsWindow(window, obtained);
}
-QPlatformBackingStore *QWindowsIntegration::createPlatformBackingStore(QWindow *window) const
-{
- if (QWindowsContext::verboseIntegration)
- qDebug() << __FUNCTION__ << window;
- return new QWindowsBackingStore(window);
-}
-
#ifndef QT_NO_OPENGL
QPlatformOpenGLContext
*QWindowsIntegration::createPlatformOpenGLContext(QOpenGLContext *context) const
@@ -563,11 +379,9 @@ QVariant QWindowsIntegration::styleHint(QPlatformIntegration::StyleHint hint) co
case QPlatformIntegration::SynthesizeMouseFromTouchEvents:
#ifdef Q_OS_WINCE
// We do not want Qt to synthesize mouse events as Windows also does that.
- // Alternatively, Windows-generated touch mouse events can be identified and
- // ignored by checking GetMessageExtraInfo() for MI_WP_SIGNATURE (0xFF515700).
return false;
#else // Q_OS_WINCE
- return QVariant(!(d->m_options & PassOsMouseEventsSynthesizedFromTouch));
+ return QVariant(bool(d->m_options & DontPassOsMouseEventsSynthesizedFromTouch));
#endif // !Q_OS_WINCE
default:
break;
@@ -585,11 +399,6 @@ QList<int> QWindowsIntegration::possibleKeys(const QKeyEvent *e) const
return d->m_context.possibleKeys(e);
}
-QPlatformNativeInterface *QWindowsIntegration::nativeInterface() const
-{
- return &d->m_nativeInterface;
-}
-
#ifndef QT_NO_CLIPBOARD
QPlatformClipboard * QWindowsIntegration::clipboard() const
{
@@ -655,5 +464,3 @@ QPlatformServices *QWindowsIntegration::services() const
}
QT_END_NAMESPACE
-
-#include "qwindowsintegration.moc"
diff --git a/src/plugins/platforms/windows/qwindowsintegration.h b/src/plugins/platforms/windows/qwindowsintegration.h
index 97916a479b..30a39f67c4 100644
--- a/src/plugins/platforms/windows/qwindowsintegration.h
+++ b/src/plugins/platforms/windows/qwindowsintegration.h
@@ -60,7 +60,7 @@ public:
DisableArb = 0x4,
NoNativeDialogs = 0x8,
XpNativeDialogs = 0x10,
- PassOsMouseEventsSynthesizedFromTouch = 0x20 // Pass OS-generated mouse events from touch.
+ DontPassOsMouseEventsSynthesizedFromTouch = 0x20 // Do not pass OS-generated mouse events from touch.
};
explicit QWindowsIntegration(const QStringList &paramList);
@@ -68,9 +68,7 @@ public:
bool hasCapability(QPlatformIntegration::Capability cap) const;
- virtual QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const;
QPlatformWindow *createPlatformWindow(QWindow *window) const;
- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const;
#ifndef QT_NO_OPENGL
virtual QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const;
#endif
@@ -85,7 +83,6 @@ public:
#ifndef QT_NO_ACCESSIBILITY
virtual QPlatformAccessibility *accessibility() const;
#endif
- virtual QPlatformNativeInterface *nativeInterface() const;
virtual QPlatformFontDatabase *fontDatabase() const;
virtual QStringList themeNames() const;
virtual QPlatformTheme *createPlatformTheme(const QString &name) const;
diff --git a/src/plugins/platforms/windows/qwindowsmousehandler.cpp b/src/plugins/platforms/windows/qwindowsmousehandler.cpp
index 3dd8c5a0cd..b43aafeba0 100644
--- a/src/plugins/platforms/windows/qwindowsmousehandler.cpp
+++ b/src/plugins/platforms/windows/qwindowsmousehandler.cpp
@@ -167,8 +167,12 @@ bool QWindowsMouseHandler::translateMouseEvent(QWindow *window, HWND hwnd,
if (et == QtWindows::MouseWheelEvent)
return translateMouseWheelEvent(window, hwnd, msg, result);
+ Qt::MouseEventSource source = Qt::MouseEventNotSynthesized;
+
#ifndef Q_OS_WINCE
- static const bool passSynthesizedMouseEvents = QWindowsIntegration::instance()->options() & QWindowsIntegration::PassOsMouseEventsSynthesizedFromTouch;
+ // Check for events synthesized from touch. Lower byte is touch index, 0 means pen.
+ static const bool passSynthesizedMouseEvents =
+ !(QWindowsIntegration::instance()->options() & QWindowsIntegration::DontPassOsMouseEventsSynthesizedFromTouch);
if (!passSynthesizedMouseEvents) {
// Check for events synthesized from touch. Lower 7 bits are touch/pen index, bit 8 indicates touch.
// However, when tablet support is active, extraInfo is a packet serial number. This is not a problem
@@ -177,6 +181,7 @@ bool QWindowsMouseHandler::translateMouseEvent(QWindow *window, HWND hwnd,
const bool fromTouch = (extraInfo & signatureMask) == miWpSignature && (extraInfo & 0x80);
if (fromTouch)
return false;
+ source = Qt::MouseEventSynthesizedBySystem;
}
#endif // !Q_OS_WINCE
@@ -187,7 +192,8 @@ bool QWindowsMouseHandler::translateMouseEvent(QWindow *window, HWND hwnd,
const Qt::MouseButtons buttons = QWindowsMouseHandler::queryMouseButtons();
QWindowSystemInterface::handleFrameStrutMouseEvent(window, clientPosition,
globalPosition, buttons,
- QWindowsKeyMapper::queryKeyboardModifiers());
+ QWindowsKeyMapper::queryKeyboardModifiers(),
+ source);
return false; // Allow further event processing (dragging of windows).
}
@@ -335,7 +341,8 @@ bool QWindowsMouseHandler::translateMouseEvent(QWindow *window, HWND hwnd,
}
QWindowSystemInterface::handleMouseEvent(window, winEventPosition, globalPosition, buttons,
- QWindowsKeyMapper::queryKeyboardModifiers());
+ QWindowsKeyMapper::queryKeyboardModifiers(),
+ source);
m_previousCaptureWindow = hasCapture ? window : 0;
return true;
}
diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
new file mode 100644
index 0000000000..9bf4b3240c
--- /dev/null
+++ b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
@@ -0,0 +1,169 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qwindowsnativeinterface.h"
+#include "qwindowswindow.h"
+#include "qwindowscontext.h"
+
+#if defined(QT_OPENGL_ES_2)
+# include "qwindowseglcontext.h"
+# include <QtGui/QOpenGLContext>
+#elif !defined(QT_NO_OPENGL)
+# include "qwindowsglcontext.h"
+#endif
+
+#include <QtGui/QWindow>
+
+QT_BEGIN_NAMESPACE
+
+void *QWindowsNativeInterface::nativeResourceForWindow(const QByteArray &resource, QWindow *window)
+{
+ if (!window || !window->handle()) {
+ qWarning("%s: '%s' requested for null window or window without handle.", __FUNCTION__, resource.constData());
+ return 0;
+ }
+ QWindowsWindow *bw = static_cast<QWindowsWindow *>(window->handle());
+ if (resource == "handle")
+ return bw->handle();
+ if (window->surfaceType() == QWindow::RasterSurface) {
+ if (resource == "getDC")
+ return bw->getDC();
+ if (resource == "releaseDC") {
+ bw->releaseDC();
+ return 0;
+ }
+ }
+ qWarning("%s: Invalid key '%s' requested.", __FUNCTION__, resource.constData());
+ return 0;
+}
+
+static const char customMarginPropertyC[] = "WindowsCustomMargins";
+
+QVariant QWindowsNativeInterface::windowProperty(QPlatformWindow *window, const QString &name) const
+{
+ QWindowsWindow *platformWindow = static_cast<QWindowsWindow *>(window);
+ if (name == QLatin1String(customMarginPropertyC))
+ return qVariantFromValue(platformWindow->customMargins());
+ return QVariant();
+}
+
+QVariant QWindowsNativeInterface::windowProperty(QPlatformWindow *window, const QString &name, const QVariant &defaultValue) const
+{
+ const QVariant result = windowProperty(window, name);
+ return result.isValid() ? result : defaultValue;
+}
+
+void QWindowsNativeInterface::setWindowProperty(QPlatformWindow *window, const QString &name, const QVariant &value)
+{
+ QWindowsWindow *platformWindow = static_cast<QWindowsWindow *>(window);
+ if (name == QLatin1String(customMarginPropertyC))
+ platformWindow->setCustomMargins(qvariant_cast<QMargins>(value));
+}
+
+QVariantMap QWindowsNativeInterface::windowProperties(QPlatformWindow *window) const
+{
+ QVariantMap result;
+ const QString customMarginProperty = QLatin1String(customMarginPropertyC);
+ result.insert(customMarginProperty, windowProperty(window, customMarginProperty));
+ return result;
+}
+
+#ifndef QT_NO_OPENGL
+void *QWindowsNativeInterface::nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context)
+{
+ if (!context || !context->handle()) {
+ qWarning("%s: '%s' requested for null context or context without handle.", __FUNCTION__, resource.constData());
+ return 0;
+ }
+#ifdef QT_OPENGL_ES_2
+ QWindowsEGLContext *windowsEglContext = static_cast<QWindowsEGLContext *>(context->handle());
+ if (resource == QByteArrayLiteral("eglDisplay"))
+ return windowsEglContext->eglDisplay();
+ if (resource == QByteArrayLiteral("eglContext"))
+ return windowsEglContext->eglContext();
+ if (resource == QByteArrayLiteral("eglConfig"))
+ return windowsEglContext->eglConfig();
+#else // QT_OPENGL_ES_2
+ QWindowsGLContext *windowsContext = static_cast<QWindowsGLContext *>(context->handle());
+ if (resource == QByteArrayLiteral("renderingContext"))
+ return windowsContext->renderingContext();
+#endif // !QT_OPENGL_ES_2
+
+ qWarning("%s: Invalid key '%s' requested.", __FUNCTION__, resource.constData());
+ return 0;
+}
+#endif // !QT_NO_OPENGL
+
+/*!
+ \brief Creates a non-visible window handle for filtering messages.
+*/
+
+void *QWindowsNativeInterface::createMessageWindow(const QString &classNameTemplate,
+ const QString &windowName,
+ void *eventProc) const
+{
+ QWindowsContext *ctx = QWindowsContext::instance();
+ const HWND hwnd = ctx->createDummyWindow(classNameTemplate,
+ (wchar_t*)windowName.utf16(),
+ (WNDPROC)eventProc);
+ return hwnd;
+}
+
+/*!
+ \brief Registers a unique window class with a callback function based on \a classNameIn.
+*/
+
+QString QWindowsNativeInterface::registerWindowClass(const QString &classNameIn, void *eventProc) const
+{
+ return QWindowsContext::instance()->registerWindowClass(classNameIn, (WNDPROC)eventProc);
+}
+
+bool QWindowsNativeInterface::asyncExpose() const
+{
+ return QWindowsContext::instance()->asyncExpose();
+}
+
+void QWindowsNativeInterface::setAsyncExpose(bool value)
+{
+ QWindowsContext::instance()->setAsyncExpose(value);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.h b/src/plugins/platforms/windows/qwindowsnativeinterface.h
new file mode 100644
index 0000000000..20100d0f49
--- /dev/null
+++ b/src/plugins/platforms/windows/qwindowsnativeinterface.h
@@ -0,0 +1,94 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSNATIVEINTERFACE_H
+#define QWINDOWSNATIVEINTERFACE_H
+
+#include "qtwindows_additional.h"
+#include <QtGui/qpa/qplatformnativeinterface.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QWindowsNativeInterface
+ \brief Provides access to native handles.
+
+ Currently implemented keys
+ \list
+ \li handle (HWND)
+ \li getDC (DC)
+ \li releaseDC Releases the previously acquired DC and returns 0.
+ \endlist
+
+ \internal
+ \ingroup qt-lighthouse-win
+*/
+
+class QWindowsNativeInterface : public QPlatformNativeInterface
+{
+ Q_OBJECT
+ Q_PROPERTY(bool asyncExpose READ asyncExpose WRITE setAsyncExpose)
+public:
+#ifndef QT_NO_OPENGL
+ virtual void *nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context);
+#endif
+ virtual void *nativeResourceForWindow(const QByteArray &resource, QWindow *window);
+
+ Q_INVOKABLE void *createMessageWindow(const QString &classNameTemplate,
+ const QString &windowName,
+ void *eventProc) const;
+
+ Q_INVOKABLE QString registerWindowClass(const QString &classNameIn, void *eventProc) const;
+
+ Q_INVOKABLE void beep() { MessageBeep(MB_OK); } // For QApplication
+
+ bool asyncExpose() const;
+ void setAsyncExpose(bool value);
+
+ QVariantMap windowProperties(QPlatformWindow *window) const;
+ QVariant windowProperty(QPlatformWindow *window, const QString &name) const;
+ QVariant windowProperty(QPlatformWindow *window, const QString &name, const QVariant &defaultValue) const;
+ void setWindowProperty(QPlatformWindow *window, const QString &name, const QVariant &value);
+};
+
+QT_END_NAMESPACE
+
+#endif // QWINDOWSNATIVEINTERFACE_H
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp
index 51902385e1..d1d50eee73 100644
--- a/src/plugins/platforms/windows/qwindowswindow.cpp
+++ b/src/plugins/platforms/windows/qwindowswindow.cpp
@@ -1193,7 +1193,7 @@ void QWindowsWindow::hide_sys() const
if (flags & Qt::Popup)
ShowWindow(m_data.hwnd, SW_HIDE);
else
- SetWindowPos(m_data.hwnd,0, 0,0,0,0, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER);
+ SetWindowPos(m_data.hwnd,0, 0,0,0,0, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE);
}
}
diff --git a/src/plugins/platforms/windows/windows.pri b/src/plugins/platforms/windows/windows.pri
new file mode 100644
index 0000000000..22b8ef0175
--- /dev/null
+++ b/src/plugins/platforms/windows/windows.pri
@@ -0,0 +1,180 @@
+# Note: OpenGL32 must precede Gdi32 as it overwrites some functions.
+LIBS *= -lole32
+!wince*:LIBS *= -luser32 -lwinspool -limm32 -lwinmm -loleaut32
+
+contains(QT_CONFIG, opengl):!contains(QT_CONFIG, opengles2):LIBS *= -lopengl32
+
+win32-g++*: LIBS *= -luuid
+# For the dialog helpers:
+!wince*:LIBS *= -lshlwapi -lshell32
+!wince*:LIBS *= -ladvapi32
+wince*:DEFINES *= QT_LIBINFIX=L"\"\\\"$${QT_LIBINFIX}\\\"\""
+
+DEFINES *= QT_NO_CAST_FROM_ASCII
+
+contains(QT_CONFIG, directwrite) {
+ LIBS *= -ldwrite
+ SOURCES += $$PWD/qwindowsfontenginedirectwrite.cpp
+ HEADERS += $$PWD/qwindowsfontenginedirectwrite.h
+} else {
+ DEFINES *= QT_NO_DIRECTWRITE
+}
+
+SOURCES += \
+ $$PWD/qwindowswindow.cpp \
+ $$PWD/qwindowsintegration.cpp \
+ $$PWD/qwindowscontext.cpp \
+ $$PWD/qwindowsscreen.cpp \
+ $$PWD/qwindowskeymapper.cpp \
+ $$PWD/qwindowsfontengine.cpp \
+ $$PWD/qwindowsfontdatabase.cpp \
+ $$PWD/qwindowsmousehandler.cpp \
+ $$PWD/qwindowsguieventdispatcher.cpp \
+ $$PWD/qwindowsole.cpp \
+ $$PWD/qwindowsmime.cpp \
+ $$PWD/qwindowsinternalmimedata.cpp \
+ $$PWD/qwindowscursor.cpp \
+ $$PWD/qwindowsinputcontext.cpp \
+ $$PWD/qwindowstheme.cpp \
+ $$PWD/qwindowsdialoghelpers.cpp \
+ $$PWD/qwindowsservices.cpp \
+ $$PWD/qwindowsnativeimage.cpp \
+ $$PWD/qwindowsnativeinterface.cpp
+
+HEADERS += \
+ $$PWD/qwindowswindow.h \
+ $$PWD/qwindowsintegration.h \
+ $$PWD/qwindowscontext.h \
+ $$PWD/qwindowsscreen.h \
+ $$PWD/qwindowskeymapper.h \
+ $$PWD/qwindowsfontengine.h \
+ $$PWD/qwindowsfontdatabase.h \
+ $$PWD/qwindowsmousehandler.h \
+ $$PWD/qwindowsguieventdispatcher.h \
+ $$PWD/qtwindowsglobal.h \
+ $$PWD/qtwindows_additional.h \
+ $$PWD/qwindowsole.h \
+ $$PWD/qwindowsmime.h \
+ $$PWD/qwindowsinternalmimedata.h \
+ $$PWD/qwindowscursor.h \
+ $$PWD/array.h \
+ $$PWD/qwindowsinputcontext.h \
+ $$PWD/qwindowstheme.h \
+ $$PWD/qwindowsdialoghelpers.h \
+ $$PWD/qwindowsservices.h \
+ $$PWD/qplatformfunctions_wince.h \
+ $$PWD/qwindowsnativeimage.h \
+ $$PWD/qwindowsnativeinterface.h
+
+INCLUDEPATH += $$PWD
+
+contains(QT_CONFIG, opengles2) {
+ SOURCES += $$PWD/qwindowseglcontext.cpp
+ HEADERS += $$PWD/qwindowseglcontext.h
+} else {
+ contains(QT_CONFIG, opengl) {
+ SOURCES += $$PWD/qwindowsglcontext.cpp
+ HEADERS += $$PWD/qwindowsglcontext.h
+ }
+}
+
+!contains( DEFINES, QT_NO_CLIPBOARD ) {
+ SOURCES += $$PWD/qwindowsclipboard.cpp
+ HEADERS += $$PWD/qwindowsclipboard.h
+}
+
+# drag and drop on windows only works if a clipboard is available
+!contains( DEFINES, QT_NO_DRAGANDDROP ) {
+ !win32:SOURCES += $$PWD/qwindowsdrag.cpp
+ !win32:HEADERS += $$PWD/qwindowsdrag.h
+ win32:!contains( DEFINES, QT_NO_CLIPBOARD ) {
+ HEADERS += $$PWD/qwindowsdrag.h
+ SOURCES += $$PWD/qwindowsdrag.cpp
+ }
+}
+
+!wince*:!contains( DEFINES, QT_NO_TABLETEVENT ) {
+ INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/wintab
+ HEADERS += $$PWD/qwindowstabletsupport.h
+ SOURCES += $$PWD/qwindowstabletsupport.cpp
+}
+
+!wince*:!contains( DEFINES, QT_NO_SESSIONMANAGER ) {
+ SOURCES += $$PWD/qwindowssessionmanager.cpp
+ HEADERS += $$PWD/qwindowssessionmanager.h
+}
+
+contains(QT_CONFIG, freetype) {
+ DEFINES *= QT_NO_FONTCONFIG
+ QT_FREETYPE_DIR = $$QT_SOURCE_TREE/src/3rdparty/freetype
+
+ HEADERS += \
+ $$PWD/qwindowsfontdatabase_ft.h
+ SOURCES += \
+ $$PWD/qwindowsfontdatabase_ft.cpp \
+ $$QT_FREETYPE_DIR/src/base/ftbase.c \
+ $$QT_FREETYPE_DIR/src/base/ftbbox.c \
+ $$QT_FREETYPE_DIR/src/base/ftdebug.c \
+ $$QT_FREETYPE_DIR/src/base/ftglyph.c \
+ $$QT_FREETYPE_DIR/src/base/ftinit.c \
+ $$QT_FREETYPE_DIR/src/base/ftmm.c \
+ $$QT_FREETYPE_DIR/src/base/fttype1.c \
+ $$QT_FREETYPE_DIR/src/base/ftsynth.c \
+ $$QT_FREETYPE_DIR/src/base/ftbitmap.c \
+ $$QT_FREETYPE_DIR/src/bdf/bdf.c \
+ $$QT_FREETYPE_DIR/src/cache/ftcache.c \
+ $$QT_FREETYPE_DIR/src/cff/cff.c \
+ $$QT_FREETYPE_DIR/src/cid/type1cid.c \
+ $$QT_FREETYPE_DIR/src/gzip/ftgzip.c \
+ $$QT_FREETYPE_DIR/src/pcf/pcf.c \
+ $$QT_FREETYPE_DIR/src/pfr/pfr.c \
+ $$QT_FREETYPE_DIR/src/psaux/psaux.c \
+ $$QT_FREETYPE_DIR/src/pshinter/pshinter.c \
+ $$QT_FREETYPE_DIR/src/psnames/psmodule.c \
+ $$QT_FREETYPE_DIR/src/raster/raster.c \
+ $$QT_FREETYPE_DIR/src/sfnt/sfnt.c \
+ $$QT_FREETYPE_DIR/src/smooth/smooth.c \
+ $$QT_FREETYPE_DIR/src/truetype/truetype.c \
+ $$QT_FREETYPE_DIR/src/type1/type1.c \
+ $$QT_FREETYPE_DIR/src/type42/type42.c \
+ $$QT_FREETYPE_DIR/src/winfonts/winfnt.c \
+ $$QT_FREETYPE_DIR/src/lzw/ftlzw.c\
+ $$QT_FREETYPE_DIR/src/otvalid/otvalid.c\
+ $$QT_FREETYPE_DIR/src/otvalid/otvbase.c\
+ $$QT_FREETYPE_DIR/src/otvalid/otvgdef.c\
+ $$QT_FREETYPE_DIR/src/otvalid/otvjstf.c\
+ $$QT_FREETYPE_DIR/src/otvalid/otvcommn.c\
+ $$QT_FREETYPE_DIR/src/otvalid/otvgpos.c\
+ $$QT_FREETYPE_DIR/src/otvalid/otvgsub.c\
+ $$QT_FREETYPE_DIR/src/otvalid/otvmod.c\
+ $$QT_FREETYPE_DIR/src/autofit/afangles.c\
+ $$QT_FREETYPE_DIR/src/autofit/afglobal.c\
+ $$QT_FREETYPE_DIR/src/autofit/aflatin.c\
+ $$QT_FREETYPE_DIR/src/autofit/afmodule.c\
+ $$QT_FREETYPE_DIR/src/autofit/afdummy.c\
+ $$QT_FREETYPE_DIR/src/autofit/afhints.c\
+ $$QT_FREETYPE_DIR/src/autofit/afloader.c\
+ $$QT_FREETYPE_DIR/src/autofit/autofit.c
+
+ SOURCES += $$QT_FREETYPE_DIR/src/base/ftsystem.c
+
+
+ INCLUDEPATH += \
+ $$QT_FREETYPE_DIR/src \
+ $$QT_FREETYPE_DIR/include
+
+ TR_EXCLUDE += $$QT_FREETYPE_DIR/*
+
+ DEFINES += FT2_BUILD_LIBRARY
+ contains(QT_CONFIG, system-zlib) {
+ DEFINES += FT_CONFIG_OPTION_SYSTEM_ZLIB
+ }
+} else:contains(QT_CONFIG, system-freetype) {
+ include($$QT_SOURCE_TREE/src/platformsupport/fontdatabases/basic/basic.pri)
+ HEADERS += \
+ $$PWD/qwindowsfontdatabase_ft.h
+ SOURCES += \
+ $$PWD/qwindowsfontdatabase_ft.cpp
+}
+
+contains(QT_CONFIG, accessibility):include($$PWD/accessible/accessible.pri)
diff --git a/src/plugins/platforms/windows/windows.pro b/src/plugins/platforms/windows/windows.pro
index 0249e156d9..188bd7917c 100644
--- a/src/plugins/platforms/windows/windows.pro
+++ b/src/plugins/platforms/windows/windows.pro
@@ -8,184 +8,19 @@ QT *= core-private
QT *= gui-private
QT *= platformsupport-private
-# Note: OpenGL32 must precede Gdi32 as it overwrites some functions.
-LIBS *= -lole32
-!wince*:LIBS *= -lgdi32 -luser32 -lwinspool -limm32 -lwinmm -loleaut32
+!wince:LIBS *= -lgdi32
-contains(QT_CONFIG, opengl):!contains(QT_CONFIG, opengles2):LIBS *= -lopengl32
+include(windows.pri)
-win32-g++*: LIBS *= -luuid
-# For the dialog helpers:
-!wince*:LIBS *= -lshlwapi -lshell32
-!wince*:LIBS *= -ladvapi32
-wince*:DEFINES *= QT_LIBINFIX=L"\"\\\"$${QT_LIBINFIX}\\\"\""
-
-DEFINES *= QT_NO_CAST_FROM_ASCII
-
-contains(QT_CONFIG, directwrite) {
- LIBS *= -ldwrite
- SOURCES += qwindowsfontenginedirectwrite.cpp
- HEADERS += qwindowsfontenginedirectwrite.h
-} else {
- DEFINES *= QT_NO_DIRECTWRITE
-}
-
-SOURCES += \
+SOURCES += \
main.cpp \
- qwindowsnativeimage.cpp \
- qwindowswindow.cpp \
- qwindowsintegration.cpp \
- qwindowscontext.cpp \
qwindowsbackingstore.cpp \
- qwindowsscreen.cpp \
- qwindowskeymapper.cpp \
- qwindowsfontengine.cpp \
- qwindowsfontdatabase.cpp \
- qwindowsmousehandler.cpp \
- qwindowsguieventdispatcher.cpp \
- qwindowsole.cpp \
- qwindowsmime.cpp \
- qwindowsinternalmimedata.cpp \
- qwindowscursor.cpp \
- qwindowsinputcontext.cpp \
- qwindowstheme.cpp \
- qwindowsdialoghelpers.cpp \
- qwindowsservices.cpp
+ qwindowsgdiintegration.cpp \
+ qwindowsgdinativeinterface.cpp
-HEADERS += \
- qwindowsnativeimage.h \
- qwindowswindow.h \
- qwindowsintegration.h \
- qwindowscontext.h \
+HEADERS += \
qwindowsbackingstore.h \
- qwindowsscreen.h \
- qwindowskeymapper.h \
- qwindowsfontengine.h \
- qwindowsfontdatabase.h \
- qwindowsmousehandler.h \
- qwindowsguieventdispatcher.h \
- qtwindowsglobal.h \
- qtwindows_additional.h \
- qwindowsole.h \
- qwindowsmime.h \
- qwindowsinternalmimedata.h \
- qwindowscursor.h \
- array.h \
- qwindowsinputcontext.h \
- qwindowstheme.h \
- qwindowsdialoghelpers.h \
- qwindowsservices.h \
- qplatformfunctions_wince.h
-
-contains(QT_CONFIG, opengles2) {
- SOURCES += qwindowseglcontext.cpp
- HEADERS += qwindowseglcontext.h
-} else {
- contains(QT_CONFIG, opengl) {
- SOURCES += qwindowsglcontext.cpp
- HEADERS += qwindowsglcontext.h
- }
-}
-
-!contains( DEFINES, QT_NO_CLIPBOARD ) {
- SOURCES += qwindowsclipboard.cpp
- HEADERS += qwindowsclipboard.h
-}
-
-# drag and drop on windows only works if a clipboard is available
-!contains( DEFINES, QT_NO_DRAGANDDROP ) {
- !win32:SOURCES += qwindowsdrag.cpp
- !win32:HEADERS += qwindowsdrag.h
- win32:!contains( DEFINES, QT_NO_CLIPBOARD ) {
- HEADERS += qwindowsdrag.h
- SOURCES += qwindowsdrag.cpp
- }
-}
-
-!wince*:!contains( DEFINES, QT_NO_TABLETEVENT ) {
- INCLUDEPATH += ../../../3rdparty/wintab
- HEADERS += qwindowstabletsupport.h
- SOURCES += qwindowstabletsupport.cpp
-}
-
-!wince*:!contains( DEFINES, QT_NO_SESSIONMANAGER ) {
- SOURCES += qwindowssessionmanager.cpp
- HEADERS += qwindowssessionmanager.h
-}
-
-contains(QT_CONFIG, freetype) {
- DEFINES *= QT_NO_FONTCONFIG
- QT_FREETYPE_DIR = $$QT_SOURCE_TREE/src/3rdparty/freetype
-
- HEADERS += \
- qwindowsfontdatabase_ft.h
- SOURCES += \
- qwindowsfontdatabase_ft.cpp \
- $$QT_FREETYPE_DIR/src/base/ftbase.c \
- $$QT_FREETYPE_DIR/src/base/ftbbox.c \
- $$QT_FREETYPE_DIR/src/base/ftdebug.c \
- $$QT_FREETYPE_DIR/src/base/ftglyph.c \
- $$QT_FREETYPE_DIR/src/base/ftinit.c \
- $$QT_FREETYPE_DIR/src/base/ftmm.c \
- $$QT_FREETYPE_DIR/src/base/fttype1.c \
- $$QT_FREETYPE_DIR/src/base/ftsynth.c \
- $$QT_FREETYPE_DIR/src/base/ftbitmap.c \
- $$QT_FREETYPE_DIR/src/bdf/bdf.c \
- $$QT_FREETYPE_DIR/src/cache/ftcache.c \
- $$QT_FREETYPE_DIR/src/cff/cff.c \
- $$QT_FREETYPE_DIR/src/cid/type1cid.c \
- $$QT_FREETYPE_DIR/src/gzip/ftgzip.c \
- $$QT_FREETYPE_DIR/src/pcf/pcf.c \
- $$QT_FREETYPE_DIR/src/pfr/pfr.c \
- $$QT_FREETYPE_DIR/src/psaux/psaux.c \
- $$QT_FREETYPE_DIR/src/pshinter/pshinter.c \
- $$QT_FREETYPE_DIR/src/psnames/psmodule.c \
- $$QT_FREETYPE_DIR/src/raster/raster.c \
- $$QT_FREETYPE_DIR/src/sfnt/sfnt.c \
- $$QT_FREETYPE_DIR/src/smooth/smooth.c \
- $$QT_FREETYPE_DIR/src/truetype/truetype.c \
- $$QT_FREETYPE_DIR/src/type1/type1.c \
- $$QT_FREETYPE_DIR/src/type42/type42.c \
- $$QT_FREETYPE_DIR/src/winfonts/winfnt.c \
- $$QT_FREETYPE_DIR/src/lzw/ftlzw.c\
- $$QT_FREETYPE_DIR/src/otvalid/otvalid.c\
- $$QT_FREETYPE_DIR/src/otvalid/otvbase.c\
- $$QT_FREETYPE_DIR/src/otvalid/otvgdef.c\
- $$QT_FREETYPE_DIR/src/otvalid/otvjstf.c\
- $$QT_FREETYPE_DIR/src/otvalid/otvcommn.c\
- $$QT_FREETYPE_DIR/src/otvalid/otvgpos.c\
- $$QT_FREETYPE_DIR/src/otvalid/otvgsub.c\
- $$QT_FREETYPE_DIR/src/otvalid/otvmod.c\
- $$QT_FREETYPE_DIR/src/autofit/afangles.c\
- $$QT_FREETYPE_DIR/src/autofit/afglobal.c\
- $$QT_FREETYPE_DIR/src/autofit/aflatin.c\
- $$QT_FREETYPE_DIR/src/autofit/afmodule.c\
- $$QT_FREETYPE_DIR/src/autofit/afdummy.c\
- $$QT_FREETYPE_DIR/src/autofit/afhints.c\
- $$QT_FREETYPE_DIR/src/autofit/afloader.c\
- $$QT_FREETYPE_DIR/src/autofit/autofit.c
-
- SOURCES += $$QT_FREETYPE_DIR/src/base/ftsystem.c
-
-
- INCLUDEPATH += \
- $$QT_FREETYPE_DIR/src \
- $$QT_FREETYPE_DIR/include
-
- TR_EXCLUDE += $$QT_FREETYPE_DIR/*
-
- DEFINES += FT2_BUILD_LIBRARY
- contains(QT_CONFIG, system-zlib) {
- DEFINES += FT_CONFIG_OPTION_SYSTEM_ZLIB
- }
-} else:contains(QT_CONFIG, system-freetype) {
- include($$QT_SOURCE_TREE/src/platformsupport/fontdatabases/basic/basic.pri)
- HEADERS += \
- qwindowsfontdatabase_ft.h
- SOURCES += \
- qwindowsfontdatabase_ft.cpp
-}
+ qwindowsgdiintegration.h \
+ qwindowsgdinativeinterface.h
OTHER_FILES += windows.json
-
-contains(QT_CONFIG, accessibility):include(accessible/accessible.pri)