aboutsummaryrefslogtreecommitdiff
path: root/main/src
diff options
context:
space:
mode:
Diffstat (limited to 'main/src')
-rw-r--r--main/src/ui/application.vala16
-rw-r--r--main/src/view_model/preferences_dialog.vala1
-rw-r--r--main/src/windows/preferences_window/tweaks_preferences_page.vala16
3 files changed, 28 insertions, 5 deletions
diff --git a/main/src/ui/application.vala b/main/src/ui/application.vala
index ea4f578c..03128964 100644
--- a/main/src/ui/application.vala
+++ b/main/src/ui/application.vala
@@ -16,6 +16,7 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application {
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; }
@@ -33,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");
@@ -105,6 +113,14 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application {
});
}
+ 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":
diff --git a/main/src/view_model/preferences_dialog.vala b/main/src/view_model/preferences_dialog.vala
index 09e22187..6bc8d56f 100644
--- a/main/src/view_model/preferences_dialog.vala
+++ b/main/src/view_model/preferences_dialog.vala
@@ -126,6 +126,7 @@ public class Dino.Ui.ViewModel.PreferencesDialog : Object {
private void bind_tweaks_page() {
var settings = Dino.Application.get_default().settings;
settings.bind_property("avatar-roundness", tweaks_page, "avatar-roundness", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
+ settings.bind_property("custom-css", tweaks_page, "custom-css", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
}
}
diff --git a/main/src/windows/preferences_window/tweaks_preferences_page.vala b/main/src/windows/preferences_window/tweaks_preferences_page.vala
index 6da43348..906ca1ae 100644
--- a/main/src/windows/preferences_window/tweaks_preferences_page.vala
+++ b/main/src/windows/preferences_window/tweaks_preferences_page.vala
@@ -2,26 +2,32 @@ using Gtk;
public class Dino.Ui.ViewModel.TweaksPreferencesPage : Object {
public int avatar_roundness { get; set; }
+ public string custom_css { get; set; default = ""; }
}
[GtkTemplate (ui = "/im/dino/Dino/preferences_window/tweaks_preferences_page.ui")]
public class Dino.Ui.TweaksPreferencesPage : Adw.PreferencesPage {
[GtkChild] private unowned Adw.SpinRow avatar_roundness_row;
+ [GtkChild] private unowned Gtk.TextBuffer custom_css_buffer;
public ViewModel.TweaksPreferencesPage model { get; set; default = new ViewModel.TweaksPreferencesPage(); }
- private Binding? avatar_roundness_binding;
+ private Binding[] model_bindings = new Binding[0];
construct {
this.notify["model"].connect(on_model_changed);
}
private void on_model_changed() {
- if (avatar_roundness_binding != null) {
- avatar_roundness_binding.unbind();
- avatar_roundness_binding = null;
+ foreach (Binding binding in model_bindings) {
+ binding.unbind();
}
if (model != null) {
- avatar_roundness_binding = model.bind_property("avatar-roundness", avatar_roundness_row, "value", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
+ model_bindings = new Binding[] {
+ model.bind_property("avatar-roundness", avatar_roundness_row, "value", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL),
+ model.bind_property("custom-css", custom_css_buffer, "text", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL)
+ };
+ } else {
+ model_bindings = new Binding[0];
}
}
}