From a2ee175609f9ae191742a0ffbccc6dd9e165004a Mon Sep 17 00:00:00 2001 From: moons14 Date: Wed, 5 Aug 2026 04:01:29 +0900 Subject: [PATCH] fix(noctalia): split taskbar overview hook patch --- .../patches/taskbar-overview-hook.patch | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 modules/applications/noctalia/patches/taskbar-overview-hook.patch diff --git a/modules/applications/noctalia/patches/taskbar-overview-hook.patch b/modules/applications/noctalia/patches/taskbar-overview-hook.patch new file mode 100644 index 0000000..7624cc6 --- /dev/null +++ b/modules/applications/noctalia/patches/taskbar-overview-hook.patch @@ -0,0 +1,43 @@ +diff --git a/src/shell/bar/widgets/taskbar_widget.cpp b/src/shell/bar/widgets/taskbar_widget.cpp +--- a/src/shell/bar/widgets/taskbar_widget.cpp ++++ b/src/shell/bar/widgets/taskbar_widget.cpp +@@ -5,6 +5,7 @@ + #include "compositors/workspace_backend.h" + #include "config/config_service.h" + #include "core/deferred_call.h" ++#include "core/process/process.h" + #include "i18n/i18n.h" + #include "render/core/color.h" + #include "render/core/renderer.h" +@@ -36,6 +37,18 @@ + + namespace { + ++ [[nodiscard]] bool launchTaskbarOverview(const std::string& appId) { ++ constexpr const char* command = "noctalia-taskbar-overview"; ++ if (appId.empty() || !process::commandExists(command)) { ++ return false; ++ } ++ return process::runAsync({ ++ command, ++ "--app-id", ++ appId.c_str(), ++ }); ++ } ++ + // Integer centering; optional odd spare pixel on the end side (right/bottom). + [[nodiscard]] float centeredOffset(float extent, float content, float inset = 0.0F, bool oddSpareOnEnd = true) { + const float inner = std::max(0.0F, extent - inset * 2.0F); +@@ -373,6 +386,12 @@ void TaskbarWidget::activateOrLaunchPinned(const TaskModel& task) { + return; + } + ++ const std::string overviewAppId = ++ !task.appId.empty() ? task.appId : (!task.desktopEntryId.empty() ? task.desktopEntryId : task.idLower); ++ if (launchTaskbarOverview(overviewAppId)) { ++ return; ++ } ++ + const std::string cycleKey = !task.desktopEntryId.empty() ? task.desktopEntryId : task.idLower; + std::size_t& cursor = m_groupedAppCycleCursor[cycleKey]; + if (cursor >= windows.size()) {