File indexing completed on 2024-04-21 05:26:53

0001 /*
0002  * SPDX-FileCopyrightText: 2020 Carson Black <uhhadd@gmail.com>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #include <gtk/gtk.h>
0008 #include <glib.h>
0009 #include <gio/gio.h>
0010 #include <gdk/gdk.h>
0011 
0012 gchar *path;
0013 GFile *file;
0014 GFileMonitor *mon;
0015 GtkCssProvider *provider;
0016 
0017 void reload_colours() {
0018     if (provider != NULL) {
0019         gtk_style_context_remove_provider_for_screen(
0020             gdk_screen_get_default(),
0021             GTK_STYLE_PROVIDER(provider)
0022         );
0023         g_clear_object(&provider);
0024     }
0025     provider = gtk_css_provider_new();
0026     gtk_style_context_add_provider_for_screen(
0027         gdk_screen_get_default(),
0028         GTK_STYLE_PROVIDER (provider),
0029         GTK_STYLE_PROVIDER_PRIORITY_USER+1
0030     );
0031     gtk_css_provider_load_from_file(
0032         provider,
0033         file,
0034         NULL
0035     );
0036 }
0037 
0038 __attribute__((visibility("default"))) void gtk_module_init(gint *argc, gchar ***argv[]) {
0039     path = g_strconcat(g_get_user_config_dir(), "/gtk-3.0/colors.css", NULL);
0040     file = g_file_new_for_path(path);
0041 
0042     mon = g_file_monitor_file(
0043         file,
0044         G_FILE_MONITOR_NONE,
0045         NULL,
0046         NULL
0047     );
0048 
0049     g_signal_connect(mon, "changed", G_CALLBACK(reload_colours), NULL);
0050 }