diff --git a/shell/services/AppLibrary.qml b/shell/services/AppLibrary.qml index 35a3a65c..09d51eee 100644 --- a/shell/services/AppLibrary.qml +++ b/shell/services/AppLibrary.qml @@ -150,11 +150,15 @@ Item { try { return ToplevelManager.toplevels.values.length } catch (e) { return 0 } } + // launchOsdOpen tracks whether the OSD is on screen, not which launch put it + // there, so a new launch must not clear it: the OSD is shown with duration 0, + // and only closeLaunchFeedback() takes it down. Dropping the flag here would + // orphan an OSD left over from the previous launch, and the timer restarts + // below discard the timeout that was its last chance to close. function beginLaunchFeedback(name) { root.launchSerial++ root.launchToplevelCount = root.toplevelCount() root.launchActiveToplevel = ToplevelManager.activeToplevel - root.launchOsdOpen = false root.launchOsdMessage = "Launching " + String(name || "application") + "…" launchDelay.restart() launchTimeout.restart() diff --git a/test/shell.d/app-search-test.sh b/test/shell.d/app-search-test.sh index 44c13bc8..99e7678c 100644 --- a/test/shell.d/app-search-test.sh +++ b/test/shell.d/app-search-test.sh @@ -121,6 +121,13 @@ assert( 'app library prefers indexed app icons over ambiguous themed icons' ) +const beginLaunchMatch = appLibraryQml.match(/function beginLaunchFeedback\(name\) \{([\s\S]*?)\n \}/) +assert(beginLaunchMatch, 'app library beginLaunchFeedback function exists') +assert( + !beginLaunchMatch[1].includes('root.launchOsdOpen = false'), + 'app library keeps owning an OSD a previous launch left on screen' +) + const openMatch = menuQml.match(/function openExistingMenu\(initialMenu\) \{([\s\S]*?)\n \}/) assert(openMatch, 'menu openExistingMenu function exists') assert(