diff options
Diffstat (limited to 'main/src/ui/application.vala')
| -rw-r--r-- | main/src/ui/application.vala | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/main/src/ui/application.vala b/main/src/ui/application.vala index 83290743..cb3d52e4 100644 --- a/main/src/ui/application.vala +++ b/main/src/ui/application.vala @@ -14,6 +14,9 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application { public MainWindow window; public MainWindowController controller; + private LauncherBadge? launcher_badge; + private StatusNotifierItem? status_notifier_item; + private CssProvider custom_css_provider; public Database db { get; set; } public Dino.Entities.Settings settings { get; set; } @@ -31,6 +34,13 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application { public Application() throws Error { Object(application_id: "im.dino.Dino", flags: ApplicationFlags.HANDLES_OPEN); init(); + custom_css_provider = new CssProvider(); + settings.notify["custom-css"].connect(update_custom_css); + update_custom_css(); + Gdk.Display? display = Gdk.Display.get_default(); + if (display != null) { + StyleContext.add_provider_for_display(display, custom_css_provider, STYLE_PROVIDER_PRIORITY_USER); + } Environment.set_application_name("Dino"); Window.set_default_icon_name("im.dino.Dino"); @@ -43,6 +53,18 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application { Process.exit(0); } + try { + status_notifier_item = new StatusNotifierItem(this); + } catch (IOError e) { + warning("Could not create Dino's tray icon: %s", e.message); + } + + try { + launcher_badge = new LauncherBadge(stream_interactor); + } catch (IOError e) { + warning("Could not create Dino's launcher badge: %s", e.message); + } + NotificationEvents notification_events = stream_interactor.get_module(NotificationEvents.IDENTITY); get_notifications_dbus.begin((_, res) => { // It might take a bit to get the interface. NotificationEvents will queue any notifications in the meantime. @@ -68,18 +90,37 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application { stream_interactor.get_module(FileManager.IDENTITY).add_metadata_provider(new Util.AudioVideoFileMetadataProvider()); }); + shutdown.connect(() => { + if (launcher_badge != null) { + launcher_badge.shutdown(); + launcher_badge = null; + } + if (status_notifier_item != null) { + status_notifier_item.shutdown(); + status_notifier_item = null; + } + }); + activate.connect(() => { if (window == null) { controller = new MainWindowController(this, stream_interactor, db); config = new Config(db); window = new MainWindow(this, stream_interactor, db, config); controller.set_window(window); - if ((get_flags() & ApplicationFlags.IS_SERVICE) == ApplicationFlags.IS_SERVICE) window.hide_on_close = true; + window.hide_on_close = true; } window.present(); }); } + private void update_custom_css() { +#if GTK_4_12 + custom_css_provider.load_from_string(settings.custom_css); +#else + custom_css_provider.load_from_data(settings.custom_css.data); +#endif + } + public void handle_uri(string jid, string query, Gee.Map<string, string> options) { switch (query) { case "join": @@ -129,6 +170,12 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application { about_action.activate.connect(show_about_window); add_action(about_action); + SimpleAction mark_all_as_read_action = new SimpleAction("mark_all_as_read", null); + mark_all_as_read_action.activate.connect(() => { + stream_interactor.get_module(ChatInteraction.IDENTITY).mark_all_as_read.begin(); + }); + add_action(mark_all_as_read_action); + SimpleAction quit_action = new SimpleAction("quit", null); quit_action.activate.connect(quit); add_action(quit_action); @@ -316,4 +363,3 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application { dialog.present(); } } - |
