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:
parent
31080bf8a7
commit
2065fb647f
@ -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;
|
||||||
|
@ -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)
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user