ui/motif/toolkit.c

changeset 929
43cb1ea4c582
parent 928
35a0fd2f4f3d
child 931
6ca1ef6c8107
equal deleted inserted replaced
928:35a0fd2f4f3d 929:43cb1ea4c582
82 82
83 "*ui_test.background: red", 83 "*ui_test.background: red",
84 NULL 84 NULL
85 }; 85 };
86 86
87 static String *fallback_resources = fallback;
88
87 void input_proc(XtPointer data, int *source, XtInputId *iid) { 89 void input_proc(XtPointer data, int *source, XtInputId *iid) {
88 void *ptr; 90 void *ptr;
89 read(event_pipe[0], &ptr, sizeof(void*)); 91 read(event_pipe[0], &ptr, sizeof(void*));
90 } 92 }
91 93
92 void ui_motif_set_fallback_resources(String fallbackres[]) { 94 void ui_motif_set_fallback_resources(String *fallbackres) {
93 fallback = fallbackres; 95 fallback_resources = fallbackres;
94 } 96 }
95 97
96 void ui_init(const char *appname, int argc, char **argv) { 98 void ui_init(const char *appname, int argc, char **argv) {
97 application_name = appname; 99 application_name = appname;
98 uic_init_global_context(); 100 uic_init_global_context();
99 101
100 XtToolkitInitialize(); 102 XtToolkitInitialize();
101 XtSetLanguageProc(NULL, NULL, NULL); 103 XtSetLanguageProc(NULL, NULL, NULL);
102 app = XtCreateApplicationContext(); 104 app = XtCreateApplicationContext();
103 XtAppSetFallbackResources(app, fallback); 105 XtAppSetFallbackResources(app, fallback_resources);
104 106
105 display = XtOpenDisplay(app, NULL, appname, appname, NULL, 0, &argc, argv); 107 display = XtOpenDisplay(app, NULL, appname, appname, NULL, 0, &argc, argv);
106 108
107 uic_menu_init(); 109 uic_menu_init();
108 uic_toolbar_init(); 110 uic_toolbar_init();
222 } 224 }
223 free(job); 225 free(job);
224 return TRUE; 226 return TRUE;
225 } 227 }
226 228
229 static Boolean ui_mainthread_job(void *data) {
230 UiJob *job = data;
231 if(job->job_func) {
232 job->job_func(job->job_data);
233 }
234 free(job);
235 return TRUE;
236 }
237
227 static void* ui_jobthread(void *data) { 238 static void* ui_jobthread(void *data) {
228 UiJob *job = data; 239 UiJob *job = data;
229 int result = job->job_func(job->job_data); 240 int result = job->job_func(job->job_data);
230 if(!result) { 241 if(!result) {
231 write(event_pipe[1], &job, sizeof(void*)); // hack 242 write(event_pipe[1], &job, sizeof(void*)); // hack
232 XtAppAddWorkProc(app, ui_job_finished, job); 243 XtAppAddWorkProc(app, ui_job_finished, job);
233 244
234 } 245 }
235 return NULL; 246 return NULL;
247 }
248
249 void ui_call_mainthread(ui_threadfunc tf, void* td) {
250 UiJob *job = malloc(sizeof(UiJob));
251 memset(job, 0, sizeof(UiJob));
252 job->job_func = tf;
253 job->job_data = td;
254 write(event_pipe[1], &job, sizeof(void*)); // hack
255 XtAppAddWorkProc(app, ui_mainthread_job, job);
236 } 256 }
237 257
238 void ui_job(UiObject *obj, ui_threadfunc tf, void *td, ui_callback f, void *fd) { 258 void ui_job(UiObject *obj, ui_threadfunc tf, void *td, ui_callback f, void *fd) {
239 UiJob *job = malloc(sizeof(UiJob)); 259 UiJob *job = malloc(sizeof(UiJob));
240 job->obj = obj; 260 job->obj = obj;

mercurial