1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-03-22 06:38:37 -05:00

Minor refactoring of gtkapp.c -> gtkwin.c menu triggers.

Just to avoid an endless proliferation of functions too small to see,
I've arranged an enumeration of action ids and a single
app_menu_action function on the receiving end, and in gtkapp.c, a list
macro that means I at least don't have to define the tiny callback
functions and the GActionEntry records by hand and keep them in sync.
This commit is contained in:
Simon Tatham 2017-12-18 11:15:44 +00:00
parent 31080bf8a7
commit 2065fb647f
3 changed files with 29 additions and 26 deletions

View File

@ -135,23 +135,21 @@ static void startup(GApplication *app, gpointer user_data)
G_MENU_MODEL(menubar)); G_MENU_MODEL(menubar));
} }
static void copy_cb(GSimpleAction *action, #define WIN_ACTION_LIST(X) \
GVariant *parameter, X("copy", MA_COPY) \
gpointer user_data) X("paste", MA_PASTE) \
{ /* end of list */
copy_menu_action(user_data);
}
static void paste_cb(GSimpleAction *action, #define WIN_ACTION_CALLBACK(name, id) \
GVariant *parameter, static void win_action_cb_ ## id(GSimpleAction *a, GVariant *p, gpointer d) \
gpointer user_data) { app_menu_action(d, id); }
{ WIN_ACTION_LIST(WIN_ACTION_CALLBACK)
paste_menu_action(user_data); #undef WIN_ACTION_CALLBACK
}
static const GActionEntry win_actions[] = { static const GActionEntry win_actions[] = {
{ "copy", copy_cb }, #define WIN_ACTION_ENTRY(name, id) { name, win_action_cb_ ## id },
{ "paste", paste_cb }, WIN_ACTION_LIST(WIN_ACTION_ENTRY)
#undef WIN_ACTION_ENTRY
}; };
static GtkApplication *app; static GtkApplication *app;

View File

@ -3252,17 +3252,20 @@ void init_clipboard(struct gui_data *inst)
#endif /* JUST_USE_GTK_CLIPBOARD_UTF8 */ #endif /* JUST_USE_GTK_CLIPBOARD_UTF8 */
void copy_menu_action(void *frontend) void app_menu_action(void *frontend, enum MenuAction action)
{ {
struct gui_data *inst = (struct gui_data *)frontend; struct gui_data *inst = (struct gui_data *)frontend;
static const int clips[] = { MENU_CLIPBOARD }; switch (action) {
term_request_copy(inst->term, clips, lenof(clips)); case MA_COPY:
} {
static const int clips[] = { MENU_CLIPBOARD };
void paste_menu_action(void *frontend) term_request_copy(inst->term, clips, lenof(clips));
{ }
struct gui_data *inst = (struct gui_data *)frontend; break;
term_request_paste(inst->term, MENU_CLIPBOARD); case MA_PASTE:
term_request_paste(inst->term, MENU_CLIPBOARD);
break;
}
} }
static void set_window_titles(struct gui_data *inst) static void set_window_titles(struct gui_data *inst)

View File

@ -184,9 +184,11 @@ GtkWidget *make_gtk_toplevel_window(void *frontend);
/* Defined in gtkcomm.c */ /* Defined in gtkcomm.c */
void gtkcomm_setup(void); void gtkcomm_setup(void);
/* Defined in gtkwin.c */ /* Used to pass application-menu operations from gtkapp.c to gtkwin.c */
void copy_menu_action(void *frontend); enum MenuAction {
void paste_menu_action(void *frontend); MA_COPY, MA_PASTE,
};
void app_menu_action(void *frontend, enum MenuAction);
/* Things pty.c needs from pterm.c */ /* Things pty.c needs from pterm.c */
const char *get_x_display(void *frontend); const char *get_x_display(void *frontend);