[gnome-latex] App: move CSS handling to the liblatexila



commit f7065a445ac07b3eaaacd64fd39c7c46b068ef96
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Tue Apr 28 23:43:46 2020 +0200

    App: move CSS handling to the liblatexila

 docs/reference/gnome-latex-sections.txt |  1 +
 src/glatex_app.vala                     | 44 -----------------
 src/liblatexila/latexila-app.c          | 86 ++++++++++++++++++++++++++++++---
 src/liblatexila/latexila-app.h          |  3 ++
 4 files changed, 84 insertions(+), 50 deletions(-)
---
diff --git a/docs/reference/gnome-latex-sections.txt b/docs/reference/gnome-latex-sections.txt
index 2d78705..50f5c4e 100644
--- a/docs/reference/gnome-latex-sections.txt
+++ b/docs/reference/gnome-latex-sections.txt
@@ -12,6 +12,7 @@ LATEXILA_IS_APP
 LATEXILA_IS_APP_CLASS
 LATEXILA_TYPE_APP
 LatexilaAppClass
+LatexilaAppPrivate
 latexila_app_get_type
 </SECTION>
 
diff --git a/src/glatex_app.vala b/src/glatex_app.vala
index 24401f4..a3b2d56 100644
--- a/src/glatex_app.vala
+++ b/src/glatex_app.vala
@@ -21,8 +21,6 @@
 
 public class GlatexApp : Latexila.App
 {
-    static Gtk.CssProvider? _provider = null;
-
     private const GLib.ActionEntry[] _app_actions =
     {
         { "new-document", new_document_cb },
@@ -57,13 +55,9 @@ public class GlatexApp : Latexila.App
     private void startup_cb ()
     {
         hold ();
-
         add_action_entries (_app_actions, this);
-
-        setup_theme_extensions ();
         AppSettings.get_default ();
         support_backward_search ();
-
         release ();
     }
 
@@ -118,44 +112,6 @@ public class GlatexApp : Latexila.App
         release ();
     }
 
-    private void setup_theme_extensions ()
-    {
-        Gtk.Settings settings = Gtk.Settings.get_default ();
-        settings.notify["gtk-theme-name"].connect (update_theme);
-        update_theme ();
-    }
-
-    private void update_theme ()
-    {
-        Gtk.Settings settings = Gtk.Settings.get_default ();
-        Gdk.Screen screen = Gdk.Screen.get_default ();
-
-        if (settings.gtk_theme_name == "Adwaita")
-        {
-            if (_provider == null)
-            {
-                _provider = new Gtk.CssProvider ();
-                File file = File.new_for_uri 
("resource:///org/gnome/gnome-latex/ui/gnome-latex.adwaita.css");
-                try
-                {
-                    _provider.load_from_file (file);
-                }
-                catch (Error e)
-                {
-                    warning ("Cannot load CSS: %s", e.message);
-                }
-            }
-
-            Gtk.StyleContext.add_provider_for_screen (screen, _provider,
-                Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
-        }
-        else if (_provider != null)
-        {
-            Gtk.StyleContext.remove_provider_for_screen (screen, _provider);
-            _provider = null;
-        }
-    }
-
     // Get all the documents currently opened.
     public Gee.List<Document> get_documents ()
     {
diff --git a/src/liblatexila/latexila-app.c b/src/liblatexila/latexila-app.c
index ce0d110..0063ac0 100644
--- a/src/liblatexila/latexila-app.c
+++ b/src/liblatexila/latexila-app.c
@@ -24,13 +24,18 @@
 #include "latexila-latex-commands.h"
 #include "latexila-utils.h"
 
+struct _LatexilaAppPrivate
+{
+       GtkCssProvider *adwaita_css_provider;
+};
+
 /**
  * SECTION:app
  * @title: LatexilaApp
  * @short_description: Subclass of #GtkApplication
  */
 
-G_DEFINE_TYPE (LatexilaApp, latexila_app, GTK_TYPE_APPLICATION)
+G_DEFINE_TYPE_WITH_PRIVATE (LatexilaApp, latexila_app, GTK_TYPE_APPLICATION)
 
 static void
 about_activate_cb (GSimpleAction *about_action,
@@ -170,19 +175,75 @@ latexila_app_handle_local_options (GApplication *app,
 }
 
 static void
-latexila_app_startup (GApplication *app)
+update_theme (LatexilaApp *app)
+{
+       GtkSettings *settings = gtk_settings_get_default ();
+       gchar *gtk_theme_name;
+
+       g_object_get (settings,
+                     "gtk-theme-name", &gtk_theme_name,
+                     NULL);
+
+       if (g_strcmp0 (gtk_theme_name, "Adwaita") == 0)
+       {
+               if (app->priv->adwaita_css_provider == NULL)
+               {
+                       app->priv->adwaita_css_provider = gtk_css_provider_new ();
+                       gtk_css_provider_load_from_resource (app->priv->adwaita_css_provider,
+                                                            
"/org/gnome/gnome-latex/ui/gnome-latex.adwaita.css");
+               }
+
+               gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
+                                                          GTK_STYLE_PROVIDER 
(app->priv->adwaita_css_provider),
+                                                          GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+       }
+       else if (app->priv->adwaita_css_provider != NULL)
+       {
+               gtk_style_context_remove_provider_for_screen (gdk_screen_get_default (),
+                                                             GTK_STYLE_PROVIDER 
(app->priv->adwaita_css_provider));
+               g_clear_object (&app->priv->adwaita_css_provider);
+       }
+
+       g_free (gtk_theme_name);
+}
+
+static void
+gtk_theme_name_notify_cb (GtkSettings *settings,
+                         GParamSpec  *pspec,
+                         LatexilaApp *app)
+{
+       update_theme (app);
+}
+
+static void
+setup_theme_extension (LatexilaApp *app)
 {
+       GtkSettings *settings = gtk_settings_get_default ();
+
+       g_signal_connect_object (settings,
+                                "notify::gtk-theme-name",
+                                G_CALLBACK (gtk_theme_name_notify_cb),
+                                app,
+                                0);
+
+       update_theme (app);
+}
+
+static void
+latexila_app_startup (GApplication *g_app)
+{
+       LatexilaApp *app = LATEXILA_APP (g_app);
+
        if (G_APPLICATION_CLASS (latexila_app_parent_class)->startup != NULL)
        {
-               G_APPLICATION_CLASS (latexila_app_parent_class)->startup (app);
+               G_APPLICATION_CLASS (latexila_app_parent_class)->startup (g_app);
        }
 
        latexila_utils_migrate_latexila_to_gnome_latex ();
-
-       add_action_entries (LATEXILA_APP (app));
+       add_action_entries (app);
        latexila_latex_commands_add_action_infos (GTK_APPLICATION (app));
-
        latexila_utils_register_icons ();
+       setup_theme_extension (app);
 }
 
 static void
@@ -196,6 +257,16 @@ latexila_app_constructed (GObject *object)
        }
 }
 
+static void
+latexila_app_dispose (GObject *object)
+{
+       LatexilaApp *app = LATEXILA_APP (object);
+
+       g_clear_object (&app->priv->adwaita_css_provider);
+
+       G_OBJECT_CLASS (latexila_app_parent_class)->dispose (object);
+}
+
 static void
 latexila_app_class_init (LatexilaAppClass *klass)
 {
@@ -203,6 +274,7 @@ latexila_app_class_init (LatexilaAppClass *klass)
        GApplicationClass *gapp_class = G_APPLICATION_CLASS (klass);
 
        object_class->constructed = latexila_app_constructed;
+       object_class->dispose = latexila_app_dispose;
 
        gapp_class->handle_local_options = latexila_app_handle_local_options;
        gapp_class->startup = latexila_app_startup;
@@ -213,6 +285,8 @@ latexila_app_init (LatexilaApp *app)
 {
        TeplApplication *tepl_app;
 
+       app->priv = latexila_app_get_instance_private (app);
+
        g_application_set_flags (G_APPLICATION (app), G_APPLICATION_HANDLES_OPEN);
        g_set_application_name (PACKAGE_NAME);
        gtk_window_set_default_icon_name ("gnome-latex");
diff --git a/src/liblatexila/latexila-app.h b/src/liblatexila/latexila-app.h
index c2d50e7..95eeed1 100644
--- a/src/liblatexila/latexila-app.h
+++ b/src/liblatexila/latexila-app.h
@@ -33,10 +33,13 @@ G_BEGIN_DECLS
 
 typedef struct _LatexilaApp         LatexilaApp;
 typedef struct _LatexilaAppClass    LatexilaAppClass;
+typedef struct _LatexilaAppPrivate  LatexilaAppPrivate;
 
 struct _LatexilaApp
 {
        GtkApplication parent;
+
+       LatexilaAppPrivate *priv;
 };
 
 struct _LatexilaAppClass


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]