summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/winrt
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2017-04-20 11:19:14 +0200
committerLiang Qi <liang.qi@qt.io>2017-04-20 12:31:27 +0200
commit7950b6b283549c98f1e0f981c84b68071a13b616 (patch)
treecf7281872045ebd57c68e10064ff0f400084aa13 /src/plugins/platforms/winrt
parent58d2927861d3e57cac4f6db599e209d2bfb17a2c (diff)
parent0794d61c822585530243f638687b8a75f0a15d0c (diff)
Merge remote-tracking branch 'origin/5.9' into dev
Conflicts: src/corelib/tools/qbytearray.h src/corelib/tools/qdatetime.h src/corelib/tools/qstring.h src/corelib/tools/qversionnumber.h src/plugins/platforms/android/qandroidplatformintegration.cpp tests/auto/corelib/tools/qhashfunctions/tst_qhashfunctions.cpp Change-Id: Iefd92a435e687a76cd593099e40d9a9620a1454d
Diffstat (limited to 'src/plugins/platforms/winrt')
-rw-r--r--src/plugins/platforms/winrt/qwinrtscreen.cpp53
-rw-r--r--src/plugins/platforms/winrt/qwinrttheme.cpp3
-rw-r--r--src/plugins/platforms/winrt/winrt.pro1
3 files changed, 40 insertions, 17 deletions
diff --git a/src/plugins/platforms/winrt/qwinrtscreen.cpp b/src/plugins/platforms/winrt/qwinrtscreen.cpp
index edfcf038d7..7ac4bdac6c 100644
--- a/src/plugins/platforms/winrt/qwinrtscreen.cpp
+++ b/src/plugins/platforms/winrt/qwinrtscreen.cpp
@@ -101,22 +101,26 @@ QT_BEGIN_NAMESPACE
struct KeyInfo {
KeyInfo()
: virtualKey(0)
+ , isAutoRepeat(false)
{
}
KeyInfo(const QString &text, quint32 virtualKey)
: text(text)
, virtualKey(virtualKey)
+ , isAutoRepeat(false)
{
}
KeyInfo(quint32 virtualKey)
: virtualKey(virtualKey)
+ , isAutoRepeat(false)
{
}
QString text;
quint32 virtualKey;
+ bool isAutoRepeat;
};
static inline Qt::ScreenOrientations qtOrientationsFromNative(DisplayOrientations native)
@@ -681,21 +685,26 @@ Qt::KeyboardModifiers QWinRTScreen::keyboardModifiers() const
Qt::KeyboardModifiers mods;
CoreVirtualKeyStates mod;
- d->coreWindow->GetAsyncKeyState(VirtualKey_Shift, &mod);
- if (mod == CoreVirtualKeyStates_Down)
+ HRESULT hr = d->coreWindow->GetAsyncKeyState(VirtualKey_Shift, &mod);
+ Q_ASSERT_SUCCEEDED(hr);
+ if (mod & CoreVirtualKeyStates_Down)
mods |= Qt::ShiftModifier;
- d->coreWindow->GetAsyncKeyState(VirtualKey_Menu, &mod);
- if (mod == CoreVirtualKeyStates_Down)
+ hr = d->coreWindow->GetAsyncKeyState(VirtualKey_Menu, &mod);
+ Q_ASSERT_SUCCEEDED(hr);
+ if (mod & CoreVirtualKeyStates_Down)
mods |= Qt::AltModifier;
- d->coreWindow->GetAsyncKeyState(VirtualKey_Control, &mod);
- if (mod == CoreVirtualKeyStates_Down)
+ hr = d->coreWindow->GetAsyncKeyState(VirtualKey_Control, &mod);
+ Q_ASSERT_SUCCEEDED(hr);
+ if (mod & CoreVirtualKeyStates_Down)
mods |= Qt::ControlModifier;
- d->coreWindow->GetAsyncKeyState(VirtualKey_LeftWindows, &mod);
- if (mod == CoreVirtualKeyStates_Down) {
+ hr = d->coreWindow->GetAsyncKeyState(VirtualKey_LeftWindows, &mod);
+ Q_ASSERT_SUCCEEDED(hr);
+ if (mod & CoreVirtualKeyStates_Down) {
mods |= Qt::MetaModifier;
} else {
- d->coreWindow->GetAsyncKeyState(VirtualKey_RightWindows, &mod);
- if (mod == CoreVirtualKeyStates_Down)
+ hr = d->coreWindow->GetAsyncKeyState(VirtualKey_RightWindows, &mod);
+ Q_ASSERT_SUCCEEDED(hr);
+ if (mod & CoreVirtualKeyStates_Down)
mods |= Qt::MetaModifier;
}
return mods;
@@ -971,6 +980,7 @@ HRESULT QWinRTScreen::onKeyDown(ABI::Windows::UI::Core::ICoreWindow *, ABI::Wind
if (!shouldAutoRepeat(key))
return S_OK;
+ d->activeKeys[key].isAutoRepeat = true;
// If the key was pressed before trigger a key release before the next key press
QWindowSystemInterface::handleExtendedKeyEvent(
topWindow(),
@@ -981,7 +991,7 @@ HRESULT QWinRTScreen::onKeyDown(ABI::Windows::UI::Core::ICoreWindow *, ABI::Wind
virtualKey,
0,
QString(),
- status.WasKeyDown,
+ d->activeKeys.value(key).isAutoRepeat,
!status.RepeatCount ? 1 : status.RepeatCount,
false);
} else {
@@ -992,16 +1002,26 @@ HRESULT QWinRTScreen::onKeyDown(ABI::Windows::UI::Core::ICoreWindow *, ABI::Wind
if (key == Qt::Key_unknown || (key >= Qt::Key_Space && key <= Qt::Key_ydiaeresis))
return S_OK;
+ Qt::KeyboardModifiers modifiers = keyboardModifiers();
+ // If the key actually pressed is a modifier key, then we remove its modifier key from the
+ // state, since a modifier-key can't have itself as a modifier (see qwindowskeymapper.cpp)
+ if (key == Qt::Key_Control)
+ modifiers = modifiers ^ Qt::ControlModifier;
+ else if (key == Qt::Key_Shift)
+ modifiers = modifiers ^ Qt::ShiftModifier;
+ else if (key == Qt::Key_Alt)
+ modifiers = modifiers ^ Qt::AltModifier;
+
QWindowSystemInterface::handleExtendedKeyEvent(
topWindow(),
QEvent::KeyPress,
key,
- keyboardModifiers(),
+ modifiers,
!status.ScanCode ? -1 : status.ScanCode,
virtualKey,
0,
QString(),
- status.WasKeyDown,
+ d->activeKeys.value(key).isAutoRepeat,
!status.RepeatCount ? 1 : status.RepeatCount,
false);
return S_OK;
@@ -1051,20 +1071,19 @@ HRESULT QWinRTScreen::onCharacterReceived(ICoreWindow *, ICharacterReceivedEvent
const Qt::KeyboardModifiers modifiers = keyboardModifiers();
const Qt::Key key = qKeyFromCode(keyCode, modifiers);
const QString text = QChar(keyCode);
- const quint32 virtualKey = d->activeKeys.value(key).virtualKey;
+ const KeyInfo info = d->activeKeys.value(key);
QWindowSystemInterface::handleExtendedKeyEvent(
topWindow(),
QEvent::KeyPress,
key,
modifiers,
!status.ScanCode ? -1 : status.ScanCode,
- virtualKey,
+ info.virtualKey,
0,
text,
- status.WasKeyDown,
+ info.isAutoRepeat,
!status.RepeatCount ? 1 : status.RepeatCount,
false);
- d->activeKeys.insert(key, KeyInfo(text, virtualKey));
return S_OK;
}
diff --git a/src/plugins/platforms/winrt/qwinrttheme.cpp b/src/plugins/platforms/winrt/qwinrttheme.cpp
index 6b35bde83e..5696ae7a10 100644
--- a/src/plugins/platforms/winrt/qwinrttheme.cpp
+++ b/src/plugins/platforms/winrt/qwinrttheme.cpp
@@ -146,6 +146,8 @@ static void nativeColorSettings(QPalette &p)
if (uiColorSettings(L"Hotlight", UIElementType_Hotlight, &color))
p.setColor(QPalette::BrightText, fromColor(color));
+ // Starting with SDK 15063 those have been removed.
+#ifndef QT_WINRT_DISABLE_PHONE_COLORS
//Phone related
if (uiColorSettings(L"PopupBackground", UIElementType_PopupBackground, &color)) {
p.setColor(QPalette::ToolTipBase, fromColor(color));
@@ -186,6 +188,7 @@ static void nativeColorSettings(QPalette &p)
if (uiColorSettings(L"TextContrastWithHigh", UIElementType_TextContrastWithHigh, &color))
p.setColor(QPalette::BrightText, fromColor(color));
+#endif // QT_WINRT_DISABLE_PHONE_COLORS
}
QWinRTTheme::QWinRTTheme()
diff --git a/src/plugins/platforms/winrt/winrt.pro b/src/plugins/platforms/winrt/winrt.pro
index 35801fdacc..02a848b03f 100644
--- a/src/plugins/platforms/winrt/winrt.pro
+++ b/src/plugins/platforms/winrt/winrt.pro
@@ -51,6 +51,7 @@ OTHER_FILES += winrt.json
WINRT_SDK_VERSION_STRING = $$(UCRTVersion)
WINRT_SDK_VERSION = $$member($$list($$split(WINRT_SDK_VERSION_STRING, .)), 2)
lessThan(WINRT_SDK_VERSION, 14322): DEFINES += QT_WINRT_LIMITED_DRAGANDDROP
+greaterThan(WINRT_SDK_VERSION, 14393): DEFINES += QT_WINRT_DISABLE_PHONE_COLORS
contains(DEFINES, QT_NO_DRAGANDDROP) {
SOURCES -= qwinrtdrag.cpp