ui/gtk/toolkit.c

changeset 103
6606616eca9f
parent 100
d2bd73d28ff1
child 108
77254bd6dccb
--- a/ui/gtk/toolkit.c	Tue Feb 25 21:11:00 2025 +0100
+++ b/ui/gtk/toolkit.c	Sat Apr 05 16:46:11 2025 +0200
@@ -248,8 +248,9 @@
 }
 
 void ui_set_visible(UIWIDGET widget, int visible) {
-    // TODO: gtk4
-#if GTK_MAJOR_VERSION <= 3
+#if GTK_MAJOR_VERSION >= 4
+    gtk_widget_set_visible(widget, visible);
+#else
     if(visible) {
         gtk_widget_set_no_show_all(widget, FALSE);
         gtk_widget_show_all(widget);
@@ -327,8 +328,6 @@
 
 #if GTK_MAJOR_VERSION >= 3
 
-static GtkCssProvider* ui_gtk_css_provider;
-
 #if GTK_MAJOR_VERSION == 4
 static const char *ui_gtk_css = 
 "#path-textfield-box {\n"
@@ -415,15 +414,19 @@
 #endif
 
 void ui_css_init(void) {
-    ui_gtk_css_provider = gtk_css_provider_new();
+    ui_add_styledata(ui_gtk_css, -1);
+}
+
+void ui_add_styledata(const char *styledata, int len) {
+    GtkCssProvider *css = gtk_css_provider_new();
     
 #ifdef UI_GTK3
-    gtk_css_provider_load_from_data(ui_gtk_css_provider, ui_gtk_css, -1, NULL);
+    gtk_css_provider_load_from_data(css, styledata, len, NULL);
     
     GdkScreen *screen = gdk_screen_get_default();
     gtk_style_context_add_provider_for_screen(
             screen,
-            GTK_STYLE_PROVIDER(ui_gtk_css_provider),
+            GTK_STYLE_PROVIDER(css),
             GTK_STYLE_PROVIDER_PRIORITY_USER);
 #endif /* UI_GTK3 */
     
@@ -431,13 +434,20 @@
     
     
 #if GTK_MINOR_VERSION < 12
-    gtk_css_provider_load_from_data(ui_gtk_css_provider, ui_gtk_css, -1);
+    gtk_css_provider_load_from_data(css, styledata, len);
 #else
-    gtk_css_provider_load_from_string(ui_gtk_css_provider, ui_gtk_css);
+    if(len < 0) {
+        gtk_css_provider_load_from_string(css, ui_gtk_css);
+    } else {
+        GBytes *style_data = g_bytes_new(styledata, len);
+        gtk_css_provider_load_from_bytes(css, style_data);
+        g_bytes_unref(style_data);
+        
+    }
 #endif /* GTK_MINOR_VERSION < 12 */
     
     GdkDisplay *display = gdk_display_get_default();
-    gtk_style_context_add_provider_for_display(display, GTK_STYLE_PROVIDER(ui_gtk_css_provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+    gtk_style_context_add_provider_for_display(display, GTK_STYLE_PROVIDER(css), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
     
 #endif /* UI_GTK4 */
 }

mercurial