summaryrefslogtreecommitdiff
path: root/gtk/gtkprintunixdialog.c
diff options
context:
space:
mode:
authorWilliam Jon McCann <william.jon.mccann@gmail.com>2013-12-08 15:38:43 +0100
committerMatthias Clasen <mclasen@redhat.com>2014-01-17 17:52:08 -0500
commitbb951fe783cc038714fcb07f8f76b80cdd1b811e (patch)
tree06ff971d91166b3634f736537661b78dae59ede2 /gtk/gtkprintunixdialog.c
parentdfaa4857f5b8d1838a2f1dbe97acdd3a89447d4e (diff)
downloadgtk+-bb951fe783cc038714fcb07f8f76b80cdd1b811e.tar.gz
print dialog: Use headerbar
Make the print dialog use a headerbar when desired. https://bugzilla.gnome.org/show_bug.cgi?id=720059
Diffstat (limited to 'gtk/gtkprintunixdialog.c')
-rw-r--r--gtk/gtkprintunixdialog.c47
1 files changed, 41 insertions, 6 deletions
diff --git a/gtk/gtkprintunixdialog.c b/gtk/gtkprintunixdialog.c
index 1bc7617268..acbfc3c1c0 100644
--- a/gtk/gtkprintunixdialog.c
+++ b/gtk/gtkprintunixdialog.c
@@ -55,6 +55,7 @@
#include "gtkintl.h"
#include "gtkprivate.h"
#include "gtktypebuiltins.h"
+#include "gtkdialogprivate.h"
/**
@@ -132,6 +133,9 @@
#define RULER_RADIUS 2
+static GObject *gtk_print_unix_dialog_constructor (GType type,
+ guint n_params,
+ GObjectConstructParam *params);
static void gtk_print_unix_dialog_destroy (GtkPrintUnixDialog *dialog);
static void gtk_print_unix_dialog_finalize (GObject *object);
static void gtk_print_unix_dialog_set_property (GObject *object,
@@ -307,7 +311,6 @@ struct GtkPrintUnixDialogPrivate
GtkWidget *print_at_radio;
GtkWidget *print_at_entry;
GtkWidget *print_hold_radio;
- GtkWidget *preview_button;
GtkWidget *paper_size_combo;
GtkWidget *paper_size_combo_label;
GtkCellRenderer *paper_size_renderer;
@@ -401,6 +404,7 @@ gtk_print_unix_dialog_class_init (GtkPrintUnixDialogClass *class)
object_class = (GObjectClass *) class;
widget_class = (GtkWidgetClass *) class;
+ object_class->constructor = gtk_print_unix_dialog_constructor;
object_class->finalize = gtk_print_unix_dialog_finalize;
object_class->set_property = gtk_print_unix_dialog_set_property;
object_class->get_property = gtk_print_unix_dialog_get_property;
@@ -514,7 +518,6 @@ gtk_print_unix_dialog_class_init (GtkPrintUnixDialogClass *class)
gtk_widget_class_bind_template_child_private (widget_class, GtkPrintUnixDialog, print_at_radio);
gtk_widget_class_bind_template_child_private (widget_class, GtkPrintUnixDialog, print_at_entry);
gtk_widget_class_bind_template_child_private (widget_class, GtkPrintUnixDialog, print_hold_radio);
- gtk_widget_class_bind_template_child_private (widget_class, GtkPrintUnixDialog, preview_button);
gtk_widget_class_bind_template_child_private (widget_class, GtkPrintUnixDialog, paper_size_combo);
gtk_widget_class_bind_template_child_private (widget_class, GtkPrintUnixDialog, paper_size_combo_label);
gtk_widget_class_bind_template_child_private (widget_class, GtkPrintUnixDialog, paper_size_renderer);
@@ -743,6 +746,13 @@ gtk_print_unix_dialog_init (GtkPrintUnixDialog *dialog)
priv->has_selection = FALSE;
gtk_widget_init_template (GTK_WIDGET (dialog));
+ gtk_dialog_set_use_header_bar_from_setting (GTK_DIALOG (dialog));
+ gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+ _("Pre_view"), GTK_RESPONSE_APPLY,
+ _("_Cancel"), GTK_RESPONSE_CANCEL,
+ _("_Print"), GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
/* Treeview auxilary functions need to be setup here */
gtk_tree_model_filter_set_visible_func (priv->printer_list_filter,
@@ -794,6 +804,32 @@ gtk_print_unix_dialog_init (GtkPrintUnixDialog *dialog)
_gtk_print_load_custom_papers (priv->custom_paper_list);
}
+static GObject *
+gtk_print_unix_dialog_constructor (GType type,
+ guint n_params,
+ GObjectConstructParam *params)
+{
+ GObject *object;
+ gboolean use_header;
+
+ object = G_OBJECT_CLASS (gtk_print_unix_dialog_parent_class)->constructor (type, n_params, params);
+
+ g_object_get (object, "use-header-bar", &use_header, NULL);
+ if (use_header)
+ {
+ /* Reorder the preview button */
+ GtkWidget *button, *parent;
+ button = gtk_dialog_get_widget_for_response (GTK_DIALOG (object), GTK_RESPONSE_APPLY);
+ g_object_ref (button);
+ parent = gtk_widget_get_parent (button);
+ gtk_container_remove (GTK_CONTAINER (parent), button);
+ gtk_header_bar_pack_end (GTK_HEADER_BAR (parent), button);
+ g_object_unref (button);
+ }
+
+ return object;
+}
+
static void
gtk_print_unix_dialog_destroy (GtkPrintUnixDialog *dialog)
{
@@ -1612,6 +1648,7 @@ update_dialog_from_capabilities (GtkPrintUnixDialog *dialog)
GtkPrintUnixDialogPrivate *priv = dialog->priv;
gboolean can_collate;
const gchar *copies;
+ GtkWidget *button;
copies = gtk_entry_get_text (GTK_ENTRY (priv->copies_spin));
can_collate = (*copies != '\0' && atoi (copies) > 1);
@@ -1632,10 +1669,8 @@ update_dialog_from_capabilities (GtkPrintUnixDialog *dialog)
gtk_widget_set_sensitive (GTK_WIDGET (priv->pages_per_sheet),
caps & GTK_PRINT_CAPABILITY_NUMBER_UP);
- if (caps & GTK_PRINT_CAPABILITY_PREVIEW)
- gtk_widget_show (priv->preview_button);
- else
- gtk_widget_hide (priv->preview_button);
+ button = gtk_dialog_get_widget_for_response (GTK_DIALOG (dialog), GTK_RESPONSE_APPLY);
+ gtk_widget_set_visible (button, (caps & GTK_PRINT_CAPABILITY_PREVIEW) != 0);
update_collate_icon (NULL, dialog);