diff --git a/containments/taskpanel/package/contents/ui/Task.qml b/containments/taskpanel/package/contents/ui/Task.qml index 84e5a697..61c9c410 100644 --- a/containments/taskpanel/package/contents/ui/Task.qml +++ b/containments/taskpanel/package/contents/ui/Task.qml @@ -32,8 +32,9 @@ Item { //Workaround property bool active: model.IsActive onActiveChanged: { + //sometimes the task switcher window itself appears, screwing up the state if (model.IsActive) { - window.currentTaskIndex = index + // window.currentTaskIndex = index } } @@ -88,8 +89,8 @@ Item { } width: parent.width height: parent.height - radius: units.gridUnit - opacity: 0.8 * (1-Math.abs(x)/width) + radius: units.smallSpacing + opacity: 0.9 * (1-Math.abs(x)/width) PlasmaCore.IconItem { anchors.centerIn: parent width: Math.min(parent.width, parent.height) / 2 diff --git a/containments/taskpanel/package/contents/ui/TaskSwitcher.qml b/containments/taskpanel/package/contents/ui/TaskSwitcher.qml index ad172bd5..26eb0456 100644 --- a/containments/taskpanel/package/contents/ui/TaskSwitcher.qml +++ b/containments/taskpanel/package/contents/ui/TaskSwitcher.qml @@ -36,7 +36,7 @@ FullScreenPanel { property int tasksCount: filteredWindowModel.count property int currentTaskIndex: -1 - color: Qt.rgba(0, 0, 0, 0.6 * Math.min( + color: Qt.rgba(0, 0, 0, 0.8 * Math.min( (Math.min(tasksView.contentY + tasksView.height, tasksView.height) / tasksView.height), ((tasksView.contentHeight - tasksView.contentY - tasksView.headerItem.height - tasksView.footerItem.height)/tasksView.height))) @@ -73,15 +73,12 @@ FullScreenPanel { plasmoid.nativeInterface.windowModel.requestActivate(filteredWindowModel.mapRowToSource(i)); } else if (i != id && !task.IsMinimized) { plasmoid.nativeInterface.windowModel.requestToggleMinimized(filteredWindowModel.mapRowToSource(i)); - } + } } - if (id >= 0) { plasmoid.nativeInterface.windowModel.requestActivate(filteredWindowModel.mapRowToSource(id)); - } else { - plasmoid.nativeInterface.forgetActiveWindow(); + currentTaskIndex = id; } - currentTaskIndex = id; } onOffsetChanged: tasksView.contentY = offset @@ -207,8 +204,9 @@ FullScreenPanel { } iconSource: "go-home" onClicked: { - window.hide(); + currentTaskIndex = -1; setSingleActiveWindow(-1); + window.hide(); } } 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 f493751f..ccbd3d1e 100644 --- a/containments/taskpanel/package/contents/ui/main.qml +++ b/containments/taskpanel/package/contents/ui/main.qml @@ -47,12 +47,22 @@ PlasmaCore.ColorScope { id: mainMouseArea anchors.fill: parent property int oldMouseY: 0 + property int startMouseY: 0 + property bool isDragging: false drag.filterChildren: true - onPressed: { - oldMouseY = mouse.y; + function managePressed(mouse) { + startMouseY = oldMouseY = mouse.y; taskSwitcher.offset = -taskSwitcher.height } + onPressed: managePressed(); onPositionChanged: { + if (!isDragging && Math.abs(startMouseY - oldMouseY) < root.height) { + oldMouseY = mouse.y; + return; + } else { + isDragging = true; + } + taskSwitcher.offset = taskSwitcher.offset - (mouse.y - oldMouseY); oldMouseY = mouse.y; if (taskSwitcher.visibility == Window.Hidden && taskSwitcher.offset > -taskSwitcher.height + units.gridUnit && taskSwitcher.tasksCount) { @@ -61,10 +71,15 @@ PlasmaCore.ColorScope { taskSwitcher.setSingleActiveWindow(-1); } onReleased: { + if (!isDragging) { + return; + } + if (taskSwitcher.visibility == Window.Hidden) { return; } if (taskSwitcher.offset > -taskSwitcher.height/2) { + taskSwitcher.currentTaskIndex = -1 taskSwitcher.show(); } else { taskSwitcher.hide(); @@ -85,9 +100,13 @@ PlasmaCore.ColorScope { anchors.left: parent.left height: parent.height width: parent.width/3 - enabled: taskSwitcher.tasksCount > 0 + enabled: taskSwitcher.tasksCount > 0 && plasmoid.nativeInterface.hasCloseableActiveWindow; iconSource: "window-list" - onClicked: taskSwitcher.visible ? taskSwitcher.hide() : taskSwitcher.show(); + onClicked: { + taskSwitcher.currentTaskIndex = -1; + taskSwitcher.visible ? taskSwitcher.hide() : taskSwitcher.show(); + } + onPressed: mainMouseArea.managePressed(mouse); onPositionChanged: mainMouseArea.positionChanged(mouse); onReleased: mainMouseArea.released(mouse); } @@ -98,11 +117,26 @@ PlasmaCore.ColorScope { width: parent.width/3 anchors.horizontalCenter: parent.horizontalCenter iconSource: "go-home" - onClicked: { - root.taskSwitcher.setSingleActiveWindow(-1); + enabled: taskSwitcher.tasksCount > 0 + checkable: true + onCheckedChanged: { + if (checked) { + root.taskSwitcher.setSingleActiveWindow(-1); + } else { + root.taskSwitcher.setSingleActiveWindow(root.taskSwitcher.currentTaskIndex); + } } + onPressed: mainMouseArea.managePressed(mouse); onPositionChanged: mainMouseArea.positionChanged(mouse); onReleased: mainMouseArea.released(mouse); + Connections { + target: root.taskSwitcher + onCurrentTaskIndexChanged: { + if (root.taskSwitcher.currentTaskIndex < 0) { + showDesktopButton.checked = false; + } + } + } } Button { @@ -112,6 +146,7 @@ PlasmaCore.ColorScope { iconSource: "window-close" enabled: plasmoid.nativeInterface.hasCloseableActiveWindow; onClicked: plasmoid.nativeInterface.closeActiveWindow(); + onPressed: mainMouseArea.managePressed(mouse); onPositionChanged: mainMouseArea.positionChanged(mouse); onReleased: mainMouseArea.released(mouse); }