diff --git a/containments/taskpanel/package/contents/ui/Button.qml b/containments/taskpanel/package/contents/ui/Button.qml index c1bb8ac0..c4ea9952 100644 --- a/containments/taskpanel/package/contents/ui/Button.qml +++ b/containments/taskpanel/package/contents/ui/Button.qml @@ -33,8 +33,8 @@ MouseArea { property bool checkable Rectangle { anchors.fill: parent - visible: button.checked - opacity: 0.05 + visible: button.pressed + opacity: 0.1 } PlasmaCore.IconItem { id: icon diff --git a/containments/taskpanel/package/contents/ui/TaskSwitcher.qml b/containments/taskpanel/package/contents/ui/TaskSwitcher.qml index 27b34141..ad172bd5 100644 --- a/containments/taskpanel/package/contents/ui/TaskSwitcher.qml +++ b/containments/taskpanel/package/contents/ui/TaskSwitcher.qml @@ -75,9 +75,11 @@ FullScreenPanel { plasmoid.nativeInterface.windowModel.requestToggleMinimized(filteredWindowModel.mapRowToSource(i)); } } - return; + if (id >= 0) { plasmoid.nativeInterface.windowModel.requestActivate(filteredWindowModel.mapRowToSource(id)); + } else { + plasmoid.nativeInterface.forgetActiveWindow(); } currentTaskIndex = id; } @@ -205,8 +207,8 @@ FullScreenPanel { } iconSource: "go-home" onClicked: { - setSingleActiveWindow(-1); window.hide(); + setSingleActiveWindow(-1); } } Component.onCompleted: plasmoid.nativeInterface.panel = window; diff --git a/containments/taskpanel/package/contents/ui/main.qml b/containments/taskpanel/package/contents/ui/main.qml index 12a77355..f493751f 100644 --- a/containments/taskpanel/package/contents/ui/main.qml +++ b/containments/taskpanel/package/contents/ui/main.qml @@ -98,22 +98,11 @@ PlasmaCore.ColorScope { width: parent.width/3 anchors.horizontalCenter: parent.horizontalCenter iconSource: "go-home" - checkable: true - onCheckedChanged: { - if (checked) { - root.taskSwitcher.setSingleActiveWindow(-1); - } else { - root.taskSwitcher.setSingleActiveWindow(Math.max(0, root.taskSwitcher.currentTaskIndex)); - } + onClicked: { + root.taskSwitcher.setSingleActiveWindow(-1); } onPositionChanged: mainMouseArea.positionChanged(mouse); onReleased: mainMouseArea.released(mouse); - Connections { - target: root.taskSwitcher - onCurrentTaskIndexChanged: { - showDesktopButton.checked = root.taskSwitcher.currentTaskIndex < 0 - } - } } Button { diff --git a/containments/taskpanel/taskpanel.cpp b/containments/taskpanel/taskpanel.cpp index 00ea6fcd..22c2f905 100644 --- a/containments/taskpanel/taskpanel.cpp +++ b/containments/taskpanel/taskpanel.cpp @@ -148,10 +148,14 @@ void TaskPanel::updateActiveWindow() } if (m_activeWindow) { disconnect(m_activeWindow, &KWayland::Client::PlasmaWindow::closeableChanged, this, &TaskPanel::hasCloseableActiveWindowChanged); + disconnect(m_activeWindow, &KWayland::Client::PlasmaWindow::unmapped, + this, &TaskPanel::forgetActiveWindow); } m_activeWindow = m_windowManagement->activeWindow(); connect(m_activeWindow, &KWayland::Client::PlasmaWindow::closeableChanged, this, &TaskPanel::hasCloseableActiveWindowChanged); + connect(m_activeWindow, &KWayland::Client::PlasmaWindow::unmapped, + this, &TaskPanel::forgetActiveWindow); // TODO: connect to closeableChanged, not needed right now as KWin doesn't provide this changeable emit hasCloseableActiveWindowChanged(); @@ -159,14 +163,25 @@ void TaskPanel::updateActiveWindow() bool TaskPanel::hasCloseableActiveWindow() const { - return m_activeWindow && m_activeWindow->isCloseable(); + return m_activeWindow && m_activeWindow->isCloseable() && !m_activeWindow->isMinimized(); +} + +void TaskPanel::forgetActiveWindow() +{ + if (m_activeWindow) { + disconnect(m_activeWindow, &KWayland::Client::PlasmaWindow::closeableChanged, this, &TaskPanel::hasCloseableActiveWindowChanged); + disconnect(m_activeWindow, &KWayland::Client::PlasmaWindow::unmapped, + this, &TaskPanel::forgetActiveWindow); + } + m_activeWindow.clear(); + emit hasCloseableActiveWindowChanged(); } void TaskPanel::closeActiveWindow() { if (m_activeWindow) { m_activeWindow->requestClose(); - } + } } void TaskPanel::setTaskGeometry(int row, int x, int y, int width, int height) diff --git a/containments/taskpanel/taskpanel.h b/containments/taskpanel/taskpanel.h index 10a57706..0ee5e69a 100644 --- a/containments/taskpanel/taskpanel.h +++ b/containments/taskpanel/taskpanel.h @@ -66,6 +66,9 @@ public: Q_INVOKABLE void setTaskGeometry(int row, int x, int y, int width, int height); +public Q_SLOTS: + void forgetActiveWindow(); + Q_SIGNALS: void windowModelChanged(); void showingDesktopChanged(bool);