UI: Added tray icon

This commit is contained in:
Luis Hebendanz 2024-02-08 20:57:02 +07:00
parent f166da1621
commit 7b48535a98
6 changed files with 1271 additions and 15 deletions

View File

@ -6,6 +6,8 @@ from .app import MainApplication
log = logging.getLogger(__name__)
# TODO: Trayicon support
# https://github.com/nicotine-plus/nicotine-plus/blob/b08552584eb6f35782ad77da93ae4aae3362bf64/pynicotine/gtkgui/widgets/trayicon.py#L982
def main() -> None:
app = MainApplication()
return app.run(sys.argv)

View File

@ -16,6 +16,7 @@ from clan_vm_manager.models.interfaces import ClanConfig
from clan_vm_manager.models.use_join import GLib, GObject
from clan_vm_manager.models.use_vms import VMS
from .trayicon import TrayIcon
from .windows.main_window import MainWindow
log = logging.getLogger(__name__)
@ -29,9 +30,11 @@ class MainApplication(Adw.Application):
def __init__(self, *args: Any, **kwargs: Any) -> None:
super().__init__(
*args,
application_id="lol.clan.vm.manager",
flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE,
**kwargs,
)
self.tray_icon: TrayIcon | None = None
self.add_main_option(
"debug",
@ -42,7 +45,7 @@ class MainApplication(Adw.Application):
None,
)
self.win: Adw.ApplicationWindow | None = None
self.window: Adw.ApplicationWindow | None = None
self.connect("shutdown", self.on_shutdown)
self.connect("activate", self.show_window)
@ -70,19 +73,33 @@ class MainApplication(Adw.Application):
def on_shutdown(self, app: Gtk.Application) -> None:
log.debug("Shutting down")
if self.tray_icon is not None:
self.tray_icon.destroy()
VMS.use().kill_all()
def on_window_hide_unhide(self, *_args: Any) -> None:
assert self.window is not None
if self.window.is_visible():
self.window.hide()
return
self.window.present()
def dummy_menu_entry(self) -> None:
log.info("Dummy menu entry called")
def do_activate(self) -> None:
self.show_window()
def show_window(self, app: Any = None) -> None:
if not self.win:
if not self.window:
self.init_style()
self.win = MainWindow(config=ClanConfig(initial_view="list"))
self.win.set_application(self)
icon_path = assets.loc / "clan_black.png"
self.win.set_default_icon_name(str(icon_path))
self.win.present()
self.window = MainWindow(config=ClanConfig(initial_view="list"))
self.window.set_application(self)
self.tray_icon = TrayIcon(self)
self.window.present()
# TODO: For css styling
def init_style(self) -> None:

File diff suppressed because it is too large Load Diff

View File

@ -100,12 +100,10 @@ class ClanList(Gtk.Box):
box.set_valign(Gtk.Align.CENTER)
add_button = Gtk.MenuButton()
add_button.set_icon_name("list-add")
add_button.set_has_frame(False)
add_button.set_menu_model(menu_model)
add_button.set_label("Add machine")
box.append(add_button)
box.append(Gtk.Label.new("Add machine"))
grp.set_header_suffix(box)

View File

@ -10,6 +10,7 @@
, clan-cli
, makeDesktopItem
, libadwaita
, libayatana-appindicator
}:
let
source = ./.;
@ -30,6 +31,7 @@ python3.pkgs.buildPythonApplication {
copyDesktopItems
wrapGAppsHook
gobject-introspection
libayatana-appindicator
];
buildInputs = [ gtk4 libadwaita gnome.adwaita-icon-theme ];
@ -57,7 +59,7 @@ python3.pkgs.buildPythonApplication {
'';
desktopItems = [
(makeDesktopItem {
name = "clan-vm-manager";
name = "lol.clan.vm.manager";
exec = "clan-vm-manager %u";
icon = ./clan_vm_manager/assets/clan_white.png;
desktopName = "cLAN Manager";

View File

@ -20,18 +20,18 @@ mkShell {
ln -snf ${clan-vm-manager} result
# install desktop file
set -eou pipefail
DESKTOP_DST=~/.local/share/applications/clan-vm-manager.desktop
DESKTOP_SRC=${clan-vm-manager}/share/applications/clan-vm-manager.desktop
DESKTOP_FILE_NAME=lol.clan.vm.manager.desktop
DESKTOP_DST=~/.local/share/applications/$DESKTOP_FILE_NAME
DESKTOP_SRC=${clan-vm-manager}/share/applications/$DESKTOP_FILE_NAME
# UI_BIN="env GTK_DEBUG=interactive ${clan-vm-manager}/bin/clan-vm-manager"
UI_BIN="${clan-vm-manager}/bin/clan-vm-manager"
cp -f $DESKTOP_SRC $DESKTOP_DST
sleep 2
sed -i "s|Exec=.*clan-vm-manager|Exec=$UI_BIN|" $DESKTOP_DST
xdg-mime default clan-vm-manager.desktop x-scheme-handler/clan
xdg-mime default $DESKTOP_FILE_NAME x-scheme-handler/clan
echo "==== Validating desktop file installation ===="
set -x
desktop-file-validate $DESKTOP_DST