чување 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:
измењених датотека: 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);
}