mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
Merge pull request #2044 from eric-handley/fix/launcher-performance
Fix launcher opening delay
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user