aboutsummaryrefslogtreecommitdiff
path: root/main/src/ui/application.vala
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/ui/application.vala')
-rw-r--r--main/src/ui/application.vala50
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();
}
}
-