From 9d181b4e4209361e804dd3e1fa4f8af1bf6bae49 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Tue, 15 Jul 2025 20:46:26 +0200 Subject: [PATCH] add support for multiple file arguments when starting the application --- application/main.c | 32 ++++++++++++++++++++------------ application/main.h | 5 +++-- application/window.c | 9 ++++++--- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/application/main.c b/application/main.c index 422b6ee..f6f1c8d 100644 --- a/application/main.c +++ b/application/main.c @@ -34,12 +34,13 @@ #include #include +#include static XtAppContext app; static Display *display; static Widget toplevel_window; -static char *open_file_arg; +static CxList *open_file_arg; static int event_pipe[2]; @@ -105,13 +106,16 @@ int main(int argc, char** argv) { display = XtOpenDisplay(app, NULL, APP_NAME, APP_CLASS, NULL, 0, &argc, argv); if(argc > 1) { - struct stat s; - if(stat(argv[1], &s)) { - fprintf(stderr, "Cannot open file: %s\n", argv[1]); - perror(""); - return 1; + open_file_arg = cxArrayListCreateSimple(CX_STORE_POINTERS, argc-1); + for(int i=1;i= 0) { - write(instance_fd, "open ", 5); - write(instance_fd, open_file_arg, strlen(open_file_arg)); - write(instance_fd, "\n", 1); + CxIterator i = cxListIterator(open_file_arg); + cx_foreach(char *, file, i) { + write(instance_fd, "open ", 5); + write(instance_fd, file, strlen(file)); + write(instance_fd, "\n", 1); + } close(instance_fd); return 0; } @@ -168,11 +175,12 @@ void AppExecProc(XtWorkProc proc, XtPointer data) { write(event_pipe[1], &cb, sizeof(cb)); } -char* GetOpenFileArg(void) { +CxList* GetOpenFileArgs(void) { return open_file_arg; } -void CleanOpenFileArg(void) { +void CleanOpenFileArgs(void) { + cxListDestroy(open_file_arg); open_file_arg = NULL; } diff --git a/application/main.h b/application/main.h index e39b827..de79d8a 100644 --- a/application/main.h +++ b/application/main.h @@ -24,6 +24,7 @@ #define UWP_MAIN_H #include +#include #ifdef __cplusplus extern "C" { @@ -38,8 +39,8 @@ void ApplicationExit(void); void AppExecProc(XtWorkProc proc, XtPointer data); -char* GetOpenFileArg(void); -void CleanOpenFileArg(void); +CxList* GetOpenFileArgs(void); +void CleanOpenFileArgs(void); void SetPlayerWindow(Window w); diff --git a/application/window.c b/application/window.c index 8d8a285..7caf301 100644 --- a/application/window.c +++ b/application/window.c @@ -96,11 +96,14 @@ static void resizeEH(Widget widget, XtPointer data, XEvent *event, Boolean *disp } static void WindowRealized(MainWindow *win) { - char *open_file = GetOpenFileArg(); + CxList *open_file = GetOpenFileArgs(); if(open_file) { - PlayListAddFile(win, open_file); + CxIterator i = cxListIterator(open_file); + cx_foreach(char *, file, i) { + PlayListAddFile(win, file); + } PlayListPlayNext(win, true); - CleanOpenFileArg(); + CleanOpenFileArgs(); } if(!blank_cursor_init) { -- 2.47.3