From 694d1a83b33dcfee0903791dfcc41657e30750d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20L=C3=BCbking?= Date: Mon, 4 Feb 2013 21:21:18 +0100 Subject: [PATCH] Permit maximization of windows with fixed position A window can be "maximized" despite it's position is fixed. Most obvioulsy for a corresponding of "0", but also in other cases. The window can still be resized, some size is the maximum one and there's no reason to prevent the shortcut of this state. BUG: 314392 REVIEW: 108789 FIXED-IN: 4.11 --- geometry.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/geometry.cpp b/geometry.cpp index a6ff77352a..372a4c87c5 100644 --- a/geometry.cpp +++ b/geometry.cpp @@ -1807,7 +1807,7 @@ bool Client::isMaximizable() const // isMovable() and isResizable() may be false for maximized windows // with moving/resizing maximized windows disabled TemporaryAssign< MaximizeMode > tmp(max_mode, MaximizeRestore); - if (!isMovable() || !isResizable() || isToolbar()) // SELI isToolbar() ? + if (!isResizable() || isToolbar()) // SELI isToolbar() ? return false; } if (rules()->checkMaximize(MaximizeRestore) == MaximizeRestore && rules()->checkMaximize(MaximizeFull) != MaximizeRestore) @@ -2111,7 +2111,7 @@ void Client::changeMaximize(bool vertical, bool horizontal, bool adjust) // isMovable() and isResizable() may be false for maximized windows // with moving/resizing maximized windows disabled TemporaryAssign< MaximizeMode > tmp(max_mode, MaximizeRestore); - if (!isMovable() || !isResizable() || isToolbar()) // SELI isToolbar() ? + if (!isResizable() || isToolbar()) // SELI isToolbar() ? return; } @@ -2230,8 +2230,10 @@ void Client::changeMaximize(bool vertical, bool horizontal, bool adjust) adjustedSize(QSize(geom_restore.width(), clientArea.height()), SizemodeFixedH)), geom_mode); } } else { - setGeometry(QRect(QPoint(x(), clientArea.top()), - adjustedSize(QSize(width(), clientArea.height()), SizemodeFixedH)), geom_mode); + QRect r(x(), clientArea.top(), width(), clientArea.height()); + r.setTopLeft(rules()->checkPosition(r.topLeft())); + r.setSize(adjustedSize(r.size(), SizemodeFixedH)); + setGeometry(r, geom_mode); } info->setState(NET::MaxVert, NET::Max); break; @@ -2248,8 +2250,10 @@ void Client::changeMaximize(bool vertical, bool horizontal, bool adjust) adjustedSize(QSize(clientArea.width(), geom_restore.height()), SizemodeFixedW)), geom_mode); } } else { - setGeometry(QRect(QPoint(clientArea.left(), y()), - adjustedSize(QSize(clientArea.width(), height()), SizemodeFixedW)), geom_mode); + QRect r(clientArea.left(), y(), clientArea.width(), height()); + r.setTopLeft(rules()->checkPosition(r.topLeft())); + r.setSize(adjustedSize(r.size(), SizemodeFixedW)); + setGeometry(r, geom_mode); } info->setState(NET::MaxHoriz, NET::Max); break; @@ -2292,13 +2296,15 @@ void Client::changeMaximize(bool vertical, bool horizontal, bool adjust) } case MaximizeFull: { - QSize adjSize = adjustedSize(clientArea.size(), SizemodeMax); - QRect r = QRect(clientArea.topLeft(), adjSize); + QRect r(clientArea); + r.setTopLeft(rules()->checkPosition(r.topLeft())); + r.setSize(adjustedSize(r.size(), SizemodeMax)); if (r.size() != clientArea.size()) { // to avoid off-by-one errors... if (isElectricBorderMaximizing() && r.width() < clientArea.width()) r.moveLeft(QCursor::pos().x() - r.width()/2); else r.moveCenter(clientArea.center()); + r.moveTopLeft(rules()->checkPosition(r.topLeft())); } setGeometry(r, geom_mode); info->setState(NET::Max, NET::Max);