From 8c9b9fc5b5767c9db14ffd7fcc416855d70683ca Mon Sep 17 00:00:00 2001 From: S4NKALP Date: Fri, 1 Aug 2025 01:02:07 +0545 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(ui):=20add=20new=20applet=20ic?= =?UTF-8?q?ons=20for=20better=20visual=20representation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bluetooth-clear.svg} | 0 .../bluetooth-off-clear.svg} | 0 config/assets/icons/applets/bluetooth-off.svg | 4 ++ config/assets/icons/applets/bluetooth.svg | 4 ++ .../assets/icons/{ => applets}/brightness.svg | 0 config/assets/icons/{ => applets}/dnd-off.svg | 0 config/assets/icons/{ => applets}/dnd.svg | 0 .../{wifi.svg => applets/wifi-clear.svg} | 0 .../wifi-off-clear.svg} | 0 config/assets/icons/applets/wifi-off.svg | 10 ++++ config/assets/icons/applets/wifi.svg | 7 +++ config/assets/icons/battery.svg | 7 --- config/assets/icons/bluetooth-activated.svg | 8 --- config/assets/icons/bluetooth-off.svg | 7 --- config/assets/icons/bluetooth.svg | 6 -- config/assets/icons/brightness/brightness.svg | 6 ++ config/assets/icons/imac.png | Bin 13268 -> 0 bytes config/assets/icons/indicator.svg | 3 - config/assets/icons/{ => mic}/microphone.svg | 0 .../assets/icons/{ => misc}/chevron-left.svg | 0 .../assets/icons/{ => misc}/chevron-right.svg | 0 .../icons/{ => misc}/control-center.svg | 0 config/assets/icons/{ => misc}/imac.svg | 0 config/assets/icons/{ => misc}/logo.svg | 0 .../assets/icons/{ => misc}/media-record.svg | 0 .../icons/{1search.svg => misc/search.svg} | 0 config/assets/icons/search.svg | 12 ---- .../icons/{ => volume}/audio-volume.svg | 0 modules/about.py | 56 ++++++++++-------- modules/controlcenter/main.py | 51 ++++++++++------ modules/osd.py | 6 +- modules/panel/components/indicators.py | 33 +++++------ .../panel/components/recording_indicator.py | 2 +- modules/panel/main.py | 12 ++-- 34 files changed, 122 insertions(+), 112 deletions(-) rename config/assets/icons/{1bluetooth.svg => applets/bluetooth-clear.svg} (100%) rename config/assets/icons/{1bluetooth-off.svg => applets/bluetooth-off-clear.svg} (100%) create mode 100644 config/assets/icons/applets/bluetooth-off.svg create mode 100644 config/assets/icons/applets/bluetooth.svg rename config/assets/icons/{ => applets}/brightness.svg (100%) rename config/assets/icons/{ => applets}/dnd-off.svg (100%) rename config/assets/icons/{ => applets}/dnd.svg (100%) rename config/assets/icons/{wifi.svg => applets/wifi-clear.svg} (100%) rename config/assets/icons/{wifi-off.svg => applets/wifi-off-clear.svg} (100%) create mode 100644 config/assets/icons/applets/wifi-off.svg create mode 100644 config/assets/icons/applets/wifi.svg delete mode 100644 config/assets/icons/battery.svg delete mode 100644 config/assets/icons/bluetooth-activated.svg delete mode 100644 config/assets/icons/bluetooth-off.svg delete mode 100644 config/assets/icons/bluetooth.svg create mode 100755 config/assets/icons/brightness/brightness.svg delete mode 100644 config/assets/icons/imac.png delete mode 100644 config/assets/icons/indicator.svg rename config/assets/icons/{ => mic}/microphone.svg (100%) rename config/assets/icons/{ => misc}/chevron-left.svg (100%) rename config/assets/icons/{ => misc}/chevron-right.svg (100%) rename config/assets/icons/{ => misc}/control-center.svg (100%) rename config/assets/icons/{ => misc}/imac.svg (100%) rename config/assets/icons/{ => misc}/logo.svg (100%) rename config/assets/icons/{ => misc}/media-record.svg (100%) rename config/assets/icons/{1search.svg => misc/search.svg} (100%) delete mode 100644 config/assets/icons/search.svg rename config/assets/icons/{ => volume}/audio-volume.svg (100%) diff --git a/config/assets/icons/1bluetooth.svg b/config/assets/icons/applets/bluetooth-clear.svg similarity index 100% rename from config/assets/icons/1bluetooth.svg rename to config/assets/icons/applets/bluetooth-clear.svg diff --git a/config/assets/icons/1bluetooth-off.svg b/config/assets/icons/applets/bluetooth-off-clear.svg similarity index 100% rename from config/assets/icons/1bluetooth-off.svg rename to config/assets/icons/applets/bluetooth-off-clear.svg diff --git a/config/assets/icons/applets/bluetooth-off.svg b/config/assets/icons/applets/bluetooth-off.svg new file mode 100644 index 0000000..39361e6 --- /dev/null +++ b/config/assets/icons/applets/bluetooth-off.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/config/assets/icons/applets/bluetooth.svg b/config/assets/icons/applets/bluetooth.svg new file mode 100644 index 0000000..a9b1960 --- /dev/null +++ b/config/assets/icons/applets/bluetooth.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/config/assets/icons/brightness.svg b/config/assets/icons/applets/brightness.svg similarity index 100% rename from config/assets/icons/brightness.svg rename to config/assets/icons/applets/brightness.svg diff --git a/config/assets/icons/dnd-off.svg b/config/assets/icons/applets/dnd-off.svg similarity index 100% rename from config/assets/icons/dnd-off.svg rename to config/assets/icons/applets/dnd-off.svg diff --git a/config/assets/icons/dnd.svg b/config/assets/icons/applets/dnd.svg similarity index 100% rename from config/assets/icons/dnd.svg rename to config/assets/icons/applets/dnd.svg diff --git a/config/assets/icons/wifi.svg b/config/assets/icons/applets/wifi-clear.svg similarity index 100% rename from config/assets/icons/wifi.svg rename to config/assets/icons/applets/wifi-clear.svg diff --git a/config/assets/icons/wifi-off.svg b/config/assets/icons/applets/wifi-off-clear.svg similarity index 100% rename from config/assets/icons/wifi-off.svg rename to config/assets/icons/applets/wifi-off-clear.svg diff --git a/config/assets/icons/applets/wifi-off.svg b/config/assets/icons/applets/wifi-off.svg new file mode 100644 index 0000000..4a379bb --- /dev/null +++ b/config/assets/icons/applets/wifi-off.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/config/assets/icons/applets/wifi.svg b/config/assets/icons/applets/wifi.svg new file mode 100644 index 0000000..b0303d8 --- /dev/null +++ b/config/assets/icons/applets/wifi.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/config/assets/icons/battery.svg b/config/assets/icons/battery.svg deleted file mode 100644 index 8c4ef65..0000000 --- a/config/assets/icons/battery.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/config/assets/icons/bluetooth-activated.svg b/config/assets/icons/bluetooth-activated.svg deleted file mode 100644 index e3ef1e1..0000000 --- a/config/assets/icons/bluetooth-activated.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/config/assets/icons/bluetooth-off.svg b/config/assets/icons/bluetooth-off.svg deleted file mode 100644 index b90cd7a..0000000 --- a/config/assets/icons/bluetooth-off.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/config/assets/icons/bluetooth.svg b/config/assets/icons/bluetooth.svg deleted file mode 100644 index f982699..0000000 --- a/config/assets/icons/bluetooth.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - diff --git a/config/assets/icons/brightness/brightness.svg b/config/assets/icons/brightness/brightness.svg new file mode 100755 index 0000000..bcc61ef --- /dev/null +++ b/config/assets/icons/brightness/brightness.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/config/assets/icons/imac.png b/config/assets/icons/imac.png deleted file mode 100644 index c344ad21bead1f1ffd8ee581444d99e01cfc0a07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13268 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 diff --git a/config/assets/icons/indicator.svg b/config/assets/icons/indicator.svg deleted file mode 100644 index db3bede..0000000 --- a/config/assets/icons/indicator.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/config/assets/icons/microphone.svg b/config/assets/icons/mic/microphone.svg similarity index 100% rename from config/assets/icons/microphone.svg rename to config/assets/icons/mic/microphone.svg diff --git a/config/assets/icons/chevron-left.svg b/config/assets/icons/misc/chevron-left.svg similarity index 100% rename from config/assets/icons/chevron-left.svg rename to config/assets/icons/misc/chevron-left.svg diff --git a/config/assets/icons/chevron-right.svg b/config/assets/icons/misc/chevron-right.svg similarity index 100% rename from config/assets/icons/chevron-right.svg rename to config/assets/icons/misc/chevron-right.svg diff --git a/config/assets/icons/control-center.svg b/config/assets/icons/misc/control-center.svg similarity index 100% rename from config/assets/icons/control-center.svg rename to config/assets/icons/misc/control-center.svg diff --git a/config/assets/icons/imac.svg b/config/assets/icons/misc/imac.svg similarity index 100% rename from config/assets/icons/imac.svg rename to config/assets/icons/misc/imac.svg diff --git a/config/assets/icons/logo.svg b/config/assets/icons/misc/logo.svg similarity index 100% rename from config/assets/icons/logo.svg rename to config/assets/icons/misc/logo.svg diff --git a/config/assets/icons/media-record.svg b/config/assets/icons/misc/media-record.svg similarity index 100% rename from config/assets/icons/media-record.svg rename to config/assets/icons/misc/media-record.svg diff --git a/config/assets/icons/1search.svg b/config/assets/icons/misc/search.svg similarity index 100% rename from config/assets/icons/1search.svg rename to config/assets/icons/misc/search.svg diff --git a/config/assets/icons/search.svg b/config/assets/icons/search.svg deleted file mode 100644 index 0ea0f28..0000000 --- a/config/assets/icons/search.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/config/assets/icons/audio-volume.svg b/config/assets/icons/volume/audio-volume.svg similarity index 100% rename from config/assets/icons/audio-volume.svg rename to config/assets/icons/volume/audio-volume.svg diff --git a/modules/about.py b/modules/about.py index 30e9e31..221659d 100644 --- a/modules/about.py +++ b/modules/about.py @@ -1,8 +1,13 @@ -import re import subprocess +import re +import gi # type: ignore -from fabric.utils.helpers import get_relative_path -from gi.repository import GdkPixbuf, Gtk # type: ignore +from fabric.widgets.label import Label +from fabric.widgets.button import Button +from fabric.widgets.box import Box +from widgets.wayland import WaylandWindow as Window +from fabric.utils.helpers import exec_shell_command_async, get_relative_path +from gi.repository import Gtk, GdkPixbuf # type: ignore def read_dmi(field): @@ -14,31 +19,32 @@ def read_dmi(field): def get_gpu_name(): - output = subprocess.check_output("lspci", text=True) - gpus = [] + try: + output = ( + subprocess.check_output( + "lspci -nn | grep -i 'VGA compatible controller'", shell=True, text=True + ) + .strip() + .split("\n") + ) - for line in output.splitlines(): - if "VGA compatible controller" in line or "3D controller" in line: - parts = line.split(":", 2) - if len(parts) < 3: - continue - desc = parts[2].strip() - desc = re.sub(r"\(rev .*?\)", "", desc).strip() + def clean(line): + matches = re.findall(r"\[(.*?)\]", line) + if len(matches) >= 2: + return matches[1].strip() + desc = line.split(":", 2)[-1] + return desc.replace("Corporation", "").strip() - if "NVIDIA" in desc: - match = re.search(r"\[(.*?)\]", desc) - name = match.group(1) if match else desc - elif "Intel" in desc: - name = re.sub(r"Intel Corporation", "Intel", desc).strip() - elif "AMD" in desc or "ATI" in desc: - matches = re.findall(r"\[(.*?)\]", desc) - name = matches[1] if len(matches) > 1 else desc - else: - name = desc + for line in output: + if any(vendor in line.lower() for vendor in ["nvidia", "amd", "radeon"]): + return clean(line) - gpus.append((name)) + if output: + return clean(output[0]) - return gpus[-1] + return "Unknown GPU" + except Exception: + return "Unknown GPU" class About(Gtk.Window): @@ -60,7 +66,7 @@ class About(Gtk.Window): # Logo logo_box = Gtk.Box(halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER) pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale( - get_relative_path("../config/assets/icons/imac.svg"), + get_relative_path("../config/assets/icons/misc/imac.svg"), 158, 108, preserve_aspect_ratio=True, diff --git a/modules/controlcenter/main.py b/modules/controlcenter/main.py index 9361ed9..bd49bf1 100644 --- a/modules/controlcenter/main.py +++ b/modules/controlcenter/main.py @@ -113,17 +113,23 @@ class ModusControlCenter(Window): self.has_bluetooth_open = False self.has_wifi_open = False - self.bluetooth_svg = Image( + self.bluetooth_svg = Svg( name="bluetooth-icon", - icon_name="bluetooth-symbolic", - size=24, - style_classes="connected" if bluetooth != "disabled" else "", + svg_file=get_relative_path( + "../../config/assets/icons/applets/bluetooth.svg" + if bluetooth != "disabled" + else "../../config/assets/icons/applets/bluetooth-off.svg" + ), + size=42, ) - self.wifi_svg = Image( + self.wifi_svg = Svg( name="wifi-icon", - icon_name="network-wireless-symbolic", - size=24, - style_classes="connected" if wlan != "No Connection" else "", + svg_file=get_relative_path( + "../../config/assets/icons/applets/wifi.svg" + if wlan != "No Connection" + else "../../config/assets/icons/applets/wifi-off.svg" + ), + size=46, ) self.bluetooth_widget = Button( @@ -171,8 +177,9 @@ class ModusControlCenter(Window): ) self.focus_icon = Svg( - svg_file=get_relative_path("../../config/assets/icons/dnd-off.svg"), - size=24, + name="focus-icon", + svg_file=get_relative_path("../../config/assets/icons/applets/dnd-off.svg"), + size=46, ) self.focus_widget = Button( @@ -252,9 +259,9 @@ class ModusControlCenter(Window): modus_service.dont_disturb = self.focus_mode self.focus_icon.set_from_file( get_relative_path( - "config/assets/icons/dnd.svg" + "../../config/assets/icons/applets/dnd.svg" if self.focus_mode - else "config/assets/icons/dnd-off.svg" + else "../../config/assets/icons/applets/dnd-off.svg" ) ) @@ -345,8 +352,14 @@ class ModusControlCenter(Window): ) def wlan_changed(self, _, wlan): + self.wifi_svg.set_from_file( + get_relative_path( + "../../config/assets/icons/applets/wifi.svg" + if wlan != "No Connection" + else "../../config/assets/icons/applets/wifi-off.svg" + ) + ) if wlan != "No Connection": - self.wifi_svg.set_property("style-classes", "connected") if wlan.startswith("connected:"): parts = wlan.split(":") if len(parts) >= 2: @@ -357,16 +370,21 @@ class ModusControlCenter(Window): else: GLib.idle_add(lambda: self.wlan_label.set_property("label", wlan)) else: - self.wifi_svg.set_property("style-classes", "") GLib.idle_add(lambda: self.wlan_label.set_property("label", wlan)) def bluetooth_changed(self, _, bluetooth): + self.bluetooth_svg.set_from_file( + get_relative_path( + "../../config/assets/icons/applets/bluetooth.svg" + if bluetooth != "disabled" + else "../../config/assets/icons/applets/bluetooth-off.svg" + ) + ) if bluetooth != "disabled": - self.bluetooth_svg.set_property("style-classes", "connected") if bluetooth.startswith("connected:"): parts = bluetooth.split(":") if len(parts) >= 2: - device_name = parts[1] + device_name = parts[1] GLib.idle_add(lambda: self.bluetooth_label.set_property("label", device_name)) else: GLib.idle_add(lambda: self.bluetooth_label.set_property("label", "Connected")) @@ -375,7 +393,6 @@ class ModusControlCenter(Window): else: GLib.idle_add(lambda: self.bluetooth_label.set_property("label", "On")) else: - self.bluetooth_svg.set_property("style-classes", "") GLib.idle_add(lambda: self.bluetooth_label.set_property("label", "Off")) def audio_changed(self, *_): diff --git a/modules/osd.py b/modules/osd.py index 8bc776b..4bc37b3 100644 --- a/modules/osd.py +++ b/modules/osd.py @@ -50,7 +50,7 @@ class BrightnessOSDContainer(Box): orientation="h", ) self.osd_window_image = Svg( - get_relative_path("../config/assets/icons/brightness.svg"), + get_relative_path("../config/assets/icons/brightness/brightness.svg"), size=(84, 150), name="osd-image", h_align="center", @@ -112,7 +112,7 @@ class AudioOSDContainer(Box): orientation="h", ) self.osd_window_image = Svg( - get_relative_path("../config/assets/icons/audio-volume.svg"), + get_relative_path("../config/assets/icons/volume/audio-volume.svg"), size=(64, 150), name="osd-image", h_align="center", @@ -253,7 +253,7 @@ class MicrophoneOSDContainer(Box): ) self.osd_window_image = Svg( - get_relative_path("../config/assets/icons/microphone.svg"), + get_relative_path("../config/assets/icons/mic/microphone.svg"), size=(64, 150), name="osd-image", h_align="center", diff --git a/modules/panel/components/indicators.py b/modules/panel/components/indicators.py index 44dd374..4b9618c 100644 --- a/modules/panel/components/indicators.py +++ b/modules/panel/components/indicators.py @@ -3,9 +3,8 @@ from fabric.utils import get_relative_path from fabric.widgets.box import Box from fabric.widgets.button import Button from fabric.widgets.svg import Svg - -from services.battery import Battery from services.network import NetworkService +from services.battery import Battery from utils.roam import modus_service @@ -17,7 +16,7 @@ class BluetoothIndicator(Box): self.bt_icon = Svg( name="bt-icon", size=20, - svg_file=get_relative_path("../../../config/assets/icons/bluetooth.svg"), + svg_file=get_relative_path("../../../config/assets/icons/applets/bluetooth-clear.svg"), ) self.bt_button = Button(name="bt-button", child=self.bt_icon) @@ -35,14 +34,14 @@ class BluetoothIndicator(Box): def update_state(self): if not self.bluetooth.enabled: self.bt_icon.set_from_file( - get_relative_path("../../../config/assets/icons/bluetooth-off.svg") + get_relative_path("../../../config/assets/icons/applets/bluetooth-off-clear.svg") ) tooltip = "Bluetooth disabled" else: connected_devices = self.bluetooth.connected_devices if connected_devices: self.bt_icon.set_from_file( - get_relative_path("../../../config/assets/icons/bluetooth.svg") + get_relative_path("../../../config/assets/icons/applets/bluetooth-clear.svg") ) if len(connected_devices) == 1: device = connected_devices[0] @@ -53,7 +52,7 @@ class BluetoothIndicator(Box): tooltip = f"Connected to {len(connected_devices)} devices" else: self.bt_icon.set_from_file( - get_relative_path("../../../config/assets/icons/bluetooth.svg") + get_relative_path("../../../config/assets/icons/applets/bluetooth-clear.svg") ) tooltip = "No devices connected" @@ -105,7 +104,7 @@ class NetworkIndicator(Box): self.network_icon = Svg( name="network-icon", size=22, - svg_file=get_relative_path("../../../config/assets/icons/wifi.svg"), + svg_file=get_relative_path("../../../config/assets/icons/applets/wifi-clear.svg"), ) self.network_button = Button(name="network-button", child=self.network_icon) @@ -177,26 +176,26 @@ class NetworkIndicator(Box): def update_state(self): primary_device = self.network_service.primary_device tooltip = "No network connection" - icon_file = "wifi-off.svg" + icon_file = "wifi-off-clear.svg" if primary_device == "wifi" and self.network_service.wifi_device: wifi = self.network_service.wifi_device if not wifi.enabled: - icon_file = "wifi-off.svg" + icon_file = "wifi-off-clear.svg" tooltip = "WiFi disabled" elif wifi.internet == "activated": - icon_file = "wifi.svg" + icon_file = "wifi-clear.svg" tooltip = f"Connected to {wifi.ssid}" if wifi.strength >= 0: tooltip += f" ({wifi.strength}%)" elif wifi.internet == "activating": - icon_file = "wifi.svg" + icon_file = "wifi-clear.svg" tooltip = f"Connecting to {wifi.ssid}..." elif wifi.internet in ["deactivating", "deactivated", "disconnected"]: - icon_file = "wifi-off.svg" + icon_file = "wifi-off-clear.svg" tooltip = "WiFi disconnected" else: - icon_file = "wifi-off.svg" + icon_file = "wifi-off-clear.svg" tooltip = "WiFi disconnected" elif primary_device == "wired" and self.network_service.ethernet_device: @@ -207,14 +206,14 @@ class NetworkIndicator(Box): if hasattr(ethernet, "speed") and ethernet.speed > 0: tooltip += f" ({ethernet.speed} Mbps)" elif ethernet.internet == "activating": - icon_file = "wifi.svg" + icon_file = "wifi-clear.svg" tooltip = "Ethernet connecting..." else: - icon_file = "wifi-off.svg" + icon_file = "wifi-off-clear.svg" tooltip = "Ethernet disconnected" self.network_icon.set_from_file( - get_relative_path(f"../../../config/assets/icons/{icon_file}") + get_relative_path(f"../../../config/assets/icons/applets/{icon_file}") ) self.network_button.set_tooltip_text(tooltip) @@ -228,7 +227,7 @@ class BatteryIndicator(Box): self.battery_icon = Svg( name="battery-icon", size=22, - svg_file=get_relative_path("../../../config/assets/icons/battery.svg"), + svg_file=get_relative_path("../../../config/assets/icons/battery/battery-100.svg"), ) self.battery_button = Button(name="battery-button", child=self.battery_icon) diff --git a/modules/panel/components/recording_indicator.py b/modules/panel/components/recording_indicator.py index cf2d515..1653395 100644 --- a/modules/panel/components/recording_indicator.py +++ b/modules/panel/components/recording_indicator.py @@ -28,7 +28,7 @@ class RecordingIndicator(Button): self.recording_icon = Svg( name="indicators-icon", size=24, - svg_file=get_relative_path("../../../config/assets/icons/media-record.svg"), + svg_file=get_relative_path("../../../config/assets/icons/misc/media-record.svg"), ) self.time_label = Label( name="recording-time-label", diff --git a/modules/panel/main.py b/modules/panel/main.py index 82a9570..2fac2eb 100644 --- a/modules/panel/main.py +++ b/modules/panel/main.py @@ -43,7 +43,7 @@ class Panel(Window): name="panel-button", child=Svg( size=22, - svg_file=get_relative_path("../../config/assets/icons/logo.svg"), + svg_file=get_relative_path("../../config/assets/icons/misc/logo.svg"), ), on_clicked=lambda *_: self.menubar.show_system_dropdown(self.imac), ) @@ -63,7 +63,7 @@ class Panel(Window): child=Svg( size=16, svg_file=get_relative_path( - "../../config/assets/icons/chevron-right.svg" + "../../config/assets/icons/misc/chevron-right.svg" ), ), on_clicked=self.toggle_tray, @@ -85,7 +85,7 @@ class Panel(Window): on_clicked=lambda *_: self.search_apps(), child=Svg( size=20, - svg_file=get_relative_path("../../config/assets/icons/search.svg"), + svg_file=get_relative_path("../../config/assets/icons/misc/search.svg"), ), ) @@ -100,7 +100,7 @@ class Panel(Window): child=Svg( size=22, svg_file=get_relative_path( - "../../config/assets/icons/control-center.svg" + "../../config/assets/icons/misc/control-center.svg" ), ), ) @@ -146,9 +146,9 @@ class Panel(Window): if self.tray_revealer.child_revealed: self.chevron_button.get_child().set_from_file( - get_relative_path("../../config/assets/icons/chevron-left.svg") + get_relative_path("../../config/assets/icons/misc/chevron-left.svg") ) else: self.chevron_button.get_child().set_from_file( - get_relative_path("../../config/assets/icons/chevron-right.svg") + get_relative_path("../../config/assets/icons/misc/chevron-right.svg") )