diff options
author | Iulian Radu <iulian.radu67@gmail.com> | 2016-05-14 18:18:16 +0300 |
---|---|---|
committer | Iulian Radu <iulian.radu67@gmail.com> | 2016-07-28 15:27:00 +0300 |
commit | a1e475d081df860182d95ac0859b834b94a814b2 (patch) | |
tree | eeb057052b594bde12e9bbd0f9c39fb9469cc30a | |
parent | 047e0c653b58ae8c3f3ca7f58f496aa51d15fe54 (diff) | |
download | epiphany-a1e475d081df860182d95ac0859b834b94a814b2.tar.gz |
Port undo/redo and cut/copy/paste to GAction (wip)
-rw-r--r-- | src/ephy-toolbar.c | 6 | ||||
-rw-r--r-- | src/ephy-toolbar.h | 2 | ||||
-rw-r--r-- | src/ephy-window.c | 197 | ||||
-rw-r--r-- | src/resources/epiphany-ui.xml | 7 | ||||
-rw-r--r-- | src/resources/gtk/menus.ui | 12 | ||||
-rw-r--r-- | src/window-commands.c | 141 | ||||
-rw-r--r-- | src/window-commands.h | 35 |
7 files changed, 242 insertions, 158 deletions
diff --git a/src/ephy-toolbar.c b/src/ephy-toolbar.c index 4e7e4f43f..abc09c504 100644 --- a/src/ephy-toolbar.c +++ b/src/ephy-toolbar.c @@ -348,3 +348,9 @@ ephy_toolbar_get_title_box (EphyToolbar *toolbar) { return toolbar->title_box; } + +GMenu * +ephy_toolbar_get_page_menu (EphyToolbar *toolbar) +{ + return toolbar->page_menu; +} diff --git a/src/ephy-toolbar.h b/src/ephy-toolbar.h index 8e4dbb194..bde62d6f1 100644 --- a/src/ephy-toolbar.h +++ b/src/ephy-toolbar.h @@ -36,6 +36,8 @@ GtkWidget *ephy_toolbar_get_location_entry (EphyToolbar *toolbar); EphyTitleBox *ephy_toolbar_get_title_box (EphyToolbar *toolbar); +GMenu *ephy_toolbar_get_page_menu (EphyToolbar *toolbar); + G_END_DECLS #endif /* EPHY_TOOLBAR_H */ diff --git a/src/ephy-window.c b/src/ephy-window.c index 627252028..9f103a437 100644 --- a/src/ephy-window.c +++ b/src/ephy-window.c @@ -104,21 +104,6 @@ static const GtkActionEntry ephy_menu_entries [] = { G_CALLBACK (window_cmd_file_quit) }, /* Edit actions. */ - - { "EditUndo", NULL, N_("_Undo"), "<control>Z", NULL, - G_CALLBACK (window_cmd_edit_undo) }, - { "EditRedo", NULL, N_("Re_do"), "<shift><control>Z", NULL, - G_CALLBACK (window_cmd_edit_redo) }, - { "EditCut", NULL, N_("Cu_t"), "<control>X", NULL, - G_CALLBACK (window_cmd_edit_cut) }, - { "EditCopy", NULL, N_("_Copy"), "<control>C", NULL, - G_CALLBACK (window_cmd_edit_copy) }, - { "EditPaste", NULL, N_("_Paste"), "<control>V", NULL, - G_CALLBACK (window_cmd_edit_paste) }, - { "EditDelete", NULL, NULL, NULL, NULL, - G_CALLBACK (window_cmd_edit_delete) }, - { "EditSelectAll", NULL, N_("Select _All"), "<control>A", NULL, - G_CALLBACK (window_cmd_edit_select_all) }, { "EditBookmarks", NULL, N_("Edit _Bookmarks"), "<control>B", NULL, G_CALLBACK (window_cmd_edit_bookmarks) }, { "EditHistory", NULL, N_("_History"), "<control>H", NULL, @@ -887,11 +872,11 @@ update_link_actions_sensitivity (EphyWindow *window, static void update_edit_action_sensitivity (EphyWindow *window, const gchar *action_name, gboolean sensitive, gboolean hide) { - GtkAction *action; + GAction *action; - action = gtk_action_group_get_action (window->action_group, action_name); - gtk_action_set_sensitive (action, sensitive); - gtk_action_set_visible (action, !hide || sensitive); + action = g_action_map_lookup_action (G_ACTION_MAP (window), action_name); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), sensitive); + // TODO: do something with hide } typedef struct { @@ -969,59 +954,51 @@ update_edit_actions_sensitivity (EphyWindow *window, gboolean hide) view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed); - data = can_edit_command_async_data_new (window, "EditCopy", hide); + data = can_edit_command_async_data_new (window, "copy", hide); webkit_web_view_can_execute_editing_command (view, WEBKIT_EDITING_COMMAND_COPY, NULL, (GAsyncReadyCallback)can_edit_command_callback, data); - data = can_edit_command_async_data_new (window, "EditCut", hide); + data = can_edit_command_async_data_new (window, "cut", hide); webkit_web_view_can_execute_editing_command (view, WEBKIT_EDITING_COMMAND_CUT, NULL, (GAsyncReadyCallback)can_edit_command_callback, data); - data = can_edit_command_async_data_new (window, "EditPaste", hide); + data = can_edit_command_async_data_new (window, "paste", hide); webkit_web_view_can_execute_editing_command (view, WEBKIT_EDITING_COMMAND_PASTE, NULL, (GAsyncReadyCallback)can_edit_command_callback, data); - data = can_edit_command_async_data_new (window, "EditUndo", hide); - webkit_web_view_can_execute_editing_command (view, "Undo", NULL, + data = can_edit_command_async_data_new (window, "undo", hide); + webkit_web_view_can_execute_editing_command (view, WEBKIT_EDITING_COMMAND_UNDO, NULL, (GAsyncReadyCallback)can_edit_command_callback, data); - data = can_edit_command_async_data_new (window, "EditRedo", hide); - webkit_web_view_can_execute_editing_command (view, "Redo", NULL, + data = can_edit_command_async_data_new (window, "redo", hide); + webkit_web_view_can_execute_editing_command (view, WEBKIT_EDITING_COMMAND_REDO, NULL, (GAsyncReadyCallback)can_edit_command_callback, data); return; } - update_edit_action_sensitivity (window, "EditCopy", can_copy, hide); - update_edit_action_sensitivity (window, "EditCut", can_cut, hide); - update_edit_action_sensitivity (window, "EditPaste", can_paste, hide); - update_edit_action_sensitivity (window, "EditUndo", can_undo, hide); - update_edit_action_sensitivity (window, "EditRedo", can_redo, hide); + update_edit_action_sensitivity (window, "cut", can_cut, hide); + update_edit_action_sensitivity (window, "copy", can_copy, hide); + update_edit_action_sensitivity (window, "paste", can_paste, hide); + update_edit_action_sensitivity (window, "undo", can_undo, hide); + update_edit_action_sensitivity (window, "redo", can_redo, hide); } static void enable_edit_actions_sensitivity (EphyWindow *window) { - GtkActionGroup *action_group; - GtkAction *action; - - action_group = window->action_group; + GAction *action; - action = gtk_action_group_get_action (action_group, "EditCopy"); - gtk_action_set_sensitive (action, TRUE); - gtk_action_set_visible (action, TRUE); - action = gtk_action_group_get_action (action_group, "EditCut"); - gtk_action_set_sensitive (action, TRUE); - gtk_action_set_visible (action, TRUE); - action = gtk_action_group_get_action (action_group, "EditPaste"); - gtk_action_set_sensitive (action, TRUE); - gtk_action_set_visible (action, TRUE); - action = gtk_action_group_get_action (action_group, "EditUndo"); - gtk_action_set_sensitive (action, TRUE); - gtk_action_set_visible (action, TRUE); - action = gtk_action_group_get_action (action_group, "EditRedo"); - gtk_action_set_sensitive (action, TRUE); - gtk_action_set_visible (action, TRUE); + action = g_action_map_lookup_action (G_ACTION_MAP (window), "cut"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + action = g_action_map_lookup_action (G_ACTION_MAP (window), "copy"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + action = g_action_map_lookup_action (G_ACTION_MAP (window), "paste"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + action = g_action_map_lookup_action (G_ACTION_MAP (window), "undo"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + action = g_action_map_lookup_action (G_ACTION_MAP (window), "redo"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); } static void @@ -1487,6 +1464,82 @@ add_action_to_context_menu (WebKitContextMenu *context_menu, webkit_context_menu_append (context_menu, webkit_context_menu_item_new (action)); } +static const gchar * +action_name_to_label_for_model (GMenuModel *menu_model, const gchar *action_name) +{ + GMenuLinkIter *link_iter; + gint n_items; + gint i, j; + + printf("Finding %s\n", action_name); + n_items = g_menu_model_get_n_items (menu_model); + + for (i = 0; i < n_items; i++) { + link_iter = g_menu_model_iterate_item_links (menu_model, i); + while (g_menu_link_iter_next (link_iter)) { + GMenuModel *link_model = NULL; + GVariant *action; + gint link_model_n_items; + + link_model = g_menu_link_iter_get_value (link_iter); + link_model_n_items = g_menu_model_get_n_items (link_model); + + for (j = 0; j < link_model_n_items; j++) { + action = g_menu_model_get_item_attribute_value (link_model, j, G_MENU_ATTRIBUTE_ACTION, G_VARIANT_TYPE_STRING); + printf("g_variant_get_string %s\n", g_variant_get_string (action, NULL)); + if (g_strcmp0 (strchr (g_variant_get_string (action, NULL), '.') + 1, action_name) == 0) { + GVariant *label; + + label = g_menu_model_get_item_attribute_value (link_model, j, G_MENU_ATTRIBUTE_LABEL, G_VARIANT_TYPE_STRING); + + return g_variant_get_string (label, NULL); + } + } + } + } + + g_assert_not_reached (); + return NULL; +} + +static void +action_activate_cb (GtkAction *action, gpointer user_data) +{ + g_action_activate (G_ACTION (user_data), NULL); +} + +static WebKitContextMenuItem* +webkit_context_menu_item_new_from_gaction (GAction *action, const gchar *label) +{ + GtkAction *gtk_action; + WebKitContextMenuItem *item; + + gtk_action = gtk_action_new (g_action_get_name (action), label, NULL, NULL); + g_signal_connect (gtk_action, "activate", + G_CALLBACK (action_activate_cb), action); + + g_object_bind_property (action, "enabled", gtk_action, "sensitive", G_BINDING_BIDIRECTIONAL); + + item = webkit_context_menu_item_new (gtk_action); + + return item; +} + +static void +new_add_action_to_context_menu (WebKitContextMenu *context_menu, + GActionGroup *action_group, + const char *action_name) +{ + GAction *action; + EphyToolbar *toolbar; + const gchar *label; + + toolbar = EPHY_TOOLBAR (EPHY_WINDOW (action_group)->toolbar); + action = g_action_map_lookup_action (G_ACTION_MAP (action_group), action_name); + label = action_name_to_label_for_model (G_MENU_MODEL (ephy_toolbar_get_page_menu (toolbar)), action_name); + webkit_context_menu_append (context_menu, webkit_context_menu_item_new_from_gaction (action, label)); +} + static void add_item_to_context_menu (WebKitContextMenu *context_menu, WebKitContextMenuItem *item) @@ -1681,8 +1734,8 @@ populate_context_menu (WebKitWebView *web_view, webkit_context_menu_append (context_menu, webkit_context_menu_item_new_separator ()); } - add_action_to_context_menu (context_menu, - window->action_group, "EditCopy"); + new_add_action_to_context_menu (context_menu, + G_ACTION_GROUP (window), "copy"); if (can_search_selection) add_action_to_context_menu (context_menu, window->popups_action_group, "SearchSelection"); @@ -1718,22 +1771,22 @@ populate_context_menu (WebKitWebView *web_view, update_edit_actions_sensitivity (window, FALSE); - add_action_to_context_menu (context_menu, - window->action_group, "EditUndo"); - add_action_to_context_menu (context_menu, - window->action_group, "EditRedo"); + new_add_action_to_context_menu (context_menu, + G_ACTION_GROUP (window), "undo"); + new_add_action_to_context_menu (context_menu, + G_ACTION_GROUP (window), "redo"); webkit_context_menu_append (context_menu, webkit_context_menu_item_new_separator ()); - add_action_to_context_menu (context_menu, - window->action_group, "EditCut"); - add_action_to_context_menu (context_menu, - window->action_group, "EditCopy"); - add_action_to_context_menu (context_menu, - window->action_group, "EditPaste"); + new_add_action_to_context_menu (context_menu, + G_ACTION_GROUP (window), "cut"); + new_add_action_to_context_menu (context_menu, + G_ACTION_GROUP (window), "copy"); + new_add_action_to_context_menu (context_menu, + G_ACTION_GROUP (window), "paste"); webkit_context_menu_append (context_menu, webkit_context_menu_item_new_separator ()); - add_action_to_context_menu (context_menu, - window->action_group, "EditSelectAll"); + new_add_action_to_context_menu (context_menu, + G_ACTION_GROUP (window), "select-all"); if (input_methods_item || unicode_item) webkit_context_menu_append (context_menu, webkit_context_menu_item_new_separator ()); @@ -1755,8 +1808,8 @@ populate_context_menu (WebKitWebView *web_view, webkit_context_menu_item_new_separator ()); } - add_action_to_context_menu (context_menu, - window->action_group, "EditCopy"); + new_add_action_to_context_menu (context_menu, + G_ACTION_GROUP (window), "copy"); if (can_search_selection) add_action_to_context_menu (context_menu, window->popups_action_group, "SearchSelection"); @@ -3095,11 +3148,13 @@ static const GActionEntry new_ephy_page_menu_entries [] = // { "open", }, // { "save-as", } // { "save-as-application", } - // { "undo", }, - // { "redo", }, - // { "cut", }, - // { "copy", }, - // { "paste", }, + { "undo", window_cmd_edit_undo }, + { "redo", window_cmd_edit_redo }, + { "cut", window_cmd_edit_cut }, + { "copy", window_cmd_edit_copy }, + { "paste", window_cmd_edit_paste }, + { "delete", window_cmd_edit_delete }, + { "select-all", window_cmd_edit_select_all }, { "zoom-in", window_cmd_view_zoom_in }, { "zoom-out", window_cmd_view_zoom_out }, { "zoom-normal", window_cmd_view_zoom_normal }, diff --git a/src/resources/epiphany-ui.xml b/src/resources/epiphany-ui.xml index 85e94add1..ea02b1932 100644 --- a/src/resources/epiphany-ui.xml +++ b/src/resources/epiphany-ui.xml @@ -18,13 +18,6 @@ <menuitem name="FileSaveAsMenu" action="FileSaveAs"/> <menuitem name="FileSaveAsApplicationMenu" action="FileSaveAsApplication"/> <separator name="FileSep2"/> - <menuitem name="EditUndoMenu" action="EditUndo"/> - <menuitem name="EditRedoMenu" action="EditRedo"/> - <separator name="EditSep2"/> - <menuitem name="EditCutMenu" action="EditCut"/> - <menuitem name="EditCopyMenu" action="EditCopy"/> - <menuitem name="EditPasteMenu" action="EditPaste"/> - <separator name="EditSep3"/> <menuitem name="EditPreferencesMenu" action="EditPreferences"/> <separator name="FileSep4"/> <menuitem name="HistoryEditMenu" action="EditHistory"/> diff --git a/src/resources/gtk/menus.ui b/src/resources/gtk/menus.ui index a8a4dd8dd..c9e315b5d 100644 --- a/src/resources/gtk/menus.ui +++ b/src/resources/gtk/menus.ui @@ -17,8 +17,8 @@ <attribute name="action">win.save-as</attribute> <attribute name="label" translatable="yes">Save As _Web Application…</attribute> <attribute name="action">win.save-as-application</attribute> - </section> - <section> + </section> --> + <section id="undo-redo"> <item> <attribute name="label" translatable="yes">_Undo</attribute> <attribute name="action">win.undo</attribute> @@ -41,7 +41,13 @@ <attribute name="label" translatable="yes">_Paste</attribute> <attribute name="action">win.paste</attribute> </item> - </section> --> + </section> + <section> + <item> + <attribute name="label" translatable="yes">Select _All</attribute> + <attribute name="action">win.select-all</attribute> + </item> + </section> <section> <item> <attribute name="label" translatable="yes">Zoom _In</attribute> diff --git a/src/window-commands.c b/src/window-commands.c index 3716da166..d9e5f8548 100644 --- a/src/window-commands.c +++ b/src/window-commands.c @@ -877,9 +877,60 @@ window_cmd_file_new_incognito_window (GtkAction *action, } void -window_cmd_edit_undo (GtkAction *action, - EphyWindow *window) +window_cmd_edit_bookmarks (GtkAction *action, + EphyWindow *window) +{ + GtkWidget *bwindow; + + bwindow = ephy_shell_get_bookmarks_editor (ephy_shell_get_default ()); + gtk_window_present (GTK_WINDOW (bwindow)); +} + +void +window_cmd_edit_history (GtkAction *action, + EphyWindow *window) +{ + GtkWidget *hwindow; + + hwindow = ephy_shell_get_history_window (ephy_shell_get_default ()); + + if (GTK_WINDOW (window) != gtk_window_get_transient_for (GTK_WINDOW (hwindow))) + gtk_window_set_transient_for (GTK_WINDOW (hwindow), + GTK_WINDOW (window)); + gtk_window_present (GTK_WINDOW (hwindow)); +} + +void +window_cmd_edit_preferences (GtkAction *action, + EphyWindow *window) +{ + GtkWindow *dialog; + + dialog = GTK_WINDOW (ephy_shell_get_prefs_dialog (ephy_shell_get_default ())); + + if (GTK_WINDOW (window) != gtk_window_get_transient_for (dialog)) + gtk_window_set_transient_for (dialog, + GTK_WINDOW (window)); + + gtk_window_present (dialog); +} + +void +window_cmd_view_fullscreen (GtkAction *action, + EphyWindow *window) +{ + if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) + gtk_window_fullscreen (GTK_WINDOW (window)); + else + gtk_window_unfullscreen (GTK_WINDOW (window)); +} + +void +window_cmd_edit_undo (GSimpleAction *action, + GVariant *value, + gpointer user_data) { + EphyWindow *window = user_data; GtkWidget *widget; GtkWidget *embed; GtkWidget *location_entry; @@ -899,9 +950,11 @@ window_cmd_edit_undo (GtkAction *action, } void -window_cmd_edit_redo (GtkAction *action, - EphyWindow *window) +window_cmd_edit_redo (GSimpleAction *action, + GVariant *value, + gpointer user_data) { + EphyWindow *window = user_data; GtkWidget *widget; GtkWidget *embed; GtkWidget *location_entry; @@ -919,9 +972,11 @@ window_cmd_edit_redo (GtkAction *action, } } void -window_cmd_edit_cut (GtkAction *action, - EphyWindow *window) +window_cmd_edit_cut (GSimpleAction *action, + GVariant *value, + gpointer user_data) { + EphyWindow *window = user_data; GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (window)); if (GTK_IS_EDITABLE (widget)) { @@ -936,9 +991,11 @@ window_cmd_edit_cut (GtkAction *action, } void -window_cmd_edit_copy (GtkAction *action, - EphyWindow *window) +window_cmd_edit_copy (GSimpleAction *action, + GVariant *value, + gpointer user_data) { + EphyWindow *window = user_data; GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (window)); if (GTK_IS_EDITABLE (widget)) { @@ -954,9 +1011,11 @@ window_cmd_edit_copy (GtkAction *action, } void -window_cmd_edit_paste (GtkAction *action, - EphyWindow *window) +window_cmd_edit_paste (GSimpleAction *action, + GVariant *value, + gpointer user_data) { + EphyWindow *window = user_data; GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (window)); if (GTK_IS_EDITABLE (widget)) { @@ -972,9 +1031,11 @@ window_cmd_edit_paste (GtkAction *action, } void -window_cmd_edit_delete (GtkAction *action, - EphyWindow *window) +window_cmd_edit_delete (GSimpleAction *action, + GVariant *value, + gpointer user_data) { + EphyWindow *window = user_data; GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (window)); if (GTK_IS_EDITABLE (widget)) { @@ -994,9 +1055,12 @@ window_cmd_edit_delete (GtkAction *action, } void -window_cmd_edit_select_all (GtkAction *action, - EphyWindow *window) +window_cmd_edit_select_all (GSimpleAction *action, + GVariant *value, + gpointer user_data) { + EphyWindow *window = user_data; + GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (window)); if (GTK_IS_EDITABLE (widget)) { @@ -1013,55 +1077,6 @@ window_cmd_edit_select_all (GtkAction *action, } void -window_cmd_edit_bookmarks (GtkAction *action, - EphyWindow *window) -{ - GtkWidget *bwindow; - - bwindow = ephy_shell_get_bookmarks_editor (ephy_shell_get_default ()); - gtk_window_present (GTK_WINDOW (bwindow)); -} - -void -window_cmd_edit_history (GtkAction *action, - EphyWindow *window) -{ - GtkWidget *hwindow; - - hwindow = ephy_shell_get_history_window (ephy_shell_get_default ()); - - if (GTK_WINDOW (window) != gtk_window_get_transient_for (GTK_WINDOW (hwindow))) - gtk_window_set_transient_for (GTK_WINDOW (hwindow), - GTK_WINDOW (window)); - gtk_window_present (GTK_WINDOW (hwindow)); -} - -void -window_cmd_edit_preferences (GtkAction *action, - EphyWindow *window) -{ - GtkWindow *dialog; - - dialog = GTK_WINDOW (ephy_shell_get_prefs_dialog (ephy_shell_get_default ())); - - if (GTK_WINDOW (window) != gtk_window_get_transient_for (dialog)) - gtk_window_set_transient_for (dialog, - GTK_WINDOW (window)); - - gtk_window_present (dialog); -} - -void -window_cmd_view_fullscreen (GtkAction *action, - EphyWindow *window) -{ - if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) - gtk_window_fullscreen (GTK_WINDOW (window)); - else - gtk_window_unfullscreen (GTK_WINDOW (window)); -} - -void window_cmd_file_print (GSimpleAction *action, GVariant *value, gpointer user_data) diff --git a/src/window-commands.h b/src/window-commands.h index 3c40b64a9..83f260663 100644 --- a/src/window-commands.h +++ b/src/window-commands.h @@ -44,24 +44,31 @@ void window_cmd_file_send_to (GtkAction *action, EphyWindow *window); void window_cmd_file_close_window (GtkAction *action, EphyWindow *window); -void window_cmd_edit_undo (GtkAction *action, - EphyWindow *window); -void window_cmd_edit_redo (GtkAction *action, - EphyWindow *window); -void window_cmd_edit_cut (GtkAction *action, - EphyWindow *window); -void window_cmd_edit_copy (GtkAction *action, - EphyWindow *window); -void window_cmd_edit_paste (GtkAction *action, - EphyWindow *window); -void window_cmd_edit_delete (GtkAction *action, - EphyWindow *window); -void window_cmd_edit_select_all (GtkAction *action, - EphyWindow *window); void window_cmd_view_encoding (GtkAction *action, EphyWindow *window); void window_cmd_view_fullscreen (GtkAction *action, EphyWindow *window); +void window_cmd_edit_undo (GSimpleAction *action, + GVariant *value, + gpointer user_data); +void window_cmd_edit_redo (GSimpleAction *action, + GVariant *value, + gpointer user_data); +void window_cmd_edit_cut (GSimpleAction *action, + GVariant *value, + gpointer user_data); +void window_cmd_edit_copy (GSimpleAction *action, + GVariant *value, + gpointer user_data); +void window_cmd_edit_paste (GSimpleAction *action, + GVariant *value, + gpointer user_data); +void window_cmd_edit_delete (GSimpleAction *action, + GVariant *value, + gpointer user_data); +void window_cmd_edit_select_all (GSimpleAction *action, + GVariant *value, + gpointer user_data); void window_cmd_file_print (GSimpleAction *action, GVariant *value, gpointer user_data); |