From 0e8a4c0cc1d9e7de563e801cfb80707d9f0a76ef Mon Sep 17 00:00:00 2001 From: bbedward Date: Mon, 3 Aug 2026 20:05:23 -0400 Subject: [PATCH] launcher: dispatch plugin-category items as plugin, not app fixes #2988 port 1.5 (cherry picked from commit 365474b0d911e6e3b4b06a3f0792a59796851149) --- .../Modals/DankLauncherV2/Controller.qml | 30 +++++++++----- quickshell/Services/AppSearchService.qml | 40 +++++++++---------- 2 files changed, 37 insertions(+), 33 deletions(-) diff --git a/quickshell/Modals/DankLauncherV2/Controller.qml b/quickshell/Modals/DankLauncherV2/Controller.qml index 90fe1f767..35d3891df 100644 --- a/quickshell/Modals/DankLauncherV2/Controller.qml +++ b/quickshell/Modals/DankLauncherV2/Controller.qml @@ -819,16 +819,24 @@ Item { } if (isCategoryFiltered) { - var rawApps = AppSearchService.getAppsInCategory(appCategory); - for (var i = 0; i < rawApps.length; i++) { - allItems.push(getOrTransformApp(rawApps[i])); - } - // Also include core apps (DMS Settings etc.) that match this category - var allCoreApps = AppSearchService.getCoreApps(""); - for (var i = 0; i < allCoreApps.length; i++) { - var coreAppCats = AppSearchService.getCategoriesForApp(allCoreApps[i]); - if (coreAppCats.indexOf(appCategory) !== -1) - allItems.push(transformCoreApp(allCoreApps[i])); + var categoryPluginId = AppSearchService.getPluginIdForCategory(appCategory); + if (categoryPluginId) { + var pluginCategoryItems = getPluginItems(categoryPluginId, ""); + for (var i = 0; i < pluginCategoryItems.length; i++) { + allItems.push(pluginCategoryItems[i]); + } + } else { + var rawApps = AppSearchService.getAppsInCategory(appCategory); + for (var i = 0; i < rawApps.length; i++) { + allItems.push(getOrTransformApp(rawApps[i])); + } + // Also include core apps (DMS Settings etc.) that match this category + var allCoreApps = AppSearchService.getCoreApps(""); + for (var i = 0; i < allCoreApps.length; i++) { + var coreAppCats = AppSearchService.getCategoriesForApp(allCoreApps[i]); + if (coreAppCats.indexOf(appCategory) !== -1) + allItems.push(transformCoreApp(allCoreApps[i])); + } } } else { var apps = searchApps(searchQuery); @@ -839,7 +847,7 @@ Item { var scoredItems = Scorer.scoreItems(allItems, searchQuery, getFrecencyForItem); var sortAlpha = !searchQuery && SettingsData.sortAppsAlphabetically; - var newSections = Scorer.groupBySection(scoredItems, sectionDefinitions, sortAlpha, searchQuery ? 50 : 500); + var newSections = Scorer.groupBySection(scoredItems, buildDynamicSectionDefs(allItems), sortAlpha, searchQuery ? 50 : 500); for (var sid in collapsedSections) { for (var i = 0; i < newSections.length; i++) { diff --git a/quickshell/Services/AppSearchService.qml b/quickshell/Services/AppSearchService.qml index 4f066a71d..83cc484ec 100644 --- a/quickshell/Services/AppSearchService.qml +++ b/quickshell/Services/AppSearchService.qml @@ -749,16 +749,24 @@ Singleton { if (category === I18n.tr("All")) return visibleApps; - const pluginItems = getPluginItems(category, ""); - if (pluginItems.length > 0) - return pluginItems; - return visibleApps.filter(app => { const appCategories = getCategoriesForApp(app); return appCategories.includes(category); }); } + function getPluginIdForCategory(category) { + if (typeof PluginService === "undefined") + return null; + + const launchers = PluginService.getLauncherPlugins(); + for (const pluginId in launchers) { + if ((launchers[pluginId].name || pluginId) === category) + return pluginId; + } + return null; + } + // Plugin launcher support functions function getPluginCategories() { if (typeof PluginService === "undefined") { @@ -778,17 +786,11 @@ Singleton { } function getPluginCategoryIcon(category) { - if (typeof PluginService === "undefined") + const pluginId = getPluginIdForCategory(category); + if (!pluginId) return null; - const launchers = PluginService.getLauncherPlugins(); - for (const pluginId in launchers) { - const plugin = launchers[pluginId]; - if ((plugin.name || pluginId) === category) { - return plugin.icon || "extension"; - } - } - return null; + return PluginService.getLauncherPlugins()[pluginId].icon || "extension"; } function getAllPluginItems() { @@ -809,17 +811,11 @@ Singleton { } function getPluginItems(category, query) { - if (typeof PluginService === "undefined") + const pluginId = getPluginIdForCategory(category); + if (!pluginId) return []; - const launchers = PluginService.getLauncherPlugins(); - for (const pluginId in launchers) { - const plugin = launchers[pluginId]; - if ((plugin.name || pluginId) === category) { - return getPluginItemsForPlugin(pluginId, query); - } - } - return []; + return getPluginItemsForPlugin(pluginId, query); } function getPluginItemsForPlugin(pluginId, query) {