Commit 1e3cf9e1 authored by Martin Flöser's avatar Martin Flöser
Browse files

Fix layout issues of Desktop Change OSD

* no more binding loops - yeah for anchoring
* properly update sizes when switching screens
* properly handle case layout indicator enabled/disabled
* connect to desktop changed and reset desktop model
* set a maximum width/height of 0.8 of screen

Most interesting change is the moving of
visible = true;
to the beginning of the block which updates the layout. Without that
all the changes are ignored resulting in the incorrect size on screen
change.

The disadvantage of that is that the OSD is shown before the layout is
adjusted. But it's considerable minor given that it should be just one
frame.

BUG: 312728
BUG: 312727
BUG: 305737
FIXED-IN: 4.10.1
REVIEW: 108945
parent df22c649
...@@ -54,8 +54,8 @@ Item { ...@@ -54,8 +54,8 @@ Item {
mainItem: Item { mainItem: Item {
id: dialogItem id: dialogItem
width: childrenRect.width width: root.showGrid ? view.itemWidth * view.columns : textElement.width
height: childrenRect.height height: root.showGrid ? view.itemHeight * view.rows + textElement.height : textElement.height
Plasma.Label { Plasma.Label {
id: textElement id: textElement
anchors.top: root.showGrid ? parent.top : undefined anchors.top: root.showGrid ? parent.top : undefined
...@@ -64,11 +64,19 @@ Item { ...@@ -64,11 +64,19 @@ Item {
} }
Grid { Grid {
id: view id: view
property int itemWidth: root.screenWidth * 0.1 columns: 1
property int itemHeight: root.screenHeight * 0.1 rows: 1
anchors.top: textElement.bottom 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 visible: root.showGrid
Repeater { Repeater {
id: repeater
model: workspace.desktops model: workspace.desktops
Item { Item {
width: view.itemWidth width: view.itemWidth
...@@ -243,10 +251,6 @@ Item { ...@@ -243,10 +251,6 @@ Item {
Component.onCompleted: { Component.onCompleted: {
columns = workspace.desktopGridWidth; columns = workspace.desktopGridWidth;
rows = workspace.desktopGridHeight; rows = workspace.desktopGridHeight;
if (!root.showGrid) {
width = 0;
height = 0;
}
} }
} }
} }
...@@ -265,6 +269,7 @@ Item { ...@@ -265,6 +269,7 @@ Item {
if (root.currentDesktop == workspace.currentDesktop - 1) { if (root.currentDesktop == workspace.currentDesktop - 1) {
return; return;
} }
dialog.visible = true;
root.previousDesktop = root.currentDesktop; root.previousDesktop = root.currentDesktop;
timer.stop(); timer.stop();
root.currentDesktop = workspace.currentDesktop - 1; root.currentDesktop = workspace.currentDesktop - 1;
...@@ -277,20 +282,15 @@ Item { ...@@ -277,20 +282,15 @@ Item {
// non dependable properties might have changed // non dependable properties might have changed
view.columns = workspace.desktopGridWidth; view.columns = workspace.desktopGridWidth;
view.rows = workspace.desktopGridHeight; view.rows = workspace.desktopGridHeight;
view.width = workspace.desktopGridWidth * view.itemWidth;
view.height = workspace.desktopGridHeight * view.itemHeight;
} else {
view.width = 0;
view.height = 0;
dialogItem.width = textElement.width;
dialogItem.height = textElement.height;
} }
// position might have changed // position might have changed
dialog.x = screen.x + screen.width/2 - dialogItem.width/2; dialog.x = screen.x + screen.width/2 - dialogItem.width/2;
dialog.y = screen.y + screen.height/2 - dialogItem.height/2; dialog.y = screen.y + screen.height/2 - dialogItem.height/2;
// start the hide timer // start the hide timer
timer.start(); timer.start();
dialog.visible = true; }
onNumberDesktopsChanged: {
repeater.model = workspace.desktops;
} }
} }
Connections { Connections {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment