diff options
author | Tor Arne Vestbø <tor.arne.vestbo@digia.com> | 2012-10-16 10:43:36 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@digia.com> | 2012-10-16 10:46:48 +0200 |
commit | 8fc4f99e468a279e6bb8442adad6b6a46d1be1c3 (patch) | |
tree | dfd0540ecac0bc86594e9e997d7e979e40dacc6d /src/plugins/platforms/windows | |
parent | d3921cce47f834dd37cf0bb4085ba242dbbe2412 (diff) | |
parent | f7241e8cb949ecf2d86fae2a759a8e1fdb148a26 (diff) |
Merge remote-tracking branch 'gerrit/master' into newdocs
Change-Id: If2168c519daf45390af04af9ef9722770453a493
Diffstat (limited to 'src/plugins/platforms/windows')
12 files changed, 55 insertions, 10 deletions
diff --git a/src/plugins/platforms/windows/qtwindowsglobal.h b/src/plugins/platforms/windows/qtwindowsglobal.h index 6eb3bdee10..73f963b6b8 100644 --- a/src/plugins/platforms/windows/qtwindowsglobal.h +++ b/src/plugins/platforms/windows/qtwindowsglobal.h @@ -104,6 +104,7 @@ enum WindowsEventType // Simplify event types InputMethodRequest = InputMethodEventFlag + 6, ThemeChanged = ThemingEventFlag + 1, DisplayChangedEvent = 437, + SettingChangedEvent = DisplayChangedEvent + 1, UnknownEvent = 542 }; @@ -184,6 +185,11 @@ inline QtWindows::WindowsEventType windowsEventType(UINT message, WPARAM wParamI return QtWindows::FocusInEvent; case WM_KILLFOCUS: return QtWindows::FocusOutEvent; + // Among other things, WM_SETTINGCHANGE happens when the taskbar is moved + // and therefore the "working area" changes. + // http://msdn.microsoft.com/en-us/library/ms695534(v=vs.85).aspx + case WM_SETTINGCHANGE: + return QtWindows::SettingChangedEvent; case WM_DISPLAYCHANGE: return QtWindows::DisplayChangedEvent; case WM_THEMECHANGED: diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp index 0dade2c49b..98c17deba9 100644 --- a/src/plugins/platforms/windows/qwindowscontext.cpp +++ b/src/plugins/platforms/windows/qwindowscontext.cpp @@ -331,6 +331,11 @@ bool QWindowsContext::useRTLExtensions() const return d->m_keyMapper.useRTLExtensions(); } +QList<int> QWindowsContext::possibleKeys(const QKeyEvent *e) const +{ + return d->m_keyMapper.possibleKeys(e); +} + void QWindowsContext::setWindowCreationContext(const QSharedPointer<QWindowCreationContext> &ctx) { d->m_creationContext = ctx; @@ -749,6 +754,8 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message, #endif case QtWindows::DisplayChangedEvent: return d->m_screenManager.handleDisplayChange(wParam, lParam); + case QtWindows::SettingChangedEvent: + return d->m_screenManager.handleScreenChanges(); default: break; } diff --git a/src/plugins/platforms/windows/qwindowscontext.h b/src/plugins/platforms/windows/qwindowscontext.h index 3f08a742f8..450d6c8f4b 100644 --- a/src/plugins/platforms/windows/qwindowscontext.h +++ b/src/plugins/platforms/windows/qwindowscontext.h @@ -60,6 +60,7 @@ class QWindowsMimeConverter; struct QWindowCreationContext; struct QWindowsContextPrivate; class QPoint; +class QKeyEvent; #ifndef Q_OS_WINCE struct QWindowsUser32DLL @@ -170,6 +171,7 @@ public: unsigned systemInfo() const; bool useRTLExtensions() const; + QList<int> possibleKeys(const QKeyEvent *e) const; QWindowsMimeConverter &mimeConverter() const; QWindowsScreenManager &screenManager(); diff --git a/src/plugins/platforms/windows/qwindowsinputcontext.cpp b/src/plugins/platforms/windows/qwindowsinputcontext.cpp index 8b3d6749a0..11fd740009 100644 --- a/src/plugins/platforms/windows/qwindowsinputcontext.cpp +++ b/src/plugins/platforms/windows/qwindowsinputcontext.cpp @@ -560,12 +560,8 @@ int QWindowsInputContext::reconvertString(RECONVERTSTRING *reconv) // Find the word in the surrounding text. QTextBoundaryFinder bounds(QTextBoundaryFinder::Word, surroundingText); bounds.setPosition(pos); - if (bounds.isAtBoundary()) { - if (QTextBoundaryFinder::EndWord == bounds.boundaryReasons()) - bounds.toPreviousBoundary(); - } else { + if (bounds.position() > 0 && !(bounds.boundaryReasons() & QTextBoundaryFinder::StartOfItem)) bounds.toPreviousBoundary(); - } const int startPos = bounds.position(); bounds.toNextBoundary(); const int endPos = bounds.position(); diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index 463e01246b..1f26ec5bab 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -447,6 +447,11 @@ Qt::KeyboardModifiers QWindowsIntegration::queryKeyboardModifiers() const return QWindowsKeyMapper::queryKeyboardModifiers(); } +QList<int> QWindowsIntegration::possibleKeys(const QKeyEvent *e) const +{ + return d->m_context.possibleKeys(e); +} + QPlatformNativeInterface *QWindowsIntegration::nativeInterface() const { return &d->m_nativeInterface; diff --git a/src/plugins/platforms/windows/qwindowsintegration.h b/src/plugins/platforms/windows/qwindowsintegration.h index fe095cf5d3..49780566dd 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.h +++ b/src/plugins/platforms/windows/qwindowsintegration.h @@ -81,6 +81,7 @@ public: virtual QVariant styleHint(StyleHint hint) const; virtual Qt::KeyboardModifiers queryKeyboardModifiers() const; + virtual QList<int> possibleKeys(const QKeyEvent *e) const; static QWindowsIntegration *instance(); diff --git a/src/plugins/platforms/windows/qwindowskeymapper.cpp b/src/plugins/platforms/windows/qwindowskeymapper.cpp index 322d66836a..b57a27acb4 100644 --- a/src/plugins/platforms/windows/qwindowskeymapper.cpp +++ b/src/plugins/platforms/windows/qwindowskeymapper.cpp @@ -1119,4 +1119,30 @@ Qt::KeyboardModifiers QWindowsKeyMapper::queryKeyboardModifiers() return modifiers; } +QList<int> QWindowsKeyMapper::possibleKeys(const QKeyEvent *e) const +{ + QList<int> result; + + KeyboardLayoutItem *kbItem = keyLayout[e->nativeVirtualKey()]; + if (!kbItem) + return result; + + quint32 baseKey = kbItem->qtKey[0]; + Qt::KeyboardModifiers keyMods = e->modifiers(); + if (baseKey == Qt::Key_Return && (e->nativeModifiers() & ExtendedKey)) { + result << int(Qt::Key_Enter + keyMods); + return result; + } + result << int(baseKey + keyMods); // The base key is _always_ valid, of course + + for (int i = 1; i < 9; ++i) { + Qt::KeyboardModifiers neededMods = ModsTbl[i]; + quint32 key = kbItem->qtKey[i]; + if (key && key != baseKey && ((keyMods & neededMods) == neededMods)) + result << int(key + (keyMods & ~neededMods)); + } + + return result; +} + QT_END_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowskeymapper.h b/src/plugins/platforms/windows/qwindowskeymapper.h index 3a13deb0b6..7b3f18a42d 100644 --- a/src/plugins/platforms/windows/qwindowskeymapper.h +++ b/src/plugins/platforms/windows/qwindowskeymapper.h @@ -48,6 +48,7 @@ QT_BEGIN_NAMESPACE +class QKeyEvent; class QWindow; struct KeyboardLayoutItem; @@ -70,6 +71,7 @@ public: void setKeyGrabber(QWindow *w) { m_keyGrabber = w; } static Qt::KeyboardModifiers queryKeyboardModifiers(); + QList<int> possibleKeys(const QKeyEvent *e) const; private: bool translateKeyEventInternal(QWindow *receiver, const MSG &msg, bool grab); diff --git a/src/plugins/platforms/windows/qwindowsscreen.cpp b/src/plugins/platforms/windows/qwindowsscreen.cpp index 05a6893aad..0717a8ec60 100644 --- a/src/plugins/platforms/windows/qwindowsscreen.cpp +++ b/src/plugins/platforms/windows/qwindowsscreen.cpp @@ -372,7 +372,7 @@ static inline int indexOfMonitor(const QList<QWindowsScreenData> &screenData, ones and propagates resolution changes to QWindowSystemInterface. */ -void QWindowsScreenManager::handleScreenChanges() +bool QWindowsScreenManager::handleScreenChanges() { // Look for changed monitors, add new ones const WindowsScreenDataList newDataList = monitorData(); @@ -396,6 +396,7 @@ void QWindowsScreenManager::handleScreenChanges() delete m_screens.takeAt(i); } // not found } // for existing screens + return true; } QT_END_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowsscreen.h b/src/plugins/platforms/windows/qwindowsscreen.h index 49b62632fc..dfd85f9be4 100644 --- a/src/plugins/platforms/windows/qwindowsscreen.h +++ b/src/plugins/platforms/windows/qwindowsscreen.h @@ -129,7 +129,7 @@ public: delete m_screens.takeLast(); } - void handleScreenChanges(); + bool handleScreenChanges(); bool handleDisplayChange(WPARAM wParam, LPARAM lParam); const WindowsScreenList &screens() const { return m_screens; } diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index 2335870ea7..f3830eb962 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -1178,7 +1178,7 @@ void QWindowsWindow::setWindowTitle(const QString &title) SetWindowText(m_data.hwnd, (const wchar_t*)title.utf16()); } -Qt::WindowFlags QWindowsWindow::setWindowFlags(Qt::WindowFlags flags) +void QWindowsWindow::setWindowFlags(Qt::WindowFlags flags) { if (QWindowsContext::verboseWindows) qDebug() << '>' << __FUNCTION__ << this << window() << "\n from: " @@ -1202,7 +1202,6 @@ Qt::WindowFlags QWindowsWindow::setWindowFlags(Qt::WindowFlags flags) qDebug() << '<' << __FUNCTION__ << "\n returns: " << QWindowsWindow::debugWindowFlags(m_data.flags) << " geometry " << oldGeometry << "->" << newGeometry; - return m_data.flags; } QWindowsWindow::WindowData QWindowsWindow::setWindowFlags_sys(Qt::WindowFlags wt, diff --git a/src/plugins/platforms/windows/qwindowswindow.h b/src/plugins/platforms/windows/qwindowswindow.h index 4b1792859f..3b7666cf32 100644 --- a/src/plugins/platforms/windows/qwindowswindow.h +++ b/src/plugins/platforms/windows/qwindowswindow.h @@ -159,7 +159,7 @@ public: virtual QPoint mapToGlobal(const QPoint &pos) const; virtual QPoint mapFromGlobal(const QPoint &pos) const; - virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags); + virtual void setWindowFlags(Qt::WindowFlags flags); virtual Qt::WindowState setWindowState(Qt::WindowState state); HWND handle() const { return m_data.hwnd; } |