Windows platform headers: Add isTabletMode()

Add a bool function querying Windows 10 tablet mode.

Task-number: QTBUG-56831
Change-Id: Ief728a7d80a11ba79f7859033ff4be6ef79bbd4e
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
This commit is contained in:
Friedemann Kleint 2017-01-18 09:32:12 +01:00
parent a0bc9d0027
commit 45f80a52c2
4 changed files with 56 additions and 2 deletions

View File

@ -90,6 +90,15 @@ public:
if (func)
func(behavior);
}
typedef bool (*IsTabletModeType)();
static const QByteArray isTabletModeIdentifier() { return QByteArrayLiteral("WindowsIsTabletMode"); }
static bool isTabletMode()
{
IsTabletModeType func = reinterpret_cast<IsTabletModeType>(QGuiApplication::platformFunction(isTabletModeIdentifier()));
return func && func();
}
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QWindowsWindowFunctions::TouchWindowTouchTypes)

View File

@ -144,3 +144,35 @@
\sa QWidget::activateWindow(), QWindow::requestActivate()
\since 5.7
*/
/*!
\typedef QWindowsWindowFunctions::IsTabletModeType
This is the typedef for the function returned by QGuiApplication::platformFunction()
when passed isTabletModeIdentifier().
\since 5.9
*/
/*!
\fn QByteArray QWindowsWindowFunctions::isTabletModeIdentifier()
Returns a bytearray that can be used to query
QGuiApplication::platformFunction() to retrieve the IsTabletModeType
function.
\since 5.9
*/
/*!
\fn bool QWindowsWindowFunctions::isTabletMode()
This is a convenience function that can be used directly instead of resolving
the function pointer. The function can be used to query whether Windows 10
operates in \e{Tablet Mode}. In this mode, Windows forces all application
main windows to open in maximized state. Applications should then avoid
resizing windows or restoring geometries to non-maximized states.
\sa QWidget::showMaximized(), QWidget::saveGeometry(), QWidget::restoreGeometry()
\since 5.9
*/

View File

@ -38,6 +38,7 @@
****************************************************************************/
#include "qwindowsnativeinterface.h"
#include "qwindowsclipboard.h"
#include "qwindowswindow.h"
#include "qwindowscontext.h"
#include "qwindowscursor.h"
@ -45,6 +46,7 @@
#include "qwindowsopengltester.h"
#include "qwindowsintegration.h"
#include "qwindowsmime.h"
#include "qwin10helpers.h"
#include <QtGui/QWindow>
#include <QtGui/QOpenGLContext>
@ -253,14 +255,23 @@ QFont QWindowsNativeInterface::logFontToQFont(const void *logFont, int verticalD
return QWindowsFontDatabase::LOGFONT_to_QFont(*reinterpret_cast<const LOGFONT *>(logFont), verticalDpi);
}
bool QWindowsNativeInterface::isTabletMode()
{
#if QT_CONFIG(clipboard)
if (const QWindowsClipboard *clipboard = QWindowsClipboard::instance())
return qt_windowsIsTabletMode(clipboard->clipboardViewer());
#endif
return false;
}
QFunctionPointer QWindowsNativeInterface::platformFunction(const QByteArray &function) const
{
if (function == QWindowsWindowFunctions::setTouchWindowTouchTypeIdentifier())
return QFunctionPointer(QWindowsWindow::setTouchWindowTouchTypeStatic);
else if (function == QWindowsWindowFunctions::setHasBorderInFullScreenIdentifier())
return QFunctionPointer(QWindowsWindow::setHasBorderInFullScreenStatic);
else if (function == QWindowsWindowFunctions::setWindowActivationBehaviorIdentifier())
return QFunctionPointer(QWindowsNativeInterface::setWindowActivationBehavior);
else if (function == QWindowsWindowFunctions::isTabletModeIdentifier())
return QFunctionPointer(QWindowsNativeInterface::isTabletMode);
return Q_NULLPTR;
}

View File

@ -102,6 +102,8 @@ public:
static void setWindowActivationBehavior(QWindowsWindowFunctions::WindowActivationBehavior b)
{ QWindowsNativeInterface::m_windowActivationBehavior = b; }
static bool isTabletMode();
QFunctionPointer platformFunction(const QByteArray &function) const override;
private: