| 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; |