-void AppAddTimeOut(unsigned long interval, XtTimerCallbackProc proc, XtPointer data) {
- XtAppAddTimeOut(app, interval, proc, data);
-
- if(!toplevel_window) return;
-
- // send a dummy X11 event, because the event loop may be waiting
- // and the timeout proc is only called when an event is processed
- XClientMessageEvent event;
- memset(&event, 0, sizeof(XClientMessageEvent));
- event.type = ClientMessage;
- event.window = XtWindow(toplevel_window);
- event.format = 32;
- XSendEvent(display, XtWindow(toplevel_window), 0, 0, (XEvent*)&event);
- XFlush(display);
+void AppExecProc(XtWorkProc proc, XtPointer data) {
+ EventLoopCB cb;
+ cb.proc = proc;
+ cb.data = data;
+ write(event_pipe[1], &cb, sizeof(cb));
+}
+
+char* GetOpenFileArg(void) {
+ return open_file_arg;
+}
+
+void CleanOpenFileArg(void) {
+ open_file_arg = NULL;
+}
+
+static Window app_player_window = 0;
+
+void SetPlayerWindow(Window w) {
+ app_player_window = w;
+}
+
+/*
+ * Extended Xt main loop, that also handles external window events
+ */
+void AppMainLoop(XtAppContext app) {
+ while(!XtAppGetExitFlag(app)) {
+ XEvent event;
+ XtAppNextEvent(app, &event);
+
+ if(app_player_window != 0 && event.xany.window == app_player_window) {
+ WindowHandlePlayerEvent(GetMainWindow(), &event);
+ } else {
+ XtDispatchEvent(&event);
+ }
+ }