From 0d57188da8114689c5c4e6e9ea56beb2ccd9e48d Mon Sep 17 00:00:00 2001 From: tr1x_em Date: Mon, 4 Aug 2025 22:46:17 +0530 Subject: [PATCH] Added Workspace number with icons in dock --- modules/dock.py | 38 ++++++++++++++++++++++++++++++++++---- styles/dock.css | 12 +++++++++++- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/modules/dock.py b/modules/dock.py index 5636aea..b1db6f3 100644 --- a/modules/dock.py +++ b/modules/dock.py @@ -2,6 +2,7 @@ import json import logging import cairo +from fabric.widgets.widget import Widget from gi.repository import Gdk, GLib, Gtk import config.data as data @@ -17,7 +18,9 @@ from fabric.utils.helpers import get_desktop_applications from fabric.widgets.box import Box from fabric.widgets.button import Button from fabric.widgets.eventbox import EventBox +from fabric.widgets.overlay import Overlay from fabric.widgets.image import Image +from fabric.widgets.label import Label from fabric.widgets.revealer import Revealer from modules.corners import MyCorner from utils.icon_resolver import IconResolver @@ -351,8 +354,9 @@ class Dock(Window): self.app_map = {app.name: app for app in self._all_apps if app.name} self.app_identifiers = self._build_app_identifiers_map() - def create_button(self, app_identifier, instances): + def create_button(self, app_identifier, instances, workspace: str): desktop_app = self.find_app(app_identifier) + # print("Creating button for app identifier:", app_identifier) icon_img = None display_name = None @@ -425,7 +429,18 @@ class Dock(Window): button.connect("drag-data-get", self.on_drag_data_get) button.connect("drag-data-received", self.on_drag_data_received) button.connect("enter-notify-event", self._on_child_enter) - return button + overlay = Overlay( + overlays=Label( + label=workspace, + name="dock-app-overlay-label", + h_align="end", + v_align="start", + visible=bool(workspace), + ), + child=button, + name="dock-app-overlay", + ) + return overlay def handle_app(self, app_identifier, instances, desktop_app=None): if not instances: @@ -613,10 +628,23 @@ class Dock(Window): used_window_classes.add(matched_class) used_window_classes.add(self._normalize_window_class(matched_class)) - pinned_buttons.append(self.create_button(app_data_item, instances)) + workspace = ( + str(instances[0].get("workspace", {}).get("id", "")) + if instances + else "" + ) + pinned_buttons.append( + self.create_button(app_data_item, instances, workspace) + ) open_buttons = [] for class_name, instances in running_windows.items(): + # print(class_name, instances) + workspace = ( + str(instances[0].get("workspace", {}).get("id", "")) + if instances + else "" + ) if class_name not in used_window_classes: app = None app = self.app_identifiers.get(class_name) @@ -642,7 +670,9 @@ class Dock(Window): identifier = app_data_obj else: identifier = class_name - open_buttons.append(self.create_button(identifier, instances)) + open_buttons.append( + self.create_button(identifier, instances, workspace) + ) children = pinned_buttons separator_orientation = ( diff --git a/styles/dock.css b/styles/dock.css index 1ea4b61..cead4b7 100644 --- a/styles/dock.css +++ b/styles/dock.css @@ -1,5 +1,5 @@ #dock { - background-color: alpha(var(--shadow), 0.4); + background-color: alpha(#fff, 0.05); padding: 8px; margin: 8px 8px 5px 8px; border-radius: 16px; @@ -7,6 +7,16 @@ /* transition: all 0.25s cubic-bezier(0.175, 0.885, 0.32, 1.275); */ } +#dock-app-overlay { +} +#dock-app-overlay label { + background-color: alpha(#000, 0.5); + font-size: 12px; + font-family: "SF Pro Rounded"; + margin-top: 20px; + min-width: 17px; + border-radius: 8px; +} #dock.vertical { margin: 8px 0 8px 8px; border-radius: 20px 0 0 20px;