diff --git a/scripts/desktopchangeosd/contents/ui/main.qml b/scripts/desktopchangeosd/contents/ui/main.qml
index c93896ccbf..8ab4863acb 100644
--- a/scripts/desktopchangeosd/contents/ui/main.qml
+++ b/scripts/desktopchangeosd/contents/ui/main.qml
@@ -18,283 +18,20 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
*********************************************************************/
import QtQuick 1.1;
-import org.kde.plasma.core 0.1 as PlasmaCore;
-import org.kde.plasma.components 0.1 as Plasma;
-import org.kde.qtextracomponents 0.1 as QtExtra;
-import org.kde.kwin 0.1;
Item {
id: root
- property int screenWidth: 0
- property int screenHeight: 0
- // we count desktops starting from 0 to have it better match the layout in the Grid
- property int currentDesktop: 0
- property int previousDesktop: 0
- property int animationDuration: 1000
- property bool showGrid: true
- function loadConfig() {
- root.animationDuration = readConfig("PopupHideDelay", 1000);
- if (readConfig("TextOnly", "false") == "true") {
- root.showGrid = false;
- } else {
- root.showGrid = true;
- }
- }
- Component.onCompleted: {
- var screen = workspace.clientArea(KWin.FullScreenArea, workspace.activeScreen, workspace.currentDesktop);
- root.screenWidth = screen.width;
- root.screenHeight = screen.height;
- loadConfig();
- }
- PlasmaCore.Dialog {
- id: dialog
- visible: false
- windowFlags: Qt.X11BypassWindowManagerHint
-
- mainItem: Item {
- id: dialogItem
- width: root.showGrid ? view.itemWidth * view.columns : textElement.width
- height: root.showGrid ? view.itemHeight * view.rows + textElement.height : textElement.height
- Plasma.Label {
- id: textElement
- anchors.top: root.showGrid ? parent.top : undefined
- anchors.horizontalCenter: parent.horizontalCenter
- text: workspace.desktopName(workspace.currentDesktop)
- }
- Grid {
- id: view
- columns: 1
- rows: 1
- property int itemWidth: root.screenWidth * Math.min(0.8/columns, 0.1)
- property int itemHeight: Math.min(itemWidth * (root.screenHeight / root.screenWidth), root.screenHeight * Math.min(0.8/rows, 0.1))
- anchors {
- top: textElement.bottom
- left: parent.left
- right: parent.right
- bottom: parent.bottom
- }
- visible: root.showGrid
- Repeater {
- id: repeater
- model: workspace.desktops
- Item {
- width: view.itemWidth
- height: view.itemHeight
- PlasmaCore.FrameSvgItem {
- anchors.fill: parent
- imagePath: "widgets/pager"
- prefix: "normal"
- }
- PlasmaCore.FrameSvgItem {
- id: activeElement
- anchors.fill: parent
- imagePath: "widgets/pager"
- prefix: "active"
- opacity: 0.0
- Behavior on opacity {
- NumberAnimation { duration: root.animationDuration/2 }
- }
- }
- Item {
- id: arrowsContainer
- anchors.fill: parent
- QtExtra.QIconItem {
- anchors.fill: parent
- icon: "go-up"
- visible: false
- }
- QtExtra.QIconItem {
- anchors.fill: parent
- icon: "go-down"
- visible: {
- if (root.currentDesktop <= index) {
- // don't show for target desktop
- return false;
- }
- if (index < root.previousDesktop) {
- return false;
- }
- if (root.currentDesktop < root.previousDesktop) {
- // we only go down if the new desktop is higher
- return false;
- }
- if (Math.floor(root.currentDesktop/view.columns) == Math.floor(index/view.columns)) {
- // don't show icons in same row as target desktop
- return false;
- }
- if (root.previousDesktop % view.columns == index % view.columns) {
- // show arrows for icons in same column as the previous desktop
- return true;
- }
- return false;
- }
- }
- QtExtra.QIconItem {
- anchors.fill: parent
- icon: "go-up"
- visible: {
- if (root.currentDesktop >= index) {
- // don't show for target desktop
- return false;
- }
- if (index > root.previousDesktop) {
- return false;
- }
- if (root.currentDesktop > root.previousDesktop) {
- // we only go down if the new desktop is higher
- return false;
- }
- if (Math.floor(root.currentDesktop/view.columns) == Math.floor(index/view.columns)) {
- // don't show icons in same row as target desktop
- return false;
- }
- if (root.previousDesktop % view.columns == index % view.columns) {
- // show arrows for icons in same column as the previous desktop
- return true;
- }
- return false;
- }
- }
- QtExtra.QIconItem {
- anchors.fill: parent
- icon: "go-next"
- visible: {
- if (root.currentDesktop <= index) {
- // we don't show for desktops not on the path
- return false;
- }
- if (index < root.previousDesktop) {
- // we might have to show this icon in case we go up and to the right
- if (Math.floor(root.currentDesktop/view.columns) == Math.floor(index/view.columns)) {
- // can only happen in same row
- if (index % view.columns >= root.previousDesktop % view.columns) {
- // but only for items in the same column or after of the previous desktop
- return true;
- }
- }
- return false;
- }
- if (root.currentDesktop < root.previousDesktop) {
- // we only go right if the new desktop is higher
- return false;
- }
- if (Math.floor(root.currentDesktop/view.columns) == Math.floor(index/view.columns)) {
- // show icons in same row as target desktop
- if (index % view.columns < root.previousDesktop % view.columns) {
- // but only for items in the same column or after of the previous desktop
- return false;
- }
- return true;
- }
- return false;
- }
- }
- QtExtra.QIconItem {
- anchors.fill: parent
- icon: "go-previous"
- visible: {
- if (root.currentDesktop >= index) {
- // we don't show for desktops not on the path
- return false;
- }
- if (index > root.previousDesktop) {
- // we might have to show this icon in case we go down and to the left
- if (Math.floor(root.currentDesktop/view.columns) == Math.floor(index/view.columns)) {
- // can only happen in same row
- if (index % view.columns <= root.previousDesktop % view.columns) {
- // but only for items in the same column or before the previous desktop
- return true;
- }
- }
- return false;
- }
- if (root.currentDesktop > root.previousDesktop) {
- // we only go left if the new desktop is lower
- return false;
- }
- if (Math.floor(root.currentDesktop/view.columns) == Math.floor(index/view.columns)) {
- // show icons in same row as target desktop
- if (index % view.columns > root.previousDesktop % view.columns) {
- // but only for items in the same column or before of the previous desktop
- return false;
- }
- return true;
- }
- return false;
- }
- }
- }
- states: [
- State {
- name: "NORMAL"
- when: index != root.currentDesktop
- PropertyChanges {
- target: activeElement
- opacity: 0.0
- }
- },
- State {
- name: "SELECTED"
- when: index == root.currentDesktop
- PropertyChanges {
- target: activeElement
- opacity: 1.0
- }
- }
- ]
- Component.onCompleted: {
- view.state = (index == root.currentDesktop) ? "SELECTED" : "NORMAL"
- }
- }
- }
- Component.onCompleted: {
- columns = workspace.desktopGridWidth;
- rows = workspace.desktopGridHeight;
- }
- }
- }
- }
-
- Timer {
- id: timer
- repeat: false
- interval: root.animationDuration
- onTriggered: dialog.visible = false
+ Loader {
+ id: mainItemLoader
}
Connections {
target: workspace
onCurrentDesktopChanged: {
- if (root.currentDesktop == workspace.currentDesktop - 1) {
- return;
+ if (!mainItemLoader.item) {
+ mainItemLoader.source = "osd.qml";
}
- dialog.visible = true;
- root.previousDesktop = root.currentDesktop;
- timer.stop();
- root.currentDesktop = workspace.currentDesktop - 1;
- textElement.text = workspace.desktopName(workspace.currentDesktop);
- // screen geometry might have changed
- var screen = workspace.clientArea(KWin.FullScreenArea, workspace.activeScreen, workspace.currentDesktop);
- root.screenWidth = screen.width;
- root.screenHeight = screen.height;
- if (root.showGrid) {
- // non dependable properties might have changed
- view.columns = workspace.desktopGridWidth;
- view.rows = workspace.desktopGridHeight;
- }
- // position might have changed
- dialog.x = screen.x + screen.width/2 - dialogItem.width/2;
- dialog.y = screen.y + screen.height/2 - dialogItem.height/2;
- // start the hide timer
- timer.start();
}
- onNumberDesktopsChanged: {
- repeater.model = workspace.desktops;
- }
- }
- Connections {
- target: options
- onConfigChanged: root.loadConfig()
}
}
diff --git a/scripts/desktopchangeosd/contents/ui/osd.qml b/scripts/desktopchangeosd/contents/ui/osd.qml
new file mode 100644
index 0000000000..af49d45a30
--- /dev/null
+++ b/scripts/desktopchangeosd/contents/ui/osd.qml
@@ -0,0 +1,297 @@
+/********************************************************************
+ KWin - the KDE window manager
+ This file is part of the KDE project.
+
+Copyright (C) 2012, 2013 Martin Gräßlin
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*********************************************************************/
+import QtQuick 1.1;
+import org.kde.plasma.core 0.1 as PlasmaCore;
+import org.kde.plasma.components 0.1 as Plasma;
+import org.kde.qtextracomponents 0.1 as QtExtra;
+import org.kde.kwin 0.1;
+
+PlasmaCore.Dialog {
+ id: dialog
+ visible: false
+ windowFlags: Qt.X11BypassWindowManagerHint
+
+ mainItem: Item {
+ function loadConfig() {
+ dialogItem.animationDuration = readConfig("PopupHideDelay", 1000);
+ if (readConfig("TextOnly", "false") == "true") {
+ dialogItem.showGrid = false;
+ } else {
+ dialogItem.showGrid = true;
+ }
+ }
+
+ function show() {
+ if (dialogItem.currentDesktop == workspace.currentDesktop - 1) {
+ return;
+ }
+ dialog.visible = true;
+ dialogItem.previousDesktop = dialogItem.currentDesktop;
+ timer.stop();
+ dialogItem.currentDesktop = workspace.currentDesktop - 1;
+ textElement.text = workspace.desktopName(workspace.currentDesktop);
+ // screen geometry might have changed
+ var screen = workspace.clientArea(KWin.FullScreenArea, workspace.activeScreen, workspace.currentDesktop);
+ dialogItem.screenWidth = screen.width;
+ dialogItem.screenHeight = screen.height;
+ if (dialogItem.showGrid) {
+ // non dependable properties might have changed
+ view.columns = workspace.desktopGridWidth;
+ view.rows = workspace.desktopGridHeight;
+ }
+ // position might have changed
+ dialog.x = screen.x + screen.width/2 - dialogItem.width/2;
+ dialog.y = screen.y + screen.height/2 - dialogItem.height/2;
+ // start the hide timer
+ timer.start();
+ }
+
+ id: dialogItem
+ property int screenWidth: 0
+ property int screenHeight: 0
+ // we count desktops starting from 0 to have it better match the layout in the Grid
+ property int currentDesktop: 0
+ property int previousDesktop: 0
+ property int animationDuration: 1000
+ property bool showGrid: true
+
+ width: dialogItem.showGrid ? view.itemWidth * view.columns : textElement.width
+ height: dialogItem.showGrid ? view.itemHeight * view.rows + textElement.height : textElement.height
+
+ Plasma.Label {
+ id: textElement
+ anchors.top: dialogItem.showGrid ? parent.top : undefined
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: workspace.desktopName(workspace.currentDesktop)
+ }
+ Grid {
+ id: view
+ columns: 1
+ rows: 1
+ property int itemWidth: dialogItem.screenWidth * Math.min(0.8/columns, 0.1)
+ property int itemHeight: Math.min(itemWidth * (dialogItem.screenHeight / dialogItem.screenWidth), dialogItem.screenHeight * Math.min(0.8/rows, 0.1))
+ anchors {
+ top: textElement.bottom
+ left: parent.left
+ right: parent.right
+ bottom: parent.bottom
+ }
+ visible: dialogItem.showGrid
+ Repeater {
+ id: repeater
+ model: workspace.desktops
+ Item {
+ width: view.itemWidth
+ height: view.itemHeight
+ PlasmaCore.FrameSvgItem {
+ anchors.fill: parent
+ imagePath: "widgets/pager"
+ prefix: "normal"
+ }
+ PlasmaCore.FrameSvgItem {
+ id: activeElement
+ anchors.fill: parent
+ imagePath: "widgets/pager"
+ prefix: "active"
+ opacity: 0.0
+ Behavior on opacity {
+ NumberAnimation { duration: dialogItem.animationDuration/2 }
+ }
+ }
+ Item {
+ id: arrowsContainer
+ anchors.fill: parent
+ QtExtra.QIconItem {
+ anchors.fill: parent
+ icon: "go-up"
+ visible: false
+ }
+ QtExtra.QIconItem {
+ anchors.fill: parent
+ icon: "go-down"
+ visible: {
+ if (dialogItem.currentDesktop <= index) {
+ // don't show for target desktop
+ return false;
+ }
+ if (index < dialogItem.previousDesktop) {
+ return false;
+ }
+ if (dialogItem.currentDesktop < dialogItem.previousDesktop) {
+ // we only go down if the new desktop is higher
+ return false;
+ }
+ if (Math.floor(dialogItem.currentDesktop/view.columns) == Math.floor(index/view.columns)) {
+ // don't show icons in same row as target desktop
+ return false;
+ }
+ if (dialogItem.previousDesktop % view.columns == index % view.columns) {
+ // show arrows for icons in same column as the previous desktop
+ return true;
+ }
+ return false;
+ }
+ }
+ QtExtra.QIconItem {
+ anchors.fill: parent
+ icon: "go-up"
+ visible: {
+ if (dialogItem.currentDesktop >= index) {
+ // don't show for target desktop
+ return false;
+ }
+ if (index > dialogItem.previousDesktop) {
+ return false;
+ }
+ if (dialogItem.currentDesktop > dialogItem.previousDesktop) {
+ // we only go down if the new desktop is higher
+ return false;
+ }
+ if (Math.floor(dialogItem.currentDesktop/view.columns) == Math.floor(index/view.columns)) {
+ // don't show icons in same row as target desktop
+ return false;
+ }
+ if (dialogItem.previousDesktop % view.columns == index % view.columns) {
+ // show arrows for icons in same column as the previous desktop
+ return true;
+ }
+ return false;
+ }
+ }
+ QtExtra.QIconItem {
+ anchors.fill: parent
+ icon: "go-next"
+ visible: {
+ if (dialogItem.currentDesktop <= index) {
+ // we don't show for desktops not on the path
+ return false;
+ }
+ if (index < dialogItem.previousDesktop) {
+ // we might have to show this icon in case we go up and to the right
+ if (Math.floor(dialogItem.currentDesktop/view.columns) == Math.floor(index/view.columns)) {
+ // can only happen in same row
+ if (index % view.columns >= dialogItem.previousDesktop % view.columns) {
+ // but only for items in the same column or after of the previous desktop
+ return true;
+ }
+ }
+ return false;
+ }
+ if (dialogItem.currentDesktop < dialogItem.previousDesktop) {
+ // we only go right if the new desktop is higher
+ return false;
+ }
+ if (Math.floor(dialogItem.currentDesktop/view.columns) == Math.floor(index/view.columns)) {
+ // show icons in same row as target desktop
+ if (index % view.columns < dialogItem.previousDesktop % view.columns) {
+ // but only for items in the same column or after of the previous desktop
+ return false;
+ }
+ return true;
+ }
+ return false;
+ }
+ }
+ QtExtra.QIconItem {
+ anchors.fill: parent
+ icon: "go-previous"
+ visible: {
+ if (dialogItem.currentDesktop >= index) {
+ // we don't show for desktops not on the path
+ return false;
+ }
+ if (index > dialogItem.previousDesktop) {
+ // we might have to show this icon in case we go down and to the left
+ if (Math.floor(dialogItem.currentDesktop/view.columns) == Math.floor(index/view.columns)) {
+ // can only happen in same row
+ if (index % view.columns <= dialogItem.previousDesktop % view.columns) {
+ // but only for items in the same column or before the previous desktop
+ return true;
+ }
+ }
+ return false;
+ }
+ if (dialogItem.currentDesktop > dialogItem.previousDesktop) {
+ // we only go left if the new desktop is lower
+ return false;
+ }
+ if (Math.floor(dialogItem.currentDesktop/view.columns) == Math.floor(index/view.columns)) {
+ // show icons in same row as target desktop
+ if (index % view.columns > dialogItem.previousDesktop % view.columns) {
+ // but only for items in the same column or before of the previous desktop
+ return false;
+ }
+ return true;
+ }
+ return false;
+ }
+ }
+ }
+ states: [
+ State {
+ name: "NORMAL"
+ when: index != dialogItem.currentDesktop
+ PropertyChanges {
+ target: activeElement
+ opacity: 0.0
+ }
+ },
+ State {
+ name: "SELECTED"
+ when: index == dialogItem.currentDesktop
+ PropertyChanges {
+ target: activeElement
+ opacity: 1.0
+ }
+ }
+ ]
+ Component.onCompleted: {
+ view.state = (index == dialogItem.currentDesktop) ? "SELECTED" : "NORMAL"
+ }
+ }
+ }
+ }
+
+ Timer {
+ id: timer
+ repeat: false
+ interval: dialogItem.animationDuration
+ onTriggered: dialog.visible = false
+ }
+
+ Connections {
+ target: workspace
+ onCurrentDesktopChanged: dialogItem.show()
+ onNumberDesktopsChanged: {
+ repeater.model = workspace.desktops;
+ }
+ }
+ Connections {
+ target: options
+ onConfigChanged: dialogItem.loadConfig()
+ }
+ Component.onCompleted: {
+ columns = workspace.desktopGridWidth;
+ rows = workspace.desktopGridHeight;
+ dialogItem.loadConfig();
+ dialogItem.show();
+ }
+ }
+}