From 26022cdaba2e3e542adcfd9570de3b04b6bc8541 Mon Sep 17 00:00:00 2001 From: Arpit Chakladar Date: Thu, 27 Aug 2026 00:48:09 +0530 Subject: desktop: added an actual unknown window icon, fixed the scripts crashing - using a question mark svg as the icon for unknown windows - the activate-windows and workspaces scripts encountered crashes when trying to get the icon, fixed it --- modules/desktop/eww/activate-windows.py | 22 +++++++++++----------- modules/desktop/eww/workspaces.py | 11 +++++++++-- modules/desktop/eww/yuck.nix | 4 ++-- 3 files changed, 22 insertions(+), 15 deletions(-) (limited to 'modules/desktop/eww') diff --git a/modules/desktop/eww/activate-windows.py b/modules/desktop/eww/activate-windows.py index 5773d64..f07b6a2 100644 --- a/modules/desktop/eww/activate-windows.py +++ b/modules/desktop/eww/activate-windows.py @@ -12,16 +12,22 @@ icon_theme = Gtk.IconTheme.get_default() _icon_cache: dict[str, str] = {} +def try_desktop_app_info(desktop_id: str): + try: + return Gio.DesktopAppInfo.new(desktop_id) + except TypeError: + return None + + def resolve_icon_path(app_id: str) -> str: if not app_id: return "" if app_id in _icon_cache: return _icon_cache[app_id] - app_info = Gio.DesktopAppInfo.new(f"{app_id}.desktop") \ - or Gio.DesktopAppInfo.new(f"{app_id.lower()}.desktop") + app_info = try_desktop_app_info(f"{app_id}.desktop") \ + or try_desktop_app_info(f"{app_id.lower()}.desktop") - # fall back: scan installed .desktop files for a matching StartupWMClass if app_info is None: for info in Gio.AppInfo.get_all(): if isinstance(info, Gio.DesktopAppInfo): @@ -33,17 +39,11 @@ def resolve_icon_path(app_id: str) -> str: icon_path = "" gicon = app_info.get_icon() if app_info else None if gicon is not None: - lookup = icon_theme.lookup_by_gicon(gicon, - 32, - Gtk.IconLookupFlags.FORCE_SIZE) + lookup = icon_theme.lookup_by_gicon(gicon, 24, Gtk.IconLookupFlags.FORCE_SIZE) if lookup: icon_path = lookup.get_filename() or "" - if not icon_path: - # last resort: treat app_id itself as an icon-theme name - lookup = icon_theme.lookup_icon(app_id, - 32, - Gtk.IconLookupFlags.FORCE_SIZE) + lookup = icon_theme.lookup_icon(app_id, 24, Gtk.IconLookupFlags.FORCE_SIZE) if lookup: icon_path = lookup.get_filename() or "" diff --git a/modules/desktop/eww/workspaces.py b/modules/desktop/eww/workspaces.py index b8fae1b..d8e774b 100644 --- a/modules/desktop/eww/workspaces.py +++ b/modules/desktop/eww/workspaces.py @@ -11,14 +11,21 @@ icon_theme = Gtk.IconTheme.get_default() _icon_cache: dict[str, str] = {} +def try_desktop_app_info(desktop_id: str): + try: + return Gio.DesktopAppInfo.new(desktop_id) + except TypeError: + return None + + def resolve_icon_path(app_id: str) -> str: if not app_id: return "" if app_id in _icon_cache: return _icon_cache[app_id] - app_info = Gio.DesktopAppInfo.new(f"{app_id}.desktop") \ - or Gio.DesktopAppInfo.new(f"{app_id.lower()}.desktop") + app_info = try_desktop_app_info(f"{app_id}.desktop") \ + or try_desktop_app_info(f"{app_id.lower()}.desktop") if app_info is None: for info in Gio.AppInfo.get_all(): diff --git a/modules/desktop/eww/yuck.nix b/modules/desktop/eww/yuck.nix index 0654d9a..228db86 100644 --- a/modules/desktop/eww/yuck.nix +++ b/modules/desktop/eww/yuck.nix @@ -101,7 +101,7 @@ (box :class "workspace-button ''${ws.is_active ? 'active' : '''}" :halign "fill" (overlay :halign "fill" (image :class "workspace-icon" - :path "''${ws.icon != ''' ? ws.icon : '${../../../assets/icons/obs.svg}'}" + :path "''${ws.icon != ''' ? ws.icon : '${../../../assets/icons/unknown.svg}'}" :image-width 20 :image-height 20) (label :class "workspace-idx" :text "''${ws.idx}" :halign "end" :valign "end"))))))) @@ -114,7 +114,7 @@ :halign "fill" :tooltip "''${w.app_id}: ''${w.title != ''' ? ' ' : '''}''${w.title}" (box :halign "fill" :class "window-button ''${w.is_focused ? 'focused' : '''}" - (image :class "window-icon" :path "''${w.icon != ''' ? w.icon : '${../../../assets/icons/obs.svg}'}" :image-width 20 :image-height 20)))))) + (image :class "window-icon" :path "''${w.icon != ''' ? w.icon : '${../../../assets/icons/unknown.svg}'}" :image-width 20 :image-height 20)))))) ''; }; } -- cgit v1.2.3