@@ -25,10 +25,104 @@ UbuntuShape {
2525
2626 backgroundColor: "#F2111111"
2727 width: screensRow.childrenRect.width + units.gu(4)
28+ opacity: d.shown ? 1 : 0
29+ visible: opacity > 0
30+ Behavior on opacity { UbuntuNumberAnimation {} }
2831
2932 property var screensProxy: Screens.createProxy();
3033 property string background
3134
35+ readonly property alias active: d.active
36+
37+ function showLeft() {
38+ show();
39+ d.decreaseHighlight();
40+ }
41+ function showRight() {
42+ show();
43+ d.increaseHighlight();
44+ }
45+
46+ function show() {
47+ hideTimer.stop();
48+ d.altPressed = true;
49+ d.ctrlPressed = true;
50+ d.active = true;
51+ d.shown = true;
52+ focus = true;
53+
54+ d.highlightedScreenIndex = screensProxy.activeScreen;
55+ var activeScreen = screensProxy.get(screensProxy.activeScreen);
56+ d.highlightedWorkspaceIndex = activeScreen.workspaces.indexOf(activeScreen.currentWorkspace)
57+ }
58+
59+ QtObject {
60+ id: d
61+
62+ property bool active: false
63+ property bool shown: false
64+ property bool altPressed: false
65+ property bool ctrlPressed: false
66+
67+ property int highlightedScreenIndex: -1
68+ property int highlightedWorkspaceIndex: -1
69+
70+ function increaseHighlight() {
71+ var screen = screensProxy.get(highlightedScreenIndex);
72+ highlightedWorkspaceIndex++
73+ if (highlightedWorkspaceIndex >= screen.workspaces.count) {
74+ highlightedScreenIndex = (highlightedScreenIndex + 1) % screensProxy.count;
75+ highlightedWorkspaceIndex = 0;
76+ }
77+ }
78+ function decreaseHighlight() {
79+ highlightedWorkspaceIndex--;
80+ if (highlightedWorkspaceIndex < 0) {
81+ highlightedScreenIndex--;
82+ if (highlightedScreenIndex < 0) {
83+ highlightedScreenIndex = screensProxy.count - 1
84+ }
85+ var screen = screensProxy.get(highlightedScreenIndex);
86+ highlightedWorkspaceIndex = screen.workspaces.count -1;
87+ }
88+ }
89+ }
90+
91+ Timer {
92+ id: hideTimer
93+ interval: 1000
94+ onTriggered: d.shown = false;
95+ }
96+
97+ Keys.onPressed: {
98+ hideTimer.restart();
99+ switch (event.key) {
100+ case Qt.Key_Left:
101+ d.decreaseHighlight();
102+ break;
103+ case Qt.Key_Right:
104+ d.increaseHighlight();
105+ break;
106+ }
107+ }
108+ Keys.onReleased: {
109+ switch (event.key) {
110+ case Qt.Key_Alt:
111+ d.altPressed = false;
112+ break;
113+ case Qt.Key_Control:
114+ d.ctrlPressed = false;
115+ break;
116+ }
117+ if (!d.altPressed && !d.ctrlPressed) {
118+ print("starting hidetimer")
119+ d.active = false;
120+ hideTimer.start();
121+ focus = false;
122+ screensProxy.get(d.highlightedScreenIndex).workspaces.get(d.highlightedWorkspaceIndex).activate();
123+ }
124+ }
125+
32126 Row {
33127 id: screensRow
34128 anchors {
@@ -75,6 +169,7 @@ UbuntuShape {
75169 anchors.horizontalCenter: parent.horizontalCenter
76170 screen: model.screen
77171 background: root.background
172+ selectedIndex: d.highlightedScreenIndex == index ? d.highlightedWorkspaceIndex : -1
78173
79174 workspaceModel: model.screen.workspaces
80175 }