ui/gtk/toolkit.c

changeset 32
e5f4d8af567e
parent 29
3fc287f06305
child 39
ef4e2f560fa5
--- a/ui/gtk/toolkit.c	Mon Feb 12 21:13:23 2024 +0100
+++ b/ui/gtk/toolkit.c	Sun Jun 09 15:43:08 2024 +0200
@@ -33,10 +33,12 @@
 
 #include "toolkit.h"
 #include "toolbar.h"
-#include "model.h"
 #include "image.h"
 #include "../common/document.h"
 #include "../common/properties.h"
+#include "../common/menu.h"
+#include "../common/toolbar.h"
+#include "../common/threadpool.h"
 
 #include <cx/utils.h>
 #include <cx/string.h>
@@ -70,14 +72,12 @@
     gtk_init(&argc, &argv);
     application_name = appname;
     
+    ui_css_init();
+    
     uic_docmgr_init();
-    ui_toolbar_init(); // TODO: remove
     
     uic_toolbar_init();
     
-    // init custom types
-    ui_list_init();
-    
     ui_image_init();
     
     uic_load_app_properties();
@@ -191,6 +191,23 @@
     return NULL;
 }
 
+static gboolean ui_idle_func(void *data) {
+    UiJob *job = data;
+    job->job_func(job->job_data);
+    free(job);
+    return FALSE;
+}
+
+void ui_call_mainthread(ui_threadfunc tf, void* td) {
+    UiJob *job = malloc(sizeof(UiJob));
+    job->job_func = tf;
+    job->job_data = td;
+    job->finish_callback = NULL;
+    job->finish_data = NULL;
+    job->obj = NULL;
+    g_idle_add(ui_idle_func, job);
+}
+
 void ui_job(UiObject *obj, ui_threadfunc tf, void *td, ui_callback f, void *fd) {
     UiJob *job = malloc(sizeof(UiJob));
     job->obj = obj;
@@ -245,7 +262,9 @@
 }
 
 void ui_destroy_vardata(GtkWidget *object, UiVarEventData *data) {
-    ui_destroy_boundvar(data->obj->ctx, data->var);
+    if(data->var) {
+        ui_destroy_boundvar(data->obj->ctx, data->var);
+    }
     free(data);
 }
 
@@ -270,3 +289,28 @@
 }
 
 
+#if GTK_MAJOR_VERSION >= 3
+
+static GtkCssProvider* ui_gtk_css_provider;
+
+static const char *ui_gtk_css = 
+"#path-textfield-box {"
+"  background-color: @theme_base_color;"
+"  border-radius: 5px;"
+"  padding: 0px;"
+"}";
+
+void ui_css_init(void) {
+    ui_gtk_css_provider = gtk_css_provider_new();
+    gtk_css_provider_load_from_data(ui_gtk_css_provider, ui_gtk_css, -1, 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_PRIORITY_USER);
+}
+
+
+
+#endif
\ No newline at end of file

mercurial