чување 4077732b820f482319469f613ee2b56eb35aa71c
родитељ 1f6afd0fbad25d3b8be5876e34eb01159fcc11b2
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Mon, 11 Dec 2023 20:46:16 +0100
Fix menu items having different callback type than window close callback
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
измењених датотека: 3, додавања: 39(+), брисања: 7(-)
diff --git a/app.h b/app.h
@@ -35,12 +35,16 @@ void create_main_window(struct WMNewApp* wma);
void debug_print_state(struct WMNewApp* wma);
int error(const int code, const char* msg, ...);
void exit_action(WMWidget* self, void* data);
+void exit_menu_action(void* data, int code, Time timestamp);
void handle_keypress(XEvent* event, void* data);
void info_panel_action(WMWidget* self, void* data);
+void info_panel_menu_action(void* data, int code, Time timestamp);
void init_state(struct State* state);
void not_implemented(WMWidget* self, void* data);
void open_action(WMWidget* self, void* data);
+void open_menu_action(void* data, int code, Time timestamp);
void save_action(WMWidget* self, void* data);
+void save_menu_action(void* data, int code, Time timestamp);
void set_mainwin_title(struct WMNewApp* wma);
void usage(const char* arg0);
void WMLog(const struct WMNewApp* wma, const char* msg, ...);
diff --git a/main.c b/main.c
@@ -134,6 +134,13 @@ exit_action(WMWidget* self, void* data)
}
void
+exit_menu_action(void* data, int code, Time timestamp)
+{
+ struct WMNewApp* wma = (struct WMNewApp*)data;
+ exit_action(wma->mainwin, wma);
+}
+
+void
handle_keypress(XEvent* event, void* data)
{
struct WMNewApp* wma = (struct WMNewApp*)data;
@@ -191,6 +198,13 @@ info_panel_action(WMWidget* self, void* data)
}
void
+info_panel_menu_action(void* data, int code, Time timestamp)
+{
+ struct WMNewApp* wma = (struct WMNewApp*)data;
+ info_panel_action(wma->mainwin, wma);
+}
+
+void
init_state(struct State* state)
{
state->dirty = 0;
@@ -210,7 +224,14 @@ open_action(WMWidget* self, void* data)
{
struct WMNewApp* wma = (struct WMNewApp*)data;
WMLog(wma, "open_action called\n");
- not_implemented(self, data);
+ not_implemented(self, wma);
+}
+
+void
+open_menu_action(void* data, int code, Time timestamp)
+{
+ struct WMNewApp* wma = (struct WMNewApp*)data;
+ open_action(wma->mainwin, wma);
}
void
@@ -218,7 +239,14 @@ save_action(WMWidget* self, void* data)
{
struct WMNewApp* wma = (struct WMNewApp*)data;
WMLog(wma, "save_action called\n");
- not_implemented(self, data);
+ not_implemented(self, wma);
+}
+
+void
+save_menu_action(void* data, int code, Time timestamp)
+{
+ struct WMNewApp* wma = (struct WMNewApp*)data;
+ save_action(wma->mainwin, wma);
}
void
diff --git a/menu.c b/menu.c
@@ -10,14 +10,14 @@ create_main_menu(struct WMNewApp* wma)
submenu = WMMenuCreate(wma->app, "Info");
WMMenuAddSubmenu(wma->main_menu, "Info", submenu);
- WMMenuAddItem(submenu, "Info Panel...", (WMMenuAction)info_panel_action,
- wma->app, NULL, "f1");
+ WMMenuAddItem(submenu, "Info Panel...", info_panel_menu_action,
+ wma, NULL, "f1");
- WMMenuAddItem(wma->main_menu, "Open...", (WMMenuAction)open_action, NULL,
+ WMMenuAddItem(wma->main_menu, "Open...", open_menu_action, wma,
NULL, "^o");
- WMMenuAddItem(wma->main_menu, "Save...", (WMMenuAction)save_action, NULL,
+ WMMenuAddItem(wma->main_menu, "Save...", save_menu_action, wma,
NULL, "^s");
- WMMenuAddItem(wma->main_menu, "Quit", (WMMenuAction)exit_action, NULL,
+ WMMenuAddItem(wma->main_menu, "Quit", exit_menu_action, wma,
NULL, "^q");
WMAppSetMainMenu(wma->app, wma->main_menu);