Windows QScreen: handle change in working area when the taskbar moves
authorShawn Rutledge <shawn.rutledge@nokia.com>
Wed, 19 Sep 2012 16:06:12 +0000 (18:06 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 16 Oct 2012 06:41:48 +0000 (08:41 +0200)
Change-Id: Ic496419d89b9cca7653e77ef22978597abcb4e30
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
src/plugins/platforms/windows/qtwindowsglobal.h
src/plugins/platforms/windows/qwindowscontext.cpp
src/plugins/platforms/windows/qwindowsscreen.cpp
src/plugins/platforms/windows/qwindowsscreen.h

index 6eb3bde..73f963b 100644 (file)
@@ -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:
index c36b919..98c17de 100644 (file)
@@ -754,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;
     }
index 05a6893..0717a8e 100644 (file)
@@ -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
index 49b6263..dfd85f9 100644 (file)
@@ -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; }