diff --git a/xed/xed-app.c b/xed/xed-app.c index 62ffd3d..0524545 100644 --- a/xed/xed-app.c +++ b/xed/xed-app.c @@ -979,6 +979,17 @@ load_print_settings (XedApp *app) } } +static void +setup_actions (XedApp *app) +{ + GSimpleAction *action; + + action = g_simple_action_new ("print-now", NULL); + + g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (action)); + g_object_unref (action); +} + static void xed_app_init (XedApp *app) { @@ -994,6 +1005,8 @@ xed_app_init (XedApp *app) #endif load_accels (); + + setup_actions (app); } static gboolean diff --git a/xed/xed-commands-file-print.c b/xed/xed-commands-file-print.c index db72b9c..f8160cc 100644 --- a/xed/xed-commands-file-print.c +++ b/xed/xed-commands-file-print.c @@ -66,6 +66,6 @@ _xed_cmd_file_print (GtkAction *action, if (tab == NULL) return; - _xed_tab_print (tab); + _xed_tab_print (tab, TRUE); } diff --git a/xed/xed-print-preview.c b/xed/xed-print-preview.c index dddf2f8..1d99953 100644 --- a/xed/xed-print-preview.c +++ b/xed/xed-print-preview.c @@ -57,6 +57,7 @@ struct _XedPrintPreviewPrivate GtkWidget *zoom_fit; GtkWidget *zoom_in; GtkWidget *zoom_out; + GtkWidget *print_now; /* real size of the page in inches */ double paper_w; @@ -534,6 +535,16 @@ zoom_out_button_clicked (GtkWidget *button, zoom_out (preview); } +static void +print_now_button_clicked (GtkWidget *button, + XedPrintPreview *preview) +{ + GAction *action = g_action_map_lookup_action (G_ACTION_MAP (g_application_get_default ()), + "print-now"); + + g_action_activate (action, NULL); +} + static void close_button_clicked (GtkWidget *button, XedPrintPreview *preview) @@ -679,6 +690,23 @@ create_bar (XedPrintPreview *preview) box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add (GTK_CONTAINER (i), box); + priv->print_now = gtk_button_new_from_icon_name ("document-print-symbolic", GTK_ICON_SIZE_MENU); + gtk_box_pack_start (GTK_BOX (box), priv->print_now, FALSE, FALSE, 0); + gtk_widget_set_tooltip_text (priv->print_now, _("Print this document")); + g_signal_connect (priv->print_now, "clicked", + G_CALLBACK (print_now_button_clicked), preview); + + gtk_widget_show_all (GTK_WIDGET (i)); + + i = gtk_separator_tool_item_new (); + gtk_widget_show (GTK_WIDGET (i)); + gtk_toolbar_insert (GTK_TOOLBAR (toolbar), i, -1); + + i = gtk_tool_item_new (); + gtk_toolbar_insert (GTK_TOOLBAR (toolbar), i, -1); + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_container_add (GTK_CONTAINER (i), box); + close_button = gtk_button_new_with_mnemonic (_("_Close preview")); gtk_box_pack_start (GTK_BOX (box), close_button, FALSE, FALSE, 0); gtk_widget_set_tooltip_text (close_button, _("Close print preview")); diff --git a/xed/xed-tab.c b/xed/xed-tab.c index 12e5ac0..45498ec 100644 --- a/xed/xed-tab.c +++ b/xed/xed-tab.c @@ -273,6 +273,11 @@ xed_tab_dispose (GObject *object) clear_loading (tab); + GAction *action = g_action_map_lookup_action (G_ACTION_MAP (g_application_get_default ()), + "print-now"); + + g_signal_handlers_disconnect_by_data (action, tab); + G_OBJECT_CLASS (xed_tab_parent_class)->dispose (object); } @@ -1147,6 +1152,14 @@ view_focused_in (GtkWidget *widget, return GDK_EVENT_PROPAGATE; } +static void +print_now_action_cb (XedTab *tab) +{ + g_return_if_fail (XED_IS_TAB (tab)); + + _xed_tab_print (tab, FALSE); +} + static void xed_tab_init (XedTab *tab) { @@ -1198,6 +1211,12 @@ xed_tab_init (XedTab *tab) G_CALLBACK (view_focused_in), tab); g_signal_connect_after (view, "realize", G_CALLBACK (view_realized), tab); + + GAction *action = g_action_map_lookup_action (G_ACTION_MAP (g_application_get_default ()), + "print-now"); + + g_signal_connect_swapped (action, "activate", + G_CALLBACK (print_now_action_cb), tab); } GtkWidget * @@ -2811,7 +2830,8 @@ xed_tab_print_or_print_preview (XedTab *tab, } void -_xed_tab_print (XedTab *tab) +_xed_tab_print (XedTab *tab, + gboolean with_dialog) { g_return_if_fail (XED_IS_TAB (tab)); @@ -2823,7 +2843,14 @@ _xed_tab_print (XedTab *tab) gtk_widget_destroy (tab->priv->print_preview); } - xed_tab_print_or_print_preview (tab, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG); + if (with_dialog) + { + xed_tab_print_or_print_preview (tab, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG); + } + else + { + xed_tab_print_or_print_preview (tab, GTK_PRINT_OPERATION_ACTION_PRINT); + } } void diff --git a/xed/xed-tab.h b/xed/xed-tab.h index 40ee976..ac5a374 100644 --- a/xed/xed-tab.h +++ b/xed/xed-tab.h @@ -153,7 +153,7 @@ void _xed_tab_save_as_async (XedTab *tab, GAsyncReadyCallback callback, gpointer user_data); -void _xed_tab_print (XedTab *tab); +void _xed_tab_print (XedTab *tab, gboolean show_dialog); void _xed_tab_print_preview (XedTab *tab); void _xed_tab_mark_for_closing (XedTab *tab); gboolean _xed_tab_get_can_close (XedTab *tab);