diff --git a/assets/translations/en.json b/assets/translations/en.json index 7dab837c63..367df63734 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -3087,7 +3087,8 @@ "minimal": { "description": "Show workspace id or name labels only, without animated pills", "label": "Minimal Style", - "workspaces-description": "Text-only workspace labels without pill backgrounds or slide animation" + "workspaces-description": "Text-only workspace labels without pill backgrounds or slide animation", + "taskbar-description": "Text-only workspace labels without colored disc backgrounds" }, "mirrored": { "description": "Mirror the visualizer around its center", diff --git a/src/shell/bar/widget_factory.cpp b/src/shell/bar/widget_factory.cpp index e90ce8010c..1b6f9ac445 100644 --- a/src/shell/bar/widget_factory.cpp +++ b/src/shell/bar/widget_factory.cpp @@ -533,6 +533,7 @@ std::unique_ptr WidgetFactory::create( .hideEmptyWorkspaces = wc != nullptr ? wc->getBool("hide_empty_workspaces", false) : false, .workspaceGroupCapsule = wc != nullptr ? wc->getBool("workspace_group_capsule", true) : true, .focusedOutputOnly = wc != nullptr ? wc->getBool("focused_output_only", false) : false, + .minimal = wc != nullptr ? wc->getBool("minimal", false) : false, .groupSingleIconPerApp = wc != nullptr ? wc->getBool("group_single_icon_per_app", false) : false, .showActiveIndicator = wc != nullptr ? wc->getBool("show_active_indicator", true) : true, .activeOpacity = wc != nullptr ? static_cast(wc->getDouble("active_opacity", 1.0)) : 1.0f, diff --git a/src/shell/bar/widgets/taskbar_widget.cpp b/src/shell/bar/widgets/taskbar_widget.cpp index 0e06ca1243..493f34b38d 100644 --- a/src/shell/bar/widgets/taskbar_widget.cpp +++ b/src/shell/bar/widgets/taskbar_widget.cpp @@ -166,11 +166,12 @@ TaskbarWidget::TaskbarWidget( ) : m_platform(platform), m_configService(config), m_output(output), m_configOptions(std::move(options)), m_showAllOutputs(m_configOptions.showAllOutputs), m_focusedOutputOnly(m_configOptions.focusedOutputOnly), - m_showActiveIndicator(m_configOptions.showActiveIndicator), m_activeOpacity(m_configOptions.activeOpacity), - m_inactiveOpacity(m_configOptions.inactiveOpacity), m_focusedColor(m_configOptions.focusedColor), - m_occupiedColor(m_configOptions.occupiedColor), m_emptyColor(m_configOptions.emptyColor), - m_windowTitleMaxWidth(m_configOptions.windowTitleMaxWidth), m_taskbarMaxWidth(m_configOptions.taskbarMaxWidth), - m_barPosition(std::move(m_configOptions.barPosition)), m_shadowConfig(m_configOptions.shadowConfig) { + m_minimal(m_configOptions.minimal), m_showActiveIndicator(m_configOptions.showActiveIndicator), + m_activeOpacity(m_configOptions.activeOpacity), m_inactiveOpacity(m_configOptions.inactiveOpacity), + m_focusedColor(m_configOptions.focusedColor), m_occupiedColor(m_configOptions.occupiedColor), + m_emptyColor(m_configOptions.emptyColor), m_windowTitleMaxWidth(m_configOptions.windowTitleMaxWidth), + m_taskbarMaxWidth(m_configOptions.taskbarMaxWidth), m_barPosition(std::move(m_configOptions.barPosition)), + m_shadowConfig(m_configOptions.shadowConfig) { syncWorkspaceGroupingCapability(); buildDesktopIconIndex(); } @@ -607,7 +608,7 @@ void TaskbarWidget::buildTaskButtons(Renderer& renderer) { const auto styleWorkspaceDisc = [this](Box& badge, float width, float height, const Workspace& workspace) { badge.setFrameSize(width, height); badge.setRadius(resolvedBarCapsuleRadius(width, height)); - badge.setFill(workspaceFillColor(workspace)); + badge.setFill(m_minimal ? clearColorSpec() : workspaceFillColor(workspace)); badge.clearBorder(); }; @@ -647,7 +648,7 @@ void TaskbarWidget::buildTaskButtons(Renderer& renderer) { .fontSize = badgeFontSize, .fontWeight = fontWeight, .fontFamily = fontFamily, - .color = workspaceTextColor(ws.workspace), + .color = m_minimal ? workspaceFillColor(ws.workspace) : workspaceTextColor(ws.workspace), }); badgeText->measure(renderer); badgeText->setPosition( @@ -693,7 +694,7 @@ void TaskbarWidget::buildTaskButtons(Renderer& renderer) { .fontSize = badgeFontSize, .fontWeight = fontWeight, .fontFamily = fontFamily, - .color = workspaceTextColor(ws.workspace), + .color = m_minimal ? workspaceFillColor(ws.workspace) : workspaceTextColor(ws.workspace), }); badgeText->measure(renderer); badgeText->setPosition( diff --git a/src/shell/bar/widgets/taskbar_widget.h b/src/shell/bar/widgets/taskbar_widget.h index 1864778ce3..98cc461326 100644 --- a/src/shell/bar/widgets/taskbar_widget.h +++ b/src/shell/bar/widgets/taskbar_widget.h @@ -35,6 +35,7 @@ struct TaskbarWidgetOptions { bool hideEmptyWorkspaces = false; bool workspaceGroupCapsule = true; bool focusedOutputOnly = false; + bool minimal = false; bool groupSingleIconPerApp = false; bool showActiveIndicator = true; float activeOpacity = 1.0f; @@ -131,6 +132,7 @@ class TaskbarWidget : public Widget { bool m_focusedOutputOnly = false; bool m_wasFocusedOutput = true; bool m_activeUsesFocusedColor = true; + bool m_minimal = false; bool m_groupSingleIconPerApp = false; bool m_showActiveIndicator = true; float m_activeOpacity = 1.0f; diff --git a/src/shell/settings/widget_settings_registry.cpp b/src/shell/settings/widget_settings_registry.cpp index 8280924b73..c665930bb4 100644 --- a/src/shell/settings/widget_settings_registry.cpp +++ b/src/shell/settings/widget_settings_registry.cpp @@ -851,6 +851,11 @@ namespace settings { focusedOutputOnly.visibleWhen = WidgetSettingVisibility{WidgetSettingVisibilityCondition{"show_workspace_label", {"true"}}}; add(std::move(focusedOutputOnly)); + auto minimal = boolSpec("minimal", false); + minimal.descriptionKey = "settings.widgets.settings.minimal.taskbar-description"; + minimal.visibleWhen = + WidgetSettingVisibility{WidgetSettingVisibilityCondition{"show_workspace_label", {"true"}}}; + add(std::move(minimal)); } { auto singleIconPerApp = boolSpec("group_single_icon_per_app", false);