ui/motif/toolkit.c

changeset 115
e57ca2747782
parent 113
dde28a806552
--- a/ui/motif/toolkit.c	Sun Dec 07 20:00:33 2025 +0100
+++ b/ui/motif/toolkit.c	Sat Dec 13 15:58:58 2025 +0100
@@ -34,11 +34,11 @@
 #include "toolkit.h"
 #include "toolbar.h"
 #include "container.h"
-#include "stock.h"
 #include "../common/menu.h"
 #include "../common/toolbar.h"
 #include "../common/document.h"
 #include "../common/properties.h"
+#include "../common/app.h"
 #include <cx/buffer.h>
 
 #include <X11/Intrinsic.h>
@@ -49,13 +49,6 @@
 static Widget active_window;
 static const char *application_name;
 
-static ui_callback   startup_func;
-static void          *startup_data;
-static ui_callback   open_func;
-static void          *open_data;
-static ui_callback   exit_func;
-static void          *exit_data;
-
 static ui_callback appclose_fnc;
 static void *appclose_udata;
 
@@ -84,11 +77,17 @@
 	NULL
 };
 
+static String *fallback_resources = fallback;
+
 void input_proc(XtPointer data, int *source, XtInputId *iid) {
     void *ptr;
     read(event_pipe[0], &ptr, sizeof(void*));
 }
 
+void ui_motif_set_fallback_resources(String *fallbackres) {
+    fallback_resources = fallbackres;
+}
+
 void ui_init(const char *appname, int argc, char **argv) { 
     application_name = appname;
     uic_init_global_context();
@@ -96,7 +95,7 @@
     XtToolkitInitialize();
     XtSetLanguageProc(NULL, NULL, NULL);
     app = XtCreateApplicationContext();
-    XtAppSetFallbackResources(app, fallback);
+    XtAppSetFallbackResources(app, fallback_resources);
     
     display =  XtOpenDisplay(app, NULL, appname, appname, NULL, 0, &argc, argv);
     
@@ -128,40 +127,21 @@
     return display;
 }
 
-void ui_onstartup(ui_callback f, void *userdata) {
-    startup_func = f;
-    startup_data = userdata;
-}
-
-void ui_onopen(ui_callback f, void *userdata) {
-    open_func = f;
-    open_data = userdata;
-}
-
-void ui_onexit(ui_callback f, void *userdata) {
-    exit_func = f;
-    exit_data = userdata;
-}
-
 void ui_app_exit_on_shutdown(UiBool exitapp) {
     exit_on_shutdown = exitapp;
 }
 
 void ui_main() {
-    if(startup_func) {
-        startup_func(NULL, startup_data);
-    }
+    uic_application_startup(NULL);
     XtAppMainLoop(app);
-    if(exit_func) {
-        exit_func(NULL, exit_data);
-    }
+    uic_application_exit(NULL);
     uic_store_app_properties();
     if(exit_on_shutdown) {
         exit(0);
     }
 }
 
-void ui_exit_mainloop() {
+void ui_app_quit() {
     XtAppSetExitFlag(app);
 }
 
@@ -174,7 +154,7 @@
 }
 
 void ui_show(UiObject *obj) {
-    uic_check_group_widgets(obj->ctx);
+    uic_check_state_widgets(obj->ctx);
     if(!XtIsRealized(obj->widget)) {
         XtRealizeWidget(obj->widget);
         obj->ref++;
@@ -220,6 +200,15 @@
     return TRUE;
 }
 
+static Boolean ui_mainthread_job(void *data) {
+    UiJob *job = data;
+    if(job->job_func) {
+        job->job_func(job->job_data);
+    }
+    free(job);
+    return TRUE;
+}
+
 static void* ui_jobthread(void *data) {
     UiJob *job = data;
     int result = job->job_func(job->job_data);
@@ -231,6 +220,15 @@
     return NULL;
 }
 
+void ui_call_mainthread(ui_threadfunc tf, void* td) {
+    UiJob *job = malloc(sizeof(UiJob));
+    memset(job, 0, sizeof(UiJob));
+    job->job_func = tf;
+    job->job_data = td;
+    write(event_pipe[1], &job, sizeof(void*)); // hack
+    XtAppAddWorkProc(app, ui_mainthread_job, job);
+}
+
 void ui_job(UiObject *obj, ui_threadfunc tf, void *td, ui_callback f, void *fd) {
     UiJob *job = malloc(sizeof(UiJob));
     job->obj = obj;
@@ -325,7 +323,7 @@
             4);
 }
 
-void ui_destroy_eventdata(Widget w, XtPointer data, XtPointer d) {
+void ui_destroy_data(Widget w, XtPointer data, XtPointer d) {
     free(data);
 }
 
@@ -333,13 +331,13 @@
     if(!groups) {
         return;
     }
-    size_t ngroups = uic_group_array_size(groups);
+    size_t ngroups = uic_state_array_size(groups);
     ui_set_widget_ngroups(ctx, widget, groups, ngroups);
 }
 
 void ui_set_widget_ngroups(UiContext *ctx, Widget widget, const int *groups, size_t ngroups) {
     if(ngroups > 0) {
-        uic_add_group_widget_i(ctx, widget, (ui_enablefunc)ui_set_enabled, groups, ngroups);
+        uic_add_state_widget_i(ctx, widget, (ui_enablefunc)ui_set_enabled, groups, ngroups);
         ui_set_enabled(widget, FALSE);
     }
 }

mercurial