summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSérgio Martins <sergio.martins@kdab.com>2013-12-05 14:48:10 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-12-06 13:52:34 +0100
commit0c936ca83c40b73f30195a619900f2be98b9e968 (patch)
tree78e1b755d7b5c7c6b430ecd3ca24ce12ccc35cc8 /src
parent862e11cd199e51eb27e5f49aad511e676b0aba95 (diff)
Windows: Don't cover the taskbar when maximizing frameless windows
Brings Windows QPA on par with other platforms. [ChangeLog][Windows] Don't cover the taskbar when maximizing frameless windows. Task-number: QTBUG-8361 Change-Id: Iba35132f697cb7379650a4c883b616c5c2023d4c Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.cpp28
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.h3
2 files changed, 29 insertions, 2 deletions
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp
index 58047124a1..89b5bdbf0e 100644
--- a/src/plugins/platforms/windows/qwindowswindow.cpp
+++ b/src/plugins/platforms/windows/qwindowswindow.cpp
@@ -1170,8 +1170,13 @@ void QWindowsWindow::show_sys() const
if (type == Qt::Popup || type == Qt::ToolTip || type == Qt::Tool)
sm = SW_SHOWNOACTIVATE;
+ if (w->windowState() & Qt::WindowMaximized)
+ setFlag(WithinMaximize); // QTBUG-8361
+
ShowWindow(m_data.hwnd, sm);
+ clearFlag(WithinMaximize);
+
if (fakedMaximize) {
setStyle(style() & ~WS_MAXIMIZEBOX);
SetWindowPos(m_data.hwnd, 0, 0, 0, 0, 0,
@@ -1582,8 +1587,11 @@ void QWindowsWindow::setWindowState_sys(Qt::WindowState newState)
setFlag(FrameDirty);
if ((oldState == Qt::WindowMaximized) != (newState == Qt::WindowMaximized)) {
- if (visible && !(newState == Qt::WindowMinimized))
+ if (visible && !(newState == Qt::WindowMinimized)) {
+ setFlag(WithinMaximize);
ShowWindow(m_data.hwnd, (newState == Qt::WindowMaximized) ? SW_MAXIMIZE : SW_SHOWNOACTIVATE);
+ clearFlag(WithinMaximize);
+ }
}
if ((oldState == Qt::WindowFullScreen) != (newState == Qt::WindowFullScreen)) {
@@ -1903,6 +1911,24 @@ void QWindowsWindow::getSizeHints(MINMAXINFO *mmi) const
{
const QWindowsGeometryHint hint(window(), m_data.customMargins);
hint.applyToMinMaxInfo(m_data.hwnd, mmi);
+
+ if (testFlag(WithinMaximize) && (m_data.flags & Qt::FramelessWindowHint)) {
+ // This block fixes QTBUG-8361: Frameless windows shouldn't cover the
+ // taskbar when maximized
+ if (const QScreen *screen = effectiveScreen(window())) {
+ mmi->ptMaxSize.y = screen->availableGeometry().height();
+
+ // Width, because you can have the taskbar on the sides too.
+ mmi->ptMaxSize.x = screen->availableGeometry().width();
+
+ // If you have the taskbar on top, or on the left you don't want it at (0,0):
+ mmi->ptMaxPosition.x = screen->availableGeometry().x();
+ mmi->ptMaxPosition.y = screen->availableGeometry().y();
+ } else {
+ qWarning() << "Invalid screen";
+ }
+ }
+
if (QWindowsContext::verboseWindows)
qDebug() << __FUNCTION__ << window() << *mmi;
}
diff --git a/src/plugins/platforms/windows/qwindowswindow.h b/src/plugins/platforms/windows/qwindowswindow.h
index f055864482..61dc3e2dc2 100644
--- a/src/plugins/platforms/windows/qwindowswindow.h
+++ b/src/plugins/platforms/windows/qwindowswindow.h
@@ -136,7 +136,8 @@ public:
TouchRegistered = 0x4000,
AlertState = 0x8000,
Exposed = 0x10000,
- WithinCreate = 0x20000
+ WithinCreate = 0x20000,
+ WithinMaximize = 0x40000
};
struct WindowData