diff options
Diffstat (limited to 'src/plugins/platforms/windows/qwindowsintegration.cpp')
-rw-r--r-- | src/plugins/platforms/windows/qwindowsintegration.cpp | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index 0a9e8b9d91..7d621126b9 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -59,7 +59,7 @@ #endif #include "qwindowsinputcontext.h" #include "qwindowskeymapper.h" -#ifndef QT_NO_ACCESSIBILITY +#if QT_CONFIG(accessibility) # include "uiautomation/qwindowsuiaaccessibility.h" #endif @@ -76,8 +76,8 @@ #include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h> -#include <QtCore/QDebug> -#include <QtCore/QVariant> +#include <QtCore/qdebug.h> +#include <QtCore/qvariant.h> #include <limits.h> @@ -133,6 +133,7 @@ QT_BEGIN_NAMESPACE struct QWindowsIntegrationPrivate { + Q_DISABLE_COPY(QWindowsIntegrationPrivate) explicit QWindowsIntegrationPrivate(const QStringList ¶mList); ~QWindowsIntegrationPrivate(); @@ -150,7 +151,7 @@ struct QWindowsIntegrationPrivate QScopedPointer<QWindowsStaticOpenGLContext> m_staticOpenGLContext; #endif // QT_NO_OPENGL QScopedPointer<QPlatformInputContext> m_inputContext; -#ifndef QT_NO_ACCESSIBILITY +#if QT_CONFIG(accessibility) QWindowsUiaAccessibility m_accessibility; #endif QWindowsServices m_services; @@ -184,7 +185,7 @@ static inline unsigned parseOptions(const QStringList ¶mList, QtWindows::ProcessDpiAwareness *dpiAwareness) { unsigned options = 0; - foreach (const QString ¶m, paramList) { + for (const QString ¶m : paramList) { if (param.startsWith(QLatin1String("fontengine="))) { if (param.endsWith(QLatin1String("freetype"))) { options |= QWindowsIntegration::FontDatabaseFreeType; @@ -197,6 +198,8 @@ static inline unsigned parseOptions(const QStringList ¶mList, } else if (param.endsWith(QLatin1String("none"))) { options |= QWindowsIntegration::NoNativeDialogs; } + } else if (param == QLatin1String("altgr")) { + options |= QWindowsIntegration::DetectAltGrModifier; } else if (param == QLatin1String("gl=gdi")) { options |= QWindowsIntegration::DisableArb; } else if (param == QLatin1String("nodirectwrite")) { @@ -212,6 +215,8 @@ static inline unsigned parseOptions(const QStringList ¶mList, options |= QWindowsIntegration::AlwaysUseNativeMenus; } else if (param == QLatin1String("menus=none")) { options |= QWindowsIntegration::NoNativeMenus; + } else if (param == QLatin1String("nowmpointer")) { + options |= QWindowsIntegration::DontUseWMPointer; } else { qWarning() << "Unknown option" << param; } @@ -230,8 +235,15 @@ QWindowsIntegrationPrivate::QWindowsIntegrationPrivate(const QStringList ¶mL QtWindows::ProcessDpiAwareness dpiAwareness = QtWindows::ProcessPerMonitorDpiAware; m_options = parseOptions(paramList, &tabletAbsoluteRange, &dpiAwareness); QWindowsFontDatabase::setFontOptions(m_options); - if (tabletAbsoluteRange >= 0) - m_context.setTabletAbsoluteRange(tabletAbsoluteRange); + + if (m_context.initPointer(m_options)) { + QCoreApplication::setAttribute(Qt::AA_CompressHighFrequencyEvents); + } else { + m_context.initTablet(m_options); + if (tabletAbsoluteRange >= 0) + m_context.setTabletAbsoluteRange(tabletAbsoluteRange); + } + if (!dpiAwarenessSet) { // Set only once in case of repeated instantiations of QGuiApplication. if (!QCoreApplication::testAttribute(Qt::AA_PluginApplication)) { m_context.setProcessDpiAwareness(dpiAwareness); @@ -248,8 +260,7 @@ QWindowsIntegrationPrivate::QWindowsIntegrationPrivate(const QStringList ¶mL QWindowsIntegrationPrivate::~QWindowsIntegrationPrivate() { - if (m_fontDatabase) - delete m_fontDatabase; + delete m_fontDatabase; } QWindowsIntegration *QWindowsIntegration::m_instance = nullptr; @@ -262,6 +273,7 @@ QWindowsIntegration::QWindowsIntegration(const QStringList ¶mList) : d->m_clipboard.registerViewer(); #endif d->m_context.screenManager().handleScreenChanges(); + d->m_context.setDetectAltGrModifier((d->m_options & DetectAltGrModifier) != 0); } QWindowsIntegration::~QWindowsIntegration() @@ -332,7 +344,7 @@ QPlatformWindow *QWindowsIntegration::createPlatformWindow(QWindow *window) cons << "\n Requested: " << requested.geometry << " frame incl.=" << QWindowsGeometryHint::positionIncludesFrame(window) << ' ' << requested.flags - << "\n Obtained : " << obtained.geometry << " margins=" << obtained.frame + << "\n Obtained : " << obtained.geometry << " margins=" << obtained.fullFrameMargins << " handle=" << obtained.hwnd << ' ' << obtained.flags << '\n'; if (Q_UNLIKELY(!obtained.hwnd)) @@ -408,6 +420,10 @@ QWindowsStaticOpenGLContext *QWindowsStaticOpenGLContext::doCreate() } const QWindowsOpenGLTester::Renderers supportedRenderers = QWindowsOpenGLTester::supportedRenderers(); + if (supportedRenderers.testFlag(QWindowsOpenGLTester::DisableProgramCacheFlag) + && !QCoreApplication::testAttribute(Qt::AA_DisableShaderDiskCache)) { + QCoreApplication::setAttribute(Qt::AA_DisableShaderDiskCache); + } if (supportedRenderers & QWindowsOpenGLTester::DesktopGl) { if (QWindowsStaticOpenGLContext *glCtx = QOpenGLStaticContext::create()) { if ((supportedRenderers & QWindowsOpenGLTester::DisableRotationFlag) @@ -560,7 +576,7 @@ QPlatformInputContext * QWindowsIntegration::inputContext() const return d->m_inputContext.data(); } -#ifndef QT_NO_ACCESSIBILITY +#if QT_CONFIG(accessibility) QPlatformAccessibility *QWindowsIntegration::accessibility() const { return &d->m_accessibility; |