wmgen

Генератор WINGs апликација
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување fd8d17ceeabe733d7df9b8f718a5b55242c06525
родитељ 9fd4f64729b5945e04ab0ad945b4156a9587e7f6
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Thu, 14 Dec 2023 08:53:49 +0100

app.h: Set size of filename to PATH_MAX; main.c: open_action shows panel

Signed-off-by: Страхиња Радић <contact@strahinja.org>

Diffstat:
Mapp.h | 2+-
Mmain.c | 26++++++++++++++++++++++----
Mmainwindow.c | 6++++--
измењених датотека: 3, додавања: 27(+), брисања: 7(-)

diff --git a/app.h b/app.h @@ -4,7 +4,7 @@ struct State { int debug; int dirty; - char filename[2048]; + char filename[PATH_MAX]; }; struct WMNewApp { diff --git a/main.c b/main.c @@ -152,8 +152,26 @@ void open_action(WMWidget* self, void* data) { struct WMNewApp* wma = (struct WMNewApp*)data; + char wd[PATH_MAX]; + char* filename; + char* last_slash; + WMLog(wma, "open_action called\n"); - not_implemented(self, wma); + getcwd(wd, PATH_MAX); + if (!WMRunModalFilePanelForDirectory(WMGetOpenPanel(wma->scr), + wma->mainwin, wd, "Open file", NULL)) + return; + filename = WMGetFilePanelFileName(WMGetOpenPanel(wma->scr)); + last_slash = strrchr(filename, '/'); + if (last_slash) + strncpy(wma->state.filename, last_slash + 1, PATH_MAX); + else + strncpy(wma->state.filename, filename, PATH_MAX); + set_mainwin_title(wma); + WMLog(wma, "opened file: %s (full path: %s)\n", + last_slash ? last_slash + 1 : filename, + filename); + free(filename); } void @@ -234,13 +252,13 @@ main(int argc, char** argv) if (!(wma.dpy = XOpenDisplay(""))) exit(error(1, "XOpenDisplay failed")); - if (!(wma.scr = WMCreateScreen(wma.dpy, DefaultScreen(wma.dpy)))) + if (!(wma.scr = WMCreateScreen(wma.dpy, DefaultScreen(wma.dpy)))) exit(error(1, "WMCreateScreen failed")); create_main_window(&wma); - wma.app = WMAppCreateWithMain(wma.dpy, DefaultScreen(wma.dpy), - WMWidgetXID(wma.mainwin)); + wma.app = WMAppCreateWithMain(wma.dpy, DefaultScreen(wma.dpy), + WMWidgetXID(wma.mainwin)); XSetCommand(wma.dpy, WMWidgetXID(wma.mainwin), argv, argc); WMSetWindowCloseAction(wma.mainwin, exit_action, &wma); diff --git a/mainwindow.c b/mainwindow.c @@ -82,8 +82,10 @@ create_main_window(struct WMNewApp* wma) void set_mainwin_title(struct WMNewApp* wma) { - snprintf(wma->mainwin_title, 4095, mainwin_title_fmt, program_name, - wma->state.dirty ? "*" : "", + snprintf(wma->mainwin_title, + strlen(mainwin_title_fmt) - 2 - 2 + PATH_MAX + + strlen(program_name), + mainwin_title_fmt, program_name, wma->state.dirty ? "*" : "", *(wma->state.filename) ? wma->state.filename : default_filename); WMSetWindowTitle(wma->mainwin, wma->mainwin_title); }