Merge pull request #2044 from eric-handley/fix/launcher-performance

Fix launcher opening delay
This commit is contained in:
Lemmy
2026-03-03 19:49:27 -05:00
committed by GitHub
3 changed files with 46 additions and 14 deletions
+9 -1
View File
@@ -72,6 +72,8 @@ Item {
property bool cachedAnimateFromBottom: false
property bool cachedAnimateFromLeft: false
property bool cachedAnimateFromRight: false
readonly property bool animationsDisabled: Settings.data.general.animationDisabled
property bool cachedShouldAnimateWidth: false
property bool cachedShouldAnimateHeight: false
@@ -1312,7 +1314,13 @@ Item {
// Make panel visible, now only the intended dimension will animate
root.isPanelVisible = true;
opacityTrigger.start();
if (root.animationsDisabled) {
// Skip delay when animations are disabled
root.sizeAnimationComplete = true;
} else {
opacityTrigger.start();
}
// Start open watchdog timer
root.openWatchdogActive = true;
+26 -11
View File
@@ -47,7 +47,7 @@ Rectangle {
Timer {
id: mouseTrackingDelayTimer
interval: Style.animationNormal + 50 // Wait for panel animation to complete + safety margin
interval: root.animationsDisabled ? 0 : (Style.animationNormal + 50) // Wait for panel animation to complete + safety margin
repeat: false
onTriggered: {
root.mouseTrackingReady = true;
@@ -57,6 +57,7 @@ Rectangle {
readonly property var defaultProvider: appsProvider
readonly property var currentProvider: activeProvider || defaultProvider
readonly property bool animationsDisabled: Settings.data.general.animationDisabled
readonly property string launcherDensity: (currentProvider && currentProvider.ignoreDensity === false) ? (Settings.data.appLauncher.density || "default") : "comfortable"
readonly property int effectiveIconSize: launcherDensity === "comfortable" ? 48 : (launcherDensity === "default" ? 36 : 24)
@@ -159,20 +160,31 @@ Rectangle {
}
function onOpened() {
resultsReady = false;
ignoreMouseHover = true;
globalMouseInitialized = false;
mouseTrackingReady = false;
mouseTrackingDelayTimer.restart();
syncPluginProviders();
// Show launcher immediately, results will populate asynchronously
resultsReady = true;
focusSearchInput();
Qt.callLater(() => {
for (let provider of providers) {
if (provider.onOpened)
provider.onOpened();
}
syncPluginProviders();
// Call ApplicationsProvider.onOpened() first (sets category)
if (appsProvider.onOpened)
appsProvider.onOpened();
updateResults();
resultsReady = true;
focusSearchInput();
// Defer other provider initialization until after results are shown
Qt.callLater(() => {
for (let provider of providers) {
if (provider !== appsProvider && provider.onOpened)
provider.onOpened();
}
});
});
}
@@ -215,6 +227,7 @@ Rectangle {
function syncPluginProviders() {
var registeredIds = LauncherProviderRegistry.getPluginProviders();
var changed = false;
// Remove providers that are no longer registered
for (var existingId in pluginProviderInstances) {
@@ -225,6 +238,7 @@ Rectangle {
pluginProviderInstances[existingId].destroy();
delete pluginProviderInstances[existingId];
Logger.d("Launcher", "Removed plugin provider:", existingId);
changed = true;
}
}
@@ -243,13 +257,14 @@ Rectangle {
pluginProviderInstances[providerId] = instance;
registerProvider(instance);
Logger.d("Launcher", "Registered plugin provider:", providerId);
changed = true;
}
}
}
}
// Update results if launcher is open
if (root.isOpen) {
// Update results only if providers changed
if (changed && root.isOpen) {
updateResults();
}
}
@@ -63,8 +63,8 @@ Item {
}
function onOpened() {
// Refresh apps when launcher opens
loadApplications();
// Just update available categories in case pinned apps changed
updateAvailableCategories();
// Default to Pinned if there are pinned apps, otherwise all
if (availableCategories.includes("Pinned")) {
selectedCategory = "Pinned";
@@ -75,6 +75,15 @@ Item {
showsCategories = true;
}
// Reload applications when desktop entries change on disk
Connections {
target: typeof DesktopEntries !== 'undefined' ? DesktopEntries.applications : null
function onValuesChanged() {
Logger.d("ApplicationsProvider", "Desktop entries changed, reloading applications");
loadApplications();
}
}
function selectCategory(category) {
selectedCategory = category;
if (launcher) {