a cleaner version of the focus race workaround
commit1e29d2631f02208978a7d5793a59dc81df814b7a
authorLukáš Tinkl <lukas.tinkl@canonical.com>
dateMon 5 Sep 2016, 23:33 (10 years ago)
parentd47a390
qml/Stages/DesktopStage.qml−14
@@ -280,20 +280,6 @@ AbstractStage {
280280 source: root.background
281281 }
282282
283− Timer { // fix a race condition between TopLevelSurfaceRepeater and app (usually dash) starting up; set a focusedAppDelegate
284− running: !appRepeater.startingUp
285− interval: 1
286− onTriggered: {
287− for (var i = 0; i < appRepeater.count; i++) {
288− var appDelegate = appRepeater.itemAt(i);
289− if (appDelegate && appDelegate.focus) {
290− priv.focusedAppDelegate = appDelegate;
291− break;
292− }
293− }
294− }
295− }
296−
297283 TopLevelSurfaceRepeater {
298284 id: appRepeater
299285 model: topLevelSurfaceList
qml/Stages/TabletStage.qml−14
@@ -699,20 +699,6 @@ AbstractStage {
699699 }
700700 }
701701
702− Timer { // fix a race condition between TopLevelSurfaceRepeater and app (usually dash) starting up; set a focusedAppDelegate
703− running: !spreadRepeater.startingUp
704− interval: 1
705− onTriggered: {
706− for (var i = 0; i < spreadRepeater.count; i++) {
707− var appDelegate = spreadRepeater.itemAt(i);
708− if (appDelegate && appDelegate.focus) {
709− priv.focusedAppDelegate = appDelegate;
710− break;
711− }
712− }
713− }
714− }
715−
716702 TopLevelSurfaceRepeater {
717703 id: spreadRepeater
718704 objectName: "spreadRepeater"
qml/Stages/TopLevelSurfaceRepeater.qml+7−1
@@ -27,7 +27,13 @@ Repeater {
2727 if (!startingUp) {
2828 // the top-most surface must be the focused one.
2929 var topmostDelegate = itemAt(0);
30− topmostDelegate.focus = true;
30+ if (topmostDelegate.focus) {
31+ // Delegate got focused while we were still starting up. Not good.
32+ // Force signal handler to run again
33+ topmostDelegate.onFocusChanged(true);
34+ } else {
35+ topmostDelegate.focus = true;
36+ }
3137 }
3238 }
3339
tests/mocks/Cursor/Cursor.qml+1
@@ -18,6 +18,7 @@ import QtQuick 2.4
1818
1919Item {
2020 property int topBoundaryOffset // effectively panel height
21+ property Item confiningItem
2122
2223 signal pushedLeftBoundary(real amount, int buttons)
2324 signal pushedRightBoundary(real amount, int buttons)