diff --git a/clients/aurorae/src/aurorae.cpp b/clients/aurorae/src/aurorae.cpp index 8fbf96d3b5..78fdf3753a 100644 --- a/clients/aurorae/src/aurorae.cpp +++ b/clients/aurorae/src/aurorae.cpp @@ -325,6 +325,11 @@ void AuroraeClient::toggleKeepBelow() setKeepBelow(!keepBelow()); } +bool AuroraeClient::isMaximized() const +{ + return maximizeMode()==KDecorationDefines::MaximizeFull && !options()->moveResizeMaximizedWindows(); +} + void AuroraeClient::updateWindowShape() { bool maximized = maximizeMode()==KDecorationDefines::MaximizeFull && !options()->moveResizeMaximizedWindows(); diff --git a/clients/aurorae/src/aurorae.h b/clients/aurorae/src/aurorae.h index 9052ba0e50..add847e649 100644 --- a/clients/aurorae/src/aurorae.h +++ b/clients/aurorae/src/aurorae.h @@ -78,7 +78,7 @@ class AuroraeClient : public KDecorationUnstable Q_PROPERTY(bool shadeable READ isShadeable) Q_PROPERTY(bool keepAbove READ keepAbove WRITE setKeepAbove NOTIFY keepAboveChangedWrapper) Q_PROPERTY(bool keepBelow READ keepBelow WRITE setKeepBelow NOTIFY keepBelowChangedWrapper) - // TODO: maximize mode + Q_PROPERTY(bool maximized READ isMaximized NOTIFY maximizeChanged) Q_PROPERTY(bool providesContextHelp READ providesContextHelp) Q_PROPERTY(QRect transparentRect READ transparentRect) Q_PROPERTY(int width READ width) @@ -105,6 +105,7 @@ public: virtual void reset(long unsigned int changed); QString leftButtons() const; QString rightButtons() const; + bool isMaximized() const; Q_SIGNALS: void activeChanged(); diff --git a/clients/aurorae/src/qml/AuroraeButton.qml b/clients/aurorae/src/qml/AuroraeButton.qml index 190d4b12b9..cba1a7d447 100644 --- a/clients/aurorae/src/qml/AuroraeButton.qml +++ b/clients/aurorae/src/qml/AuroraeButton.qml @@ -65,6 +65,9 @@ DecorationButton { case "A": // maximize return auroraeTheme.maximizeButtonPath; + case "R": + // maximize + return auroraeTheme.restoreButtonPath; case "X": // close return auroraeTheme.closeButtonPath; @@ -190,6 +193,9 @@ DecorationButton { } else { visible = buttonSvg.imagePath != ""; } + if (buttonType == "R") { + visible = decoration.maximized; + } } onHoveredChanged: { if (state == "active-pressed" || state == "inactive-pressed") { @@ -325,5 +331,22 @@ DecorationButton { state = "active"; } } + onMaximizedChanged: { + if (buttonType != "A" && buttonType != "R") { + return; + } + if (auroraeTheme.restoreButtonPath != "") { + if (buttonType == "A") { + visible = !decoration.maximized; + } else if (buttonType == "R") { + visible = decoration.maximized; + } + if (!decoration.active && buttonSvg.supportsInactive) { + state = "inactive"; + } else { + state = "active"; + } + } + } } } diff --git a/clients/aurorae/src/qml/AuroraeButtonGroup.qml b/clients/aurorae/src/qml/AuroraeButtonGroup.qml index ee92139d8b..50751a2aff 100644 --- a/clients/aurorae/src/qml/AuroraeButtonGroup.qml +++ b/clients/aurorae/src/qml/AuroraeButtonGroup.qml @@ -32,6 +32,9 @@ Item { groupRow, "menuButton" + buttons + i); } else { component.createObject(groupRow, {buttonType: buttons.charAt(i)}); + if (buttons.charAt(i) == "A") { + component.createObject(groupRow, {buttonType: "R"}); + } } } } diff --git a/clients/aurorae/src/qml/DecorationButton.qml b/clients/aurorae/src/qml/DecorationButton.qml index f857986f83..d61dcc9f4f 100644 --- a/clients/aurorae/src/qml/DecorationButton.qml +++ b/clients/aurorae/src/qml/DecorationButton.qml @@ -27,6 +27,7 @@ Item { case "X": return decoration.closeable; case "A": + case "R": return decoration.maximizeable; case "I": return decoration.minimizeable; @@ -43,6 +44,7 @@ Item { case "M": return Qt.LeftButton | Qt.RightButton; case "A": + case "R": return Qt.LeftButton | Qt.RightButton | Qt.MiddleButton; default: return Qt.LeftButton; @@ -73,8 +75,9 @@ Item { decoration.minimize(); break; case "A": + case "R": // maximize - decoration.maximize(mouse.buttons); + decoration.maximize(mouse.button); break; case "X": // close