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/accessible/qwindowsaccessibility.cpp2
-rw-r--r--src/plugins/platforms/windows/accessible/qwindowsaccessibility.h2
-rw-r--r--src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp2
-rw-r--r--src/plugins/platforms/windows/main.cpp2
-rw-r--r--src/plugins/platforms/windows/qwindowsbackingstore.h2
-rw-r--r--src/plugins/platforms/windows/qwindowsclipboard.h2
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.cpp38
-rw-r--r--src/plugins/platforms/windows/qwindowscursor.h2
-rw-r--r--src/plugins/platforms/windows/qwindowsdialoghelpers.cpp46
-rw-r--r--src/plugins/platforms/windows/qwindowsdialoghelpers.h9
-rw-r--r--src/plugins/platforms/windows/qwindowsdrag.h2
-rw-r--r--src/plugins/platforms/windows/qwindowsfontdatabase.h2
-rw-r--r--src/plugins/platforms/windows/qwindowsfontengine.cpp2
-rw-r--r--src/plugins/platforms/windows/qwindowsglcontext.cpp2
-rw-r--r--src/plugins/platforms/windows/qwindowsglcontext.h2
-rw-r--r--src/plugins/platforms/windows/qwindowsinputcontext.h2
-rw-r--r--src/plugins/platforms/windows/qwindowsintegration.cpp10
-rw-r--r--src/plugins/platforms/windows/qwindowsintegration.h2
-rw-r--r--src/plugins/platforms/windows/qwindowsscreen.cpp6
-rw-r--r--src/plugins/platforms/windows/qwindowsscreen.h4
-rw-r--r--src/plugins/platforms/windows/qwindowsservices.h2
-rw-r--r--src/plugins/platforms/windows/qwindowstheme.cpp18
-rw-r--r--src/plugins/platforms/windows/qwindowstheme.h2
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.cpp42
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.h4
25 files changed, 121 insertions, 88 deletions
diff --git a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp
index 17ee6eb82c..6f2a601c50 100644
--- a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp
+++ b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp
@@ -51,7 +51,7 @@
#include <QtCore/qsettings.h>
#include <QtGui/qaccessible.h>
#include <QtGui/qaccessible2.h>
-#include <QtGui/qplatformnativeinterface_qpa.h>
+#include <qpa/qplatformnativeinterface.h>
#include <QtGui/qwindow.h>
#include <QtGui/qguiapplication.h>
diff --git a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.h b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.h
index 3366c32daa..67aaa5b993 100644
--- a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.h
+++ b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.h
@@ -44,7 +44,7 @@
#include "../qtwindowsglobal.h"
#include "../qwindowscontext.h"
-#include <QtGui/QPlatformAccessibility>
+#include <qpa/qplatformaccessibility.h>
#include <oleacc.h>
diff --git a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp
index 5003d9effd..fafe624e4b 100644
--- a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp
+++ b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp
@@ -56,7 +56,7 @@
#include <QtGui/qaccessible.h>
#include <QtGui/qaccessible2.h>
#include <QtGui/qguiapplication.h>
-#include <QtGui/qplatformnativeinterface_qpa.h>
+#include <qpa/qplatformnativeinterface.h>
#include <QtGui/qwindow.h>
#include <QtWidgets/qapplication.h>
#include <QtWidgets/qgraphicsitem.h>
diff --git a/src/plugins/platforms/windows/main.cpp b/src/plugins/platforms/windows/main.cpp
index 9f6ce99836..5404d91679 100644
--- a/src/plugins/platforms/windows/main.cpp
+++ b/src/plugins/platforms/windows/main.cpp
@@ -40,7 +40,7 @@
****************************************************************************/
-#include <QtGui/QPlatformIntegrationPlugin>
+#include <qpa/qplatformintegrationplugin.h>
#include <QtCore/QStringList>
#include "qwindowsintegration.h"
diff --git a/src/plugins/platforms/windows/qwindowsbackingstore.h b/src/plugins/platforms/windows/qwindowsbackingstore.h
index 14ce6c3438..75b6e5f736 100644
--- a/src/plugins/platforms/windows/qwindowsbackingstore.h
+++ b/src/plugins/platforms/windows/qwindowsbackingstore.h
@@ -44,7 +44,7 @@
#include "qtwindows_additional.h"
-#include <QtGui/QPlatformBackingStore>
+#include <qpa/qplatformbackingstore.h>
#include <QtCore/QScopedPointer>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsclipboard.h b/src/plugins/platforms/windows/qwindowsclipboard.h
index 643c785e8b..00c975eae6 100644
--- a/src/plugins/platforms/windows/qwindowsclipboard.h
+++ b/src/plugins/platforms/windows/qwindowsclipboard.h
@@ -44,7 +44,7 @@
#include "qwindowsinternalmimedata.h"
-#include <QtGui/QPlatformClipboard>
+#include <qpa/qplatformclipboard.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp
index 6913bc8dd4..3a2113520d 100644
--- a/src/plugins/platforms/windows/qwindowscontext.cpp
+++ b/src/plugins/platforms/windows/qwindowscontext.cpp
@@ -55,7 +55,7 @@
#include <QtGui/QWindow>
#include <QtGui/QWindowSystemInterface>
-#include <QtGui/QPlatformNativeInterface>
+#include <qpa/qplatformnativeinterface.h>
#include <QtGui/QGuiApplication>
#include <QtCore/QSet>
@@ -595,37 +595,39 @@ QByteArray QWindowsContext::comErrorString(HRESULT hr)
{
switch (hr) {
case S_OK:
- return QByteArray("S_OK");
+ return QByteArrayLiteral("S_OK");
case S_FALSE:
- return QByteArray("S_FALSE");
+ return QByteArrayLiteral("S_FALSE");
case E_UNEXPECTED:
- return QByteArray("E_UNEXPECTED");
+ return QByteArrayLiteral("E_UNEXPECTED");
case CO_E_ALREADYINITIALIZED:
- return QByteArray("CO_E_ALREADYINITIALIZED");
+ return QByteArrayLiteral("CO_E_ALREADYINITIALIZED");
case CO_E_NOTINITIALIZED:
- return QByteArray("CO_E_NOTINITIALIZED");
+ return QByteArrayLiteral("CO_E_NOTINITIALIZED");
case RPC_E_CHANGED_MODE:
- return QByteArray("RPC_E_CHANGED_MODE");
+ return QByteArrayLiteral("RPC_E_CHANGED_MODE");
case OLE_E_WRONGCOMPOBJ:
- return QByteArray("OLE_E_WRONGCOMPOBJ");
+ return QByteArrayLiteral("OLE_E_WRONGCOMPOBJ");
case CO_E_NOT_SUPPORTED:
- return QByteArray("CO_E_NOT_SUPPORTED");
+ return QByteArrayLiteral("CO_E_NOT_SUPPORTED");
case E_NOTIMPL:
- return QByteArray("E_NOTIMPL");
+ return QByteArrayLiteral("E_NOTIMPL");
case E_INVALIDARG:
- return QByteArray("");
+ return QByteArrayLiteral("E_INVALIDARG");
case E_NOINTERFACE:
- return QByteArray("");
+ return QByteArrayLiteral("E_NOINTERFACE");
case E_POINTER:
- return QByteArray("");
+ return QByteArrayLiteral("E_POINTER");
case E_HANDLE:
- return QByteArray("");
+ return QByteArrayLiteral("E_HANDLE");
case E_ABORT:
- return QByteArray("");
+ return QByteArrayLiteral("E_ABORT");
case E_FAIL:
- return QByteArray("");
- case E_ACCESSDENIED:
- return QByteArray("");
+ return QByteArrayLiteral("E_FAIL");
+ case RPC_E_WRONG_THREAD:
+ return QByteArrayLiteral("RPC_E_WRONG_THREAD");
+ case RPC_E_THREAD_NOT_INIT:
+ return QByteArrayLiteral("RPC_E_THREAD_NOT_INIT");
default:
break;
}
diff --git a/src/plugins/platforms/windows/qwindowscursor.h b/src/plugins/platforms/windows/qwindowscursor.h
index 61c43dc4d2..c1bccde46c 100644
--- a/src/plugins/platforms/windows/qwindowscursor.h
+++ b/src/plugins/platforms/windows/qwindowscursor.h
@@ -44,7 +44,7 @@
#include "qtwindows_additional.h"
-#include <QtGui/QPlatformCursor>
+#include <qpa/qplatformcursor.h>
#include <QtCore/QSharedDataPointer>
#include <QtCore/QHash>
diff --git a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
index 7cd857e3a4..ea47d0abb2 100644
--- a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
+++ b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
@@ -519,29 +519,12 @@ void QWindowsDialogHelperBase<BaseClass>::hide_sys()
}
template <class BaseClass>
-void QWindowsDialogHelperBase<BaseClass>::platformNativeDialogModalHelp()
+void QWindowsDialogHelperBase<BaseClass>::exec_sys()
{
if (QWindowsContext::verboseDialogs)
qDebug("%s" , __FUNCTION__);
- if (QWindowsNativeDialogBase *nd =nativeDialog())
- nd->metaObject()->invokeMethod(this,
- "emitLaunchNativeAppModalPanel",
- Qt::QueuedConnection);
-}
-
-template <class BaseClass>
-void QWindowsDialogHelperBase<BaseClass>::_q_platformRunNativeAppModalPanel()
-{
- if (QWindowsNativeDialogBase *nd =nativeDialog())
- nd->exec(m_ownerWindow);
-}
-
-template <class BaseClass>
-QPlatformDialogHelper::DialogCode QWindowsDialogHelperBase<BaseClass>::dialogResultCode_sys()
-{
- if (QWindowsNativeDialogBase *nd =nativeDialog())
- return nd->result();
- return QPlatformDialogHelper::Rejected;
+ if (QWindowsNativeDialogBase *nd = nativeDialog())
+ nd->exec(m_ownerWindow);
}
static inline bool snapToDefaultButtonHint()
@@ -1105,6 +1088,13 @@ QWindowsNativeFileDialogBase *QWindowsNativeFileDialogBase::create(QFileDialogOp
\class QWindowsFileDialogHelper
\brief Helper for native Windows file dialogs
+ Non-modal dialogs are disabled for now. The functionality is
+ implemented in principle, however there are failures
+ when querying the results from a dialog run in another thread.
+ This could probably be fixed be calling CoInitializeEx() with
+ the right parameters from each thread. The problem is though
+ that calls to CoInitialize() occur in several places in Qt.
+
\ingroup qt-lighthouse-win
*/
@@ -1112,6 +1102,7 @@ class QWindowsFileDialogHelper : public QWindowsDialogHelperBase<QPlatformFileDi
{
public:
QWindowsFileDialogHelper() {}
+ virtual bool supportsNonModalDialog() const { return false; }
virtual bool defaultNameFilterDisables() const
{ return true; }
@@ -1135,19 +1126,14 @@ QWindowsNativeDialogBase *QWindowsFileDialogHelper::createNativeDialog()
QWindowsNativeFileDialogBase *result = QWindowsNativeFileDialogBase::create(options()->acceptMode());
if (!result)
return 0;
- QObject::connect(result, SIGNAL(accepted()), this, SIGNAL(accept()),
- Qt::QueuedConnection);
- QObject::connect(result, SIGNAL(rejected()), this, SIGNAL(reject()),
- Qt::QueuedConnection);
+ QObject::connect(result, SIGNAL(accepted()), this, SIGNAL(accept()));
+ QObject::connect(result, SIGNAL(rejected()), this, SIGNAL(reject()));
QObject::connect(result, SIGNAL(directoryEntered(QString)),
- this, SIGNAL(directoryEntered(QString)),
- Qt::QueuedConnection);
+ this, SIGNAL(directoryEntered(QString)));
QObject::connect(result, SIGNAL(currentChanged(QString)),
- this, SIGNAL(currentChanged(QString)),
- Qt::QueuedConnection);
+ this, SIGNAL(currentChanged(QString)));
QObject::connect(result, SIGNAL(filterSelected(QString)),
- this, SIGNAL(filterSelected(QString)),
- Qt::QueuedConnection);
+ this, SIGNAL(filterSelected(QString)));
// Apply settings.
const QSharedPointer<QFileDialogOptions> &opts = options();
diff --git a/src/plugins/platforms/windows/qwindowsdialoghelpers.h b/src/plugins/platforms/windows/qwindowsdialoghelpers.h
index 909ce5984e..8a06c35167 100644
--- a/src/plugins/platforms/windows/qwindowsdialoghelpers.h
+++ b/src/plugins/platforms/windows/qwindowsdialoghelpers.h
@@ -43,8 +43,8 @@
#define QWINDOWSDIALOGHELPER_H
#include "qtwindows_additional.h"
-#include <QtGui/QPlatformDialogHelper>
-#include <QtGui/QPlatformTheme>
+#include <qpa/qplatformdialoghelper.h>
+#include <qpa/qplatformtheme.h>
#include <QtCore/QStringList>
QT_BEGIN_NAMESPACE
@@ -66,8 +66,7 @@ class QWindowsDialogHelperBase : public BaseClass
{
public:
- virtual void platformNativeDialogModalHelp();
- virtual void _q_platformRunNativeAppModalPanel();
+ virtual void exec_sys();
virtual void deleteNativeDialog_sys();
virtual bool show_sys(Qt::WindowFlags windowFlags,
Qt::WindowModality windowModality,
@@ -75,8 +74,6 @@ public:
virtual void hide_sys();
virtual QVariant styleHint(QPlatformDialogHelper::StyleHint) const;
- virtual QPlatformDialogHelper::DialogCode dialogResultCode_sys();
-
virtual bool supportsNonModalDialog() const { return true; }
protected:
diff --git a/src/plugins/platforms/windows/qwindowsdrag.h b/src/plugins/platforms/windows/qwindowsdrag.h
index 7b629baccc..867093ab60 100644
--- a/src/plugins/platforms/windows/qwindowsdrag.h
+++ b/src/plugins/platforms/windows/qwindowsdrag.h
@@ -44,7 +44,7 @@
#include "qwindowsinternalmimedata.h"
-#include <QtGui/QPlatformDrag>
+#include <qpa/qplatformdrag.h>
#include <QtGui/QPixmap>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.h b/src/plugins/platforms/windows/qwindowsfontdatabase.h
index f442f492aa..6441e79177 100644
--- a/src/plugins/platforms/windows/qwindowsfontdatabase.h
+++ b/src/plugins/platforms/windows/qwindowsfontdatabase.h
@@ -42,7 +42,7 @@
#ifndef QWINDOWSFONTDATABASE_H
#define QWINDOWSFONTDATABASE_H
-#include <QtGui/QPlatformFontDatabase>
+#include <qpa/qplatformfontdatabase.h>
#include <QtCore/QSharedPointer>
#include "qtwindows_additional.h"
diff --git a/src/plugins/platforms/windows/qwindowsfontengine.cpp b/src/plugins/platforms/windows/qwindowsfontengine.cpp
index f4bd3f0c53..e367707ea3 100644
--- a/src/plugins/platforms/windows/qwindowsfontengine.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontengine.cpp
@@ -227,7 +227,7 @@ int QWindowsFontEngine::getGlyphIndexes(const QChar *str, int numChars, QGlyphLa
if (symbol) {
for (; i < numChars; ++i, ++glyph_pos) {
unsigned int uc = getChar(str, i, numChars);
- glyphs->glyphs[i] = getTrueTypeGlyphIndex(cmap, uc);
+ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
if(!glyphs->glyphs[glyph_pos] && uc < 0x100)
glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
}
diff --git a/src/plugins/platforms/windows/qwindowsglcontext.cpp b/src/plugins/platforms/windows/qwindowsglcontext.cpp
index f16a0ca73d..607dabc966 100644
--- a/src/plugins/platforms/windows/qwindowsglcontext.cpp
+++ b/src/plugins/platforms/windows/qwindowsglcontext.cpp
@@ -46,7 +46,7 @@
#include <QtCore/QDebug>
#include <QtCore/QSysInfo>
#include <QtGui/QGuiApplication>
-#include <QtGui/QPlatformNativeInterface>
+#include <qpa/qplatformnativeinterface.h>
#include <wingdi.h>
#include <GL/gl.h>
diff --git a/src/plugins/platforms/windows/qwindowsglcontext.h b/src/plugins/platforms/windows/qwindowsglcontext.h
index a0489e2d02..b83a57d13a 100644
--- a/src/plugins/platforms/windows/qwindowsglcontext.h
+++ b/src/plugins/platforms/windows/qwindowsglcontext.h
@@ -45,7 +45,7 @@
#include "array.h"
#include "qtwindows_additional.h"
-#include <QtGui/QPlatformOpenGLContext>
+#include <qpa/qplatformopenglcontext.h>
#include <QtGui/QOpenGLContext>
#include <QtCore/QSharedPointer>
diff --git a/src/plugins/platforms/windows/qwindowsinputcontext.h b/src/plugins/platforms/windows/qwindowsinputcontext.h
index 610bad08dd..134dfdbd2e 100644
--- a/src/plugins/platforms/windows/qwindowsinputcontext.h
+++ b/src/plugins/platforms/windows/qwindowsinputcontext.h
@@ -44,7 +44,7 @@
#include "qtwindows_additional.h"
-#include <QtGui/QPlatformInputContext>
+#include <qpa/qplatforminputcontext.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp
index 45f6ecf652..255cf1454c 100644
--- a/src/plugins/platforms/windows/qwindowsintegration.cpp
+++ b/src/plugins/platforms/windows/qwindowsintegration.cpp
@@ -60,7 +60,7 @@
#include "accessible/qwindowsaccessibility.h"
#endif
-#include <QtGui/QPlatformNativeInterface>
+#include <qpa/qplatformnativeinterface.h>
#include <QtGui/QWindowSystemInterface>
#include <QtGui/QBackingStore>
#include <QtGui/private/qpixmap_raster_p.h>
@@ -244,8 +244,10 @@ QPlatformWindow *QWindowsIntegration::createPlatformWindow(QWindow *window) cons
= QWindowsWindow::WindowData::create(window, requested, window->windowTitle());
if (QWindowsContext::verboseIntegration || QWindowsContext::verboseWindows)
qDebug().nospace()
- << __FUNCTION__ << ' ' << window << '\n'
- << " Requested: " << requested.geometry << " Flags="
+ << __FUNCTION__ << '<' << window << '\n'
+ << " Requested: " << requested.geometry << "frame incl.: "
+ << QWindowsGeometryHint::positionIncludesFrame(window)
+ << " Flags="
<< QWindowsWindow::debugWindowFlags(requested.flags) << '\n'
<< " Obtained : " << obtained.geometry << " Margins "
<< obtained.frame << " Flags="
@@ -255,8 +257,6 @@ QPlatformWindow *QWindowsIntegration::createPlatformWindow(QWindow *window) cons
return 0;
if (requested.flags != obtained.flags)
window->setWindowFlags(obtained.flags);
- if (requested.geometry != obtained.geometry)
- QWindowSystemInterface::handleGeometryChange(window, obtained.geometry);
return new QWindowsWindow(window, obtained);
}
diff --git a/src/plugins/platforms/windows/qwindowsintegration.h b/src/plugins/platforms/windows/qwindowsintegration.h
index 84bbf6103a..76393be402 100644
--- a/src/plugins/platforms/windows/qwindowsintegration.h
+++ b/src/plugins/platforms/windows/qwindowsintegration.h
@@ -42,7 +42,7 @@
#ifndef QWINDOWSINTEGRATION_H
#define QWINDOWSINTEGRATION_H
-#include <QtGui/QPlatformIntegration>
+#include <qpa/qplatformintegration.h>
#include <QtCore/QScopedPointer>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsscreen.cpp b/src/plugins/platforms/windows/qwindowsscreen.cpp
index 2476e15169..cc694fe0ea 100644
--- a/src/plugins/platforms/windows/qwindowsscreen.cpp
+++ b/src/plugins/platforms/windows/qwindowsscreen.cpp
@@ -59,7 +59,8 @@ QT_BEGIN_NAMESPACE
QWindowsScreenData::QWindowsScreenData() :
dpi(96, 96), depth(32), format(QImage::Format_ARGB32_Premultiplied),
- flags(VirtualDesktop), orientation(Qt::LandscapeOrientation)
+ flags(VirtualDesktop), orientation(Qt::LandscapeOrientation),
+ refreshRateHz(60)
{
}
@@ -103,6 +104,9 @@ BOOL QT_WIN_CALLBACK monitorEnumCallback(HMONITOR hMonitor, HDC, LPRECT, LPARAM
data.depth = GetDeviceCaps(hdc, BITSPIXEL);
data.format = data.depth == 16 ? QImage::Format_RGB16 : QImage::Format_RGB32;
data.physicalSizeMM = QSizeF(GetDeviceCaps(hdc, HORZSIZE), GetDeviceCaps(hdc, VERTSIZE));
+ const int refreshRate = GetDeviceCaps(hdc, VREFRESH);
+ if (refreshRate > 1) // 0,1 means heardware default.
+ data.refreshRateHz = refreshRate;
DeleteDC(hdc);
} else {
qWarning("%s: Unable to obtain handle for monitor '%s', defaulting to %g DPI.",
diff --git a/src/plugins/platforms/windows/qwindowsscreen.h b/src/plugins/platforms/windows/qwindowsscreen.h
index 5b9a50b2ab..615d4faf15 100644
--- a/src/plugins/platforms/windows/qwindowsscreen.h
+++ b/src/plugins/platforms/windows/qwindowsscreen.h
@@ -47,7 +47,7 @@
#include <QtCore/QList>
#include <QtCore/QPair>
#include <QtCore/QSharedPointer>
-#include <QtGui/QPlatformScreen>
+#include <qpa/qplatformscreen.h>
QT_BEGIN_NAMESPACE
@@ -70,6 +70,7 @@ struct QWindowsScreenData
unsigned flags;
QString name;
Qt::ScreenOrientation orientation;
+ qreal refreshRateHz;
};
class QWindowsScreen : public QPlatformScreen
@@ -87,6 +88,7 @@ public:
virtual QImage::Format format() const { return m_data.format; }
virtual QSizeF physicalSize() const { return m_data.physicalSizeMM; }
virtual QDpi logicalDpi() const { return m_data.dpi; }
+ virtual qreal refreshRate() const { return m_data.refreshRateHz; }
virtual QString name() const { return m_data.name; }
virtual Qt::ScreenOrientation primaryOrientation() { return m_data.orientation; }
virtual QList<QPlatformScreen *> virtualSiblings() const;
diff --git a/src/plugins/platforms/windows/qwindowsservices.h b/src/plugins/platforms/windows/qwindowsservices.h
index d979ed1af1..c9954b5257 100644
--- a/src/plugins/platforms/windows/qwindowsservices.h
+++ b/src/plugins/platforms/windows/qwindowsservices.h
@@ -42,7 +42,7 @@
#ifndef QWINDOWSDESKTOPSERVICES_H
#define QWINDOWSDESKTOPSERVICES_H
-#include <QtGui/qplatformservices_qpa.h>
+#include <qpa/qplatformservices.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowstheme.cpp b/src/plugins/platforms/windows/qwindowstheme.cpp
index 000311a807..63ed20eeef 100644
--- a/src/plugins/platforms/windows/qwindowstheme.cpp
+++ b/src/plugins/platforms/windows/qwindowstheme.cpp
@@ -296,6 +296,22 @@ static inline QStringList styleNames()
return result;
}
+static inline int uiEffects()
+{
+ int result = 0;
+ if (booleanSystemParametersInfo(SPI_GETUIEFFECTS, false))
+ result |= QPlatformTheme::GeneralUiEffect;
+ if (booleanSystemParametersInfo(SPI_GETMENUANIMATION, false))
+ result |= QPlatformTheme::AnimateMenuUiEffect;
+ if (booleanSystemParametersInfo(SPI_GETMENUFADE, false))
+ result |= QPlatformTheme::FadeMenuUiEffect;
+ if (booleanSystemParametersInfo(SPI_GETCOMBOBOXANIMATION, false))
+ result |= QPlatformTheme::AnimateComboUiEffect;
+ if (booleanSystemParametersInfo(SPI_GETTOOLTIPANIMATION, false))
+ result |= QPlatformTheme::AnimateTooltipUiEffect;
+ return result;
+}
+
QVariant QWindowsTheme::themeHint(ThemeHint hint) const
{
switch (hint) {
@@ -315,6 +331,8 @@ QVariant QWindowsTheme::themeHint(ThemeHint hint) const
return QVariant(qRound(qreal(QWindowsContext::instance()->defaultDPI()) * 1.375));
case KeyboardScheme:
return QVariant(int(WindowsKeyboardScheme));
+ case UiEffects:
+ return QVariant(uiEffects());
default:
break;
}
diff --git a/src/plugins/platforms/windows/qwindowstheme.h b/src/plugins/platforms/windows/qwindowstheme.h
index 7515a13a72..223a98caf5 100644
--- a/src/plugins/platforms/windows/qwindowstheme.h
+++ b/src/plugins/platforms/windows/qwindowstheme.h
@@ -42,7 +42,7 @@
#ifndef QWINDOWSTHEME_H
#define QWINDOWSTHEME_H
-#include <QtGui/QPlatformTheme>
+#include <qpa/qplatformtheme.h>
#include <QtGui/QColor>
#include "qtwindows_additional.h"
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp
index 87980487b7..c300f0f5a9 100644
--- a/src/plugins/platforms/windows/qwindowswindow.cpp
+++ b/src/plugins/platforms/windows/qwindowswindow.cpp
@@ -542,6 +542,12 @@ void QWindowsGeometryHint::applyToMinMaxInfo(DWORD style, DWORD exStyle, MINMAXI
<< " out " << *mmi;
}
+bool QWindowsGeometryHint::positionIncludesFrame(const QWindow *w)
+{
+ return qt_window_private(const_cast<QWindow *>(w))->positionPolicy
+ == QWindowPrivate::WindowFrameInclusive;
+}
+
/*!
\class QWindowCreationContext
\brief Active Context for creating windows.
@@ -576,17 +582,24 @@ QWindowCreationContext::QWindowCreationContext(const QWindow *w,
// CW_USEDEFAULT unless set. For now, assume that 0,0 means 'default'
// for toplevels.
if (geometry.isValid()) {
- if (!w->isTopLevel() || geometry.y() >= margins.top()) {
- frameX = geometry.x() - margins.left();
- frameY = geometry.y() - margins.top();
+ frameX = geometry.x();
+ frameY = geometry.y();
+ frameWidth = margins.left() + geometry.width() + margins.right();
+ frameHeight = margins.top() + geometry.height() + margins.bottom();
+ const bool isDefaultPosition = !frameX && !frameY && w->isTopLevel();
+ if (!QWindowsGeometryHint::positionIncludesFrame(w) && !isDefaultPosition) {
+ frameX -= margins.left();
+ frameY -= margins.top();
}
- frameWidth = geometry.width() + margins.left() + margins.right();
- frameHeight = geometry.height() + margins.top() + margins.bottom();
}
if (QWindowsContext::verboseWindows)
qDebug().nospace()
- << __FUNCTION__ << ' ' << w << " min" << geometryHint.minimumSize
- << " min" << geometryHint.maximumSize;
+ << __FUNCTION__ << ' ' << w << geometry
+ << " pos incl. frame" << QWindowsGeometryHint::positionIncludesFrame(w)
+ << " frame: " << frameWidth << 'x' << frameHeight << '+'
+ << frameX << '+' << frameY
+ << " min" << geometryHint.minimumSize
+ << " max" << geometryHint.maximumSize;
}
/*!
@@ -819,7 +832,7 @@ void QWindowsWindow::setGeometry(const QRect &rectIn)
QRect rect = rectIn;
// This means it is a call from QWindow::setFramePos() and
// the coordinates include the frame (size is still the contents rectangle).
- if (qt_window_private(window())->positionPolicy == QWindowPrivate::WindowFrameInclusive) {
+ if (QWindowsGeometryHint::positionIncludesFrame(window())) {
const QMargins margins = frameMargins();
rect.moveTopLeft(rect.topLeft() + QPoint(margins.left(), margins.top()));
}
@@ -1004,21 +1017,30 @@ Qt::WindowFlags QWindowsWindow::setWindowFlags(Qt::WindowFlags flags)
qDebug() << '>' << __FUNCTION__ << this << window() << "\n from: "
<< QWindowsWindow::debugWindowFlags(m_data.flags)
<< "\n to: " << QWindowsWindow::debugWindowFlags(flags);
+ const QRect oldGeometry = geometry();
if (m_data.flags != flags) {
m_data.flags = flags;
if (m_data.hwnd)
m_data = setWindowFlags_sys(flags);
}
+ // When switching to a frameless window, geometry
+ // may change without a WM_MOVE. Report change manually.
+ // Do not send synchronously as not to clobber the widget
+ // geometry in a sequence of setting flags and geometry.
+ const QRect newGeometry = geometry_sys();
+ if (oldGeometry != newGeometry)
+ handleGeometryChange();
+
if (QWindowsContext::verboseWindows)
qDebug() << '<' << __FUNCTION__ << "\n returns: "
- << QWindowsWindow::debugWindowFlags(m_data.flags);
+ << QWindowsWindow::debugWindowFlags(m_data.flags)
+ << " geometry " << oldGeometry << "->" << newGeometry;
return m_data.flags;
}
QWindowsWindow::WindowData QWindowsWindow::setWindowFlags_sys(Qt::WindowFlags wt,
unsigned flags) const
{
- // Geometry changes have not been observed here. Frames change, though.
WindowCreationData creationData;
creationData.fromWindow(window(), wt, flags);
creationData.applyWindowFlags(m_data.hwnd);
diff --git a/src/plugins/platforms/windows/qwindowswindow.h b/src/plugins/platforms/windows/qwindowswindow.h
index badc229718..64fd78d1ce 100644
--- a/src/plugins/platforms/windows/qwindowswindow.h
+++ b/src/plugins/platforms/windows/qwindowswindow.h
@@ -45,7 +45,7 @@
#include "qtwindows_additional.h"
#include "qwindowscursor.h"
-#include <QtGui/QPlatformWindow>
+#include <qpa/qplatformwindow.h>
QT_BEGIN_NAMESPACE
@@ -66,6 +66,8 @@ struct QWindowsGeometryHint
static inline QPoint mapFromGlobal(const HWND hwnd, const QPoint &);
static inline QPoint mapFromGlobal(const QWindow *w, const QPoint &);
+ static bool positionIncludesFrame(const QWindow *w);
+
QSize minimumSize;
QSize maximumSize;
};