[gnome-latex] App: move CSS handling to the liblatexila
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-latex] App: move CSS handling to the liblatexila
- Date: Tue, 28 Apr 2020 22:28:51 +0000 (UTC)
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", >k_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]