update #9
No files matched your search
@@ -1,4 +1,5 @@
|
||||
from fabric.hyprland.widgets import Language
|
||||
from fabric.system_tray.widgets import SystemTray
|
||||
from fabric.utils import FormattedString, bulk_replace
|
||||
from fabric.widgets.box import Box
|
||||
from fabric.widgets.button import Button
|
||||
@@ -13,7 +14,6 @@ from modules.bar.widgets import (
|
||||
Network,
|
||||
PowerProfile,
|
||||
SystemInfo,
|
||||
SystemTray,
|
||||
TaskBar,
|
||||
VolumeIndicator,
|
||||
workspace,
|
||||
|
||||
@@ -5,7 +5,6 @@ from .info import SystemInfo
|
||||
from .microphone import MicrophoneIndicator
|
||||
from .network import Network
|
||||
from .powerprofile import PowerProfile
|
||||
from .systray import SystemTray
|
||||
from .taskbar import TaskBar
|
||||
from .volume import VolumeIndicator
|
||||
from .workspace import workspace
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
import gi
|
||||
from gi.repository import Gdk, GdkPixbuf, Gray, Gtk
|
||||
from loguru import logger
|
||||
|
||||
from fabric.widgets.box import Box
|
||||
from fabric.widgets.button import Button
|
||||
from fabric.widgets.image import Image
|
||||
|
||||
gi.require_version("Gray", "0.1")
|
||||
gi.require_version("Gtk", "3.0")
|
||||
|
||||
|
||||
class SystemTray(Box):
|
||||
|
||||
def __init__(self, pixel_size=22, **kwargs) -> None:
|
||||
super().__init__(name="system-tray", **kwargs)
|
||||
self.pixel_size = pixel_size
|
||||
self.watcher = Gray.Watcher()
|
||||
self.watcher.connect("item-added", self.on_item_added)
|
||||
|
||||
def on_item_added(self, _, identifier: str):
|
||||
item = self.watcher.get_item_for_identifier(identifier)
|
||||
item_button = self.do_bake_item_button(item)
|
||||
item.connect("removed", lambda *args: item_button.destroy())
|
||||
item_button.show_all()
|
||||
self.add(item_button)
|
||||
|
||||
def do_bake_item_button(self, item: Gray.Item) -> Button:
|
||||
button = Button()
|
||||
|
||||
button.set_tooltip_text(item.get_property("title"))
|
||||
|
||||
# context menu handler
|
||||
button.connect(
|
||||
"button-press-event",
|
||||
lambda button, event: self.on_button_click(button, item, event),
|
||||
)
|
||||
|
||||
# get pixel map of item's icon
|
||||
pixmap = Gray.get_pixmap_for_pixmaps(item.get_icon_pixmaps(), 24)
|
||||
|
||||
# convert the pixmap to a pixbuf
|
||||
pixbuf: GdkPixbuf.Pixbuf = (
|
||||
pixmap.as_pixbuf(self.pixel_size, GdkPixbuf.InterpType.HYPER)
|
||||
if pixmap is not None
|
||||
else Gtk.IconTheme()
|
||||
.get_default()
|
||||
.load_icon(
|
||||
item.get_icon_name(),
|
||||
self.pixel_size,
|
||||
Gtk.IconLookupFlags.FORCE_SIZE,
|
||||
)
|
||||
)
|
||||
|
||||
# resize/scale the pixbuf
|
||||
pixbuf.scale_simple(
|
||||
self.pixel_size,
|
||||
self.pixel_size,
|
||||
GdkPixbuf.InterpType.HYPER,
|
||||
)
|
||||
|
||||
image = Image(pixbuf=pixbuf, pixel_size=self.pixel_size)
|
||||
button.set_image(image)
|
||||
|
||||
return button
|
||||
|
||||
def on_button_click(self, button, item: Gray.Item, event):
|
||||
match event.button:
|
||||
case 1:
|
||||
try:
|
||||
item.activate(event.x, event.y)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
case 3:
|
||||
menu = item.get_property("menu")
|
||||
menu.set_name("system-tray-menu")
|
||||
if menu:
|
||||
menu.popup_at_widget(
|
||||
button,
|
||||
Gdk.Gravity.SOUTH,
|
||||
Gdk.Gravity.NORTH,
|
||||
event,
|
||||
)
|
||||
else:
|
||||
item.context_menu(event.x, event.y)
|
||||
@@ -155,44 +155,3 @@ menu > menuitem:hover {
|
||||
color: lighter(@outlineVariant);
|
||||
border: 2px solid @onSecondaryContainer;
|
||||
}
|
||||
|
||||
/*
|
||||
* ── system tray ───────────────────────────────────────────────────────
|
||||
*/
|
||||
|
||||
#system-tray {
|
||||
background-color: @surfaceContainer;
|
||||
border-radius: 100px;
|
||||
padding: 2px 10px 0 10px;
|
||||
}
|
||||
|
||||
#system-tray > button {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#system-tray-menu > menuitem menu,
|
||||
#system-tray-menu {
|
||||
background-color: @surfaceContainer;
|
||||
border-radius: 12px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#system-tray-menu > menuitem menu > menuitem,
|
||||
#system-tray-menu > menuitem {
|
||||
margin: 5px 0px;
|
||||
background-color: @surfaceContainer;
|
||||
padding: 0.3em 0.5em;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
#system-tray-menu > menuitem menu > menuitem:disabled,
|
||||
#system-tray-menu > menuitem:disabled {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#system-tray-menu > menuitem menu > menuitem:hover,
|
||||
#system-tray-menu > menuitem:hover,
|
||||
#submenu-button:hover {
|
||||
background-color: mix(@onSurface, @surface, 0.85);
|
||||
}
|
||||
Reference in new issue
Block a user