aboutsummaryrefslogtreecommitdiffstats
path: root/embed/print-dialog.c
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2005-07-24 05:31:19 +0800
committerChristian Persch <chpe@src.gnome.org>2005-07-24 05:31:19 +0800
commit057680fd0b25cc7bf90598f50bd2088ca4aa87ac (patch)
treef4580dd6c00b2707304b231a043502654e8aa4cd /embed/print-dialog.c
parent7c8cd0db552da2366754cd7616e3ae9baec3b33a (diff)
downloadgsoc2013-epiphany-057680fd0b25cc7bf90598f50bd2088ca4aa87ac.tar
gsoc2013-epiphany-057680fd0b25cc7bf90598f50bd2088ca4aa87ac.tar.gz
gsoc2013-epiphany-057680fd0b25cc7bf90598f50bd2088ca4aa87ac.tar.bz2
gsoc2013-epiphany-057680fd0b25cc7bf90598f50bd2088ca4aa87ac.tar.lz
gsoc2013-epiphany-057680fd0b25cc7bf90598f50bd2088ca4aa87ac.tar.xz
gsoc2013-epiphany-057680fd0b25cc7bf90598f50bd2088ca4aa87ac.tar.zst
gsoc2013-epiphany-057680fd0b25cc7bf90598f50bd2088ca4aa87ac.zip
Use libgnomeprintui for the printing dialog and the paper part of the
2005-07-22 Jürg Billeter <j@bitron.ch> * configure.ac: * data/glade/print.glade: * embed/mozilla/EphyUtils.cpp: * embed/mozilla/EphyUtils.h: * embed/mozilla/PrintingPromptService.cpp: * embed/mozilla/PrintingPromptService.h: * embed/print-dialog.c: (ephy_print_info_free), (ephy_print_load_config_from_file), (ephy_print_save_config_to_file), (ephy_print_get_print_info), (ephy_print_dialog_response_cb), (ephy_print_do_print_idle_cb), (ephy_print_do_print_and_free), (ephy_print_paper_selector_new), (ephy_print_dialog_construct_range_page), (ephy_print_dialog_new), (ephy_print_setup_dialog_new): * embed/print-dialog.h: Use libgnomeprintui for the printing dialog and the paper part of the printing setup dialog. Fixes bug #141241, bug #163255 and bug #301730.
Diffstat (limited to 'embed/print-dialog.c')
-rwxr-xr-xembed/print-dialog.c511
1 files changed, 264 insertions, 247 deletions
diff --git a/embed/print-dialog.c b/embed/print-dialog.c
index 8a0fe264d..ba3dadca2 100755
--- a/embed/print-dialog.c
+++ b/embed/print-dialog.c
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2002 Jorn Baayen
* Copyright (C) 2003, 2004 Christian Persch
+ * Copyright (C) 2005 Juerg Billeter
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -31,6 +32,8 @@
#include "ephy-debug.h"
#include "ephy-gui.h"
+#include <unistd.h>
+#include <string.h>
#include <gtk/gtkwindow.h>
#include <gtk/gtkdialog.h>
#include <gtk/gtkentry.h>
@@ -41,108 +44,44 @@
#include <libgnomevfs/gnome-vfs-utils.h>
#include <glib/gi18n.h>
-#define CONF_PRINT_PRINTER "/apps/epiphany/dialogs/print_printer_name"
-#define CONF_PRINT_FILE "/apps/epiphany/dialogs/print_file"
-#define CONF_PRINT_DIR "/apps/epiphany/directories/print_to_file"
-#define CONF_PRINT_PRINTON "/apps/epiphany/dialogs/print_on"
-#define CONF_PRINT_ALL_PAGES "/apps/epiphany/dialogs/print_all_pages"
-#define CONF_PRINT_FROM_PAGE "/apps/epiphany/dialogs/print_from_page"
-#define CONF_PRINT_TO_PAGE "/apps/epiphany/dialogs/print_to_page"
-
-#define CONF_PRINT_BOTTOM_MARGIN "/apps/epiphany/dialogs/print_bottom_margin"
-#define CONF_PRINT_TOP_MARGIN "/apps/epiphany/dialogs/print_top_margin"
-#define CONF_PRINT_LEFT_MARGIN "/apps/epiphany/dialogs/print_left_margin"
-#define CONF_PRINT_RIGHT_MARGIN "/apps/epiphany/dialogs/print_right_margin"
+#include <libgnomeprintui/gnome-print-paper-selector.h>
+
#define CONF_PRINT_PAGE_TITLE "/apps/epiphany/dialogs/print_page_title"
#define CONF_PRINT_PAGE_URL "/apps/epiphany/dialogs/print_page_url"
#define CONF_PRINT_DATE "/apps/epiphany/dialogs/print_date"
#define CONF_PRINT_PAGE_NUMBERS "/apps/epiphany/dialogs/print_page_numbers"
-#define CONF_PRINT_PAPER "/apps/epiphany/dialogs/print_paper"
#define CONF_PRINT_COLOR "/apps/epiphany/dialogs/print_color"
-#define CONF_PRINT_ORIENTATION "/apps/epiphany/dialogs/print_orientation"
-
-enum
-{
- WINDOW_PROP,
- PRINTON_PROP,
- PRINTER_PROP,
- FILE_PROP,
- BROWSE_PROP,
- ALL_PAGES_PROP,
- SELECTION_PROP,
- TO_PROP,
- FROM_PROP
-};
-
-enum
-{
- COL_PRINTER_DISPLAY_NAME,
- COL_PRINTER_NAME
-};
-
-static const
-EphyDialogProperty print_props [] =
-{
- { "print_dialog", NULL, PT_NORMAL, 0 },
- { "printer_radiobutton", CONF_PRINT_PRINTON, PT_AUTOAPPLY, 0 },
- { "printer_combobox", CONF_PRINT_PRINTER, PT_AUTOAPPLY, G_TYPE_STRING },
- { "file_entry", CONF_PRINT_FILE, PT_AUTOAPPLY, 0 },
- { "browse_button", NULL, PT_NORMAL, 0 },
- { "all_pages_radiobutton", CONF_PRINT_ALL_PAGES, PT_AUTOAPPLY, 0 },
- { "selection_radiobutton", NULL, PT_NORMAL, 0 },
- { "to_spinbutton", CONF_PRINT_FROM_PAGE, PT_AUTOAPPLY, G_TYPE_INT },
- { "from_spinbutton", CONF_PRINT_TO_PAGE, PT_AUTOAPPLY, G_TYPE_INT },
- { NULL }
-};
+#define PRINT_CONFIG_FILENAME "ephy-print-config.xml"
enum
{
SETUP_WINDOW_PROP,
- PAPER_PROP,
- TOP_PROP,
- BOTTOM_PROP,
- LEFT_PROP,
- RIGHT_PROP,
PAGE_TITLE_PROP,
PAGE_URL_PROP,
PAGE_NUMBERS_PROP,
DATE_PROP,
COLOR_PROP,
- ORIENTATION_PROP,
+ PAPER_SELECTOR_PROP,
};
static const
EphyDialogProperty setup_props [] =
{
{ "print_setup_dialog", NULL, PT_NORMAL, 0 },
- { "A4_radiobutton", CONF_PRINT_PAPER, PT_AUTOAPPLY, G_TYPE_STRING },
- { "top_spinbutton", CONF_PRINT_TOP_MARGIN, PT_AUTOAPPLY, G_TYPE_INT },
- { "bottom_spinbutton", CONF_PRINT_BOTTOM_MARGIN, PT_AUTOAPPLY, G_TYPE_INT },
- { "left_spinbutton", CONF_PRINT_LEFT_MARGIN, PT_AUTOAPPLY, G_TYPE_INT },
- { "right_spinbutton", CONF_PRINT_RIGHT_MARGIN, PT_AUTOAPPLY, G_TYPE_INT },
{ "print_page_title_checkbutton", CONF_PRINT_PAGE_TITLE, PT_AUTOAPPLY, 0 },
{ "print_page_url_checkbutton", CONF_PRINT_PAGE_URL, PT_AUTOAPPLY, 0 },
{ "print_page_numbers_checkbutton", CONF_PRINT_PAGE_NUMBERS, PT_AUTOAPPLY, 0 },
{ "print_date_checkbutton", CONF_PRINT_DATE, PT_AUTOAPPLY, 0 },
{ "print_color_radiobutton", CONF_PRINT_COLOR, PT_AUTOAPPLY, 0 },
- { "orient_p_radiobutton", CONF_PRINT_ORIENTATION, PT_AUTOAPPLY, 0 },
+ { "print_paper_selector_hbox", NULL, PT_NORMAL, 0 },
{ NULL }
};
-static const
-char *paper_format_enum [] =
-{
- "A4", "Letter", "Legal", "Executive"
-};
-static guint n_paper_format_enum = G_N_ELEMENTS (paper_format_enum);
-
-void ephy_print_dialog_response_cb (GtkWidget *widget,
+void ephy_print_dialog_response_cb (GtkDialog *dialog,
int response,
- EphyDialog *dialog);
-void ephy_print_dialog_browse_button_cb (GtkWidget *widget,
- EphyDialog *dialog);
+ EmbedPrintInfo *info);
void ephy_print_setup_dialog_close_button_cb (GtkWidget *widget,
EphyDialog *dialog);
void ephy_print_setup_dialog_help_button_cb (GtkWidget *widget,
@@ -152,10 +91,14 @@ void
ephy_print_info_free (EmbedPrintInfo *info)
{
g_return_if_fail (info != NULL);
+
+ g_object_unref (info->config);
+
+ g_free (info->tempfile);
+
+ if (info->cancel_print_id != 0)
+ g_signal_handler_disconnect (embed_shell, info->cancel_print_id);
- g_free (info->printer);
- g_free (info->file);
- g_free (info->paper);
g_free (info->header_left_string);
g_free (info->header_center_string);
g_free (info->header_right_string);
@@ -165,98 +108,74 @@ ephy_print_info_free (EmbedPrintInfo *info)
g_free (info);
}
-static char *
-sanitize_filename (const char *input)
+static GnomePrintConfig *
+ephy_print_load_config_from_file (void)
{
- char *dir, *filename;
-
- if (input == NULL) return NULL;
-
- if (g_path_is_absolute (input) == FALSE)
+ gchar *file_name;
+ gboolean res;
+ gchar *contents;
+ GnomePrintConfig *ephy_print_config;
+
+ file_name = g_build_filename (ephy_dot_dir (), PRINT_CONFIG_FILENAME,
+ NULL);
+
+ res = g_file_get_contents (file_name, &contents, NULL, NULL);
+ g_free (file_name);
+
+ if (res)
{
- dir = eel_gconf_get_string (CONF_PRINT_DIR);
- /* Fallback */
- if (dir == NULL || g_path_is_absolute (dir) == FALSE)
- {
- g_free (dir);
- dir = g_get_current_dir ();
- }
- /* Fallback */
- if (dir == NULL)
- {
- dir = g_strdup (g_get_home_dir ());
- }
-
- filename = g_build_filename (dir, input, NULL);
- g_free (dir);
+ ephy_print_config = gnome_print_config_from_string (contents, 0);
+ g_free (contents);
}
else
- {
- filename = g_strdup (input);
- }
+ ephy_print_config = gnome_print_config_default ();
+
+ return ephy_print_config;
+}
- dir = g_path_get_dirname (filename);
- if (dir == NULL || g_file_test (dir, G_FILE_TEST_IS_DIR) == FALSE)
- {
- g_free (filename);
- filename = NULL;
- }
- g_free (dir);
+static void
+ephy_print_save_config_to_file (GnomePrintConfig *config)
+{
+ gchar *file_name;
+ gchar *str;
+
+ g_return_if_fail (config != NULL);
- return filename;
+ str = gnome_print_config_to_string (config, 0);
+ if (str == NULL) return;
+
+ file_name = g_build_filename (ephy_dot_dir (), PRINT_CONFIG_FILENAME,
+ NULL);
+
+ g_file_set_contents (file_name, str, -1, NULL);
+
+ g_free (file_name);
+ g_free (str);
+}
+
+static void
+ephy_print_save_config_to_file_and_unref (GnomePrintConfig *config)
+{
+ ephy_print_save_config_to_file (config);
+
+ g_object_unref (G_OBJECT (config));
}
EmbedPrintInfo *
ephy_print_get_print_info (void)
{
EmbedPrintInfo *info;
- char *filename, *converted, *expanded, *fname = NULL;
info = g_new0 (EmbedPrintInfo, 1);
+
+ info->config = ephy_print_load_config_from_file ();
+
+ info->range = GNOME_PRINT_RANGE_ALL;
+ info->from_page = 1;
+ info->to_page = 1;
- info->print_to_file = eel_gconf_get_integer (print_props[PRINTON_PROP].pref) == 1;
-
- if (info->print_to_file)
- {
- filename = eel_gconf_get_string (print_props[FILE_PROP].pref);
- if (filename != NULL)
- {
- converted = g_filename_from_utf8 (filename, -1, NULL, NULL, NULL);
- if (converted != NULL)
- {
- expanded = gnome_vfs_expand_initial_tilde (filename);
- fname = sanitize_filename (expanded);
- g_free (expanded);
- g_free (converted);
- }
- }
- g_free (filename);
-
- /* fallback */
- if (fname == NULL)
- {
- fname = sanitize_filename ("output.ps");
- }
-
- info->file = g_filename_to_utf8 (fname, -1, NULL, NULL, NULL);
- g_free (fname);
- }
-
- info->printer = eel_gconf_get_string (print_props[PRINTER_PROP].pref);
-
- info->pages = eel_gconf_get_integer (print_props[ALL_PAGES_PROP].pref);
- info->from_page = eel_gconf_get_integer (print_props[FROM_PROP].pref);
- info->to_page = eel_gconf_get_integer (print_props[TO_PROP].pref);
-
- info->paper = eel_gconf_get_string (setup_props[PAPER_PROP].pref);
- info->orientation = eel_gconf_get_integer (setup_props[ORIENTATION_PROP].pref);
info->print_color = ! eel_gconf_get_integer (setup_props[COLOR_PROP].pref);
- info->bottom_margin = eel_gconf_get_integer (setup_props[BOTTOM_PROP].pref);
- info->top_margin = eel_gconf_get_integer (setup_props[TOP_PROP].pref);
- info->left_margin = eel_gconf_get_integer (setup_props[LEFT_PROP].pref);
- info->right_margin = eel_gconf_get_integer (setup_props[RIGHT_PROP].pref);
-
info->header_left_string = eel_gconf_get_boolean (setup_props[PAGE_TITLE_PROP].pref) ?
g_strdup ("&T") : g_strdup ("");
info->header_right_string = eel_gconf_get_boolean (setup_props[PAGE_URL_PROP].pref) ?
@@ -274,76 +193,120 @@ ephy_print_get_print_info (void)
}
void
-ephy_print_dialog_response_cb (GtkWidget *widget,
+ephy_print_dialog_response_cb (GtkDialog *dialog,
int response,
- EphyDialog *dialog)
+ EmbedPrintInfo *info)
{
- switch (response)
+ if (response == GNOME_PRINT_DIALOG_RESPONSE_PRINT)
{
- case GTK_RESPONSE_HELP:
- ephy_gui_help (GTK_WINDOW (widget), "epiphany", "to-print-page");
- return;
- default:
- break;
+ ephy_print_save_config_to_file (info->config);
+
+ info->range = gnome_print_dialog_get_range_page (GNOME_PRINT_DIALOG (dialog),
+ &info->from_page,
+ &info->to_page);
}
}
-static void
-print_filechooser_response_cb (GtkDialog *fc,
- int response,
- EphyDialog *dialog)
+static gboolean
+using_postscript_printer (GnomePrintConfig *config)
{
- if (response == GTK_RESPONSE_ACCEPT)
- {
- char *filename;
-
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fc));
- if (filename != NULL)
- {
- GtkWidget *entry;
- char *converted;
+ const guchar *driver;
+ const guchar *transport;
- converted = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL);
+ driver = gnome_print_config_get (
+ config, (const guchar *)"Settings.Engine.Backend.Driver");
- entry = ephy_dialog_get_control (dialog, print_props[FILE_PROP].id);
- gtk_entry_set_text (GTK_ENTRY (entry), converted);
+ transport = gnome_print_config_get (
+ config, (const guchar *)"Settings.Transport.Backend");
- g_free (converted);
- g_free (filename);
- }
+ if (driver)
+ {
+ if (strcmp ((const gchar *)driver, "gnome-print-ps") == 0)
+ return TRUE;
+ else
+ return FALSE;
+ }
+ else if (transport)
+ {
+ if (strcmp ((const gchar *)transport, "CUPS") == 0)
+ return TRUE;
+ else if (strcmp ((const gchar *)transport, "LPD") == 0)
+ return TRUE;
}
- gtk_widget_destroy (GTK_WIDGET (fc));
+ return FALSE;
}
-void
-ephy_print_dialog_browse_button_cb (GtkWidget *widget,
- EphyDialog *dialog)
+gboolean
+ephy_print_verify_postscript (GnomePrintDialog *print_dialog)
+{
+ GnomePrintConfig *config;
+ GtkWidget *dialog;
+
+ config = gnome_print_dialog_get_config (print_dialog);
+
+ if (using_postscript_printer (config))
+ return TRUE;
+
+ dialog = gtk_message_dialog_new (
+ GTK_WINDOW (print_dialog), GTK_DIALOG_MODAL,
+ GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
+ _("Printing is not supported on this printer."));
+ gtk_message_dialog_format_secondary_text (
+ GTK_MESSAGE_DIALOG (dialog),
+ _("You were trying to print to a printer using the \"%s\" driver. This program requires a PostScript printer driver."),
+ gnome_print_config_get (
+ config, (guchar *)"Settings.Engine.Backend.Driver"));
+
+ if (GTK_WINDOW (print_dialog)->group)
+ gtk_window_group_add_window (GTK_WINDOW (print_dialog)->group,
+ GTK_WINDOW (dialog));
+
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+
+ return FALSE;
+}
+
+static void
+cancel_print_cb (EphyEmbedShell *shell, EmbedPrintInfo *info)
{
- GtkWidget *parent;
- EphyFileChooser *fc;
- GtkFileFilter *filter;
+ g_source_remove (info->print_idle_id);
+
+ ephy_print_info_free (info);
+}
- parent = ephy_dialog_get_control (dialog, print_props[WINDOW_PROP].id);
+static gboolean
+ephy_print_do_print_idle_cb (EmbedPrintInfo *info)
+{
+ GnomePrintJob *job;
- fc = ephy_file_chooser_new (_("Print to"),
- GTK_WIDGET (parent),
- GTK_FILE_CHOOSER_ACTION_SAVE,
- CONF_PRINT_DIR, EPHY_FILE_FILTER_NONE);
+ job = gnome_print_job_new (info->config);
- filter = ephy_file_chooser_add_mime_filter (fc, _("Postscript files"),
- "application/postscript", NULL);
+ gnome_print_job_set_file (job, info->tempfile);
+ gnome_print_job_print (job);
- ephy_file_chooser_add_pattern_filter (fc, _("All files"), "*", NULL);
+ g_object_unref (job);
+
+ unlink (info->tempfile);
- gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (fc), filter);
+ ephy_print_info_free (info);
- g_signal_connect (GTK_DIALOG (fc), "response",
- G_CALLBACK (print_filechooser_response_cb),
- dialog);
+ return FALSE;
+}
- gtk_window_set_modal (GTK_WINDOW (fc), TRUE);
- gtk_widget_show (GTK_WIDGET (fc));
+void
+ephy_print_do_print_and_free (EmbedPrintInfo *info)
+{
+ /* mozilla printing system hasn't really sent the data
+ * to the printer when reporting that printing is done, it's
+ * just ready to do it now
+ */
+ info->print_idle_id = g_idle_add ((GSourceFunc) ephy_print_do_print_idle_cb,
+ info);
+ info->cancel_print_id = g_signal_connect (embed_shell, "prepare-close",
+ G_CALLBACK (cancel_print_cb),
+ info);
}
void
@@ -360,58 +323,108 @@ ephy_print_setup_dialog_help_button_cb (GtkWidget *widget,
ephy_gui_help (GTK_WINDOW (dialog), "epiphany", "using-print-setup");
}
-EphyDialog *
-ephy_print_dialog_new (GtkWidget *parent,
- EphyEmbed *embed)
+static GtkWidget *
+ephy_print_paper_selector_new ()
{
- EphyDialog *dialog;
- GtkWidget *widget;
- GList *printers, *l;
- GtkListStore *store;
- GtkTreeIter iter;
- GtkCellRenderer *renderer;
- EphyEmbedSingle *single;
-
- dialog = ephy_dialog_new_with_parent (parent);
-
- ephy_dialog_construct (dialog,
- print_props,
- ephy_file ("print.glade"),
- "print_dialog",
- NULL);
-
- widget = ephy_dialog_get_control (dialog, print_props[WINDOW_PROP].id);
- gtk_window_set_icon_name (GTK_WINDOW (widget), GTK_STOCK_PRINT);
-
- widget = ephy_dialog_get_control (dialog, print_props[BROWSE_PROP].id);
- gtk_widget_set_sensitive (widget, eel_gconf_key_is_writable (CONF_PRINT_FILE));
-
- widget = ephy_dialog_get_control (dialog, print_props[PRINTER_PROP].id);
- single = EPHY_EMBED_SINGLE (ephy_embed_shell_get_embed_single (embed_shell));
- store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
+ GtkWidget *paper_selector;
+ GnomePrintConfig *config;
+
+ config = ephy_print_load_config_from_file ();
+
+ paper_selector = gnome_paper_selector_new_with_flags (config,
+ GNOME_PAPER_SELECTOR_MARGINS);
+
+ g_object_set_data_full (G_OBJECT (paper_selector), "config", config,
+ (GDestroyNotify) ephy_print_save_config_to_file_and_unref);
+
+ return paper_selector;
+}
- printers = ephy_embed_single_get_printer_list (single);
- for (l = printers; l != NULL; l = l->next)
- {
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- COL_PRINTER_DISPLAY_NAME, l->data,
- COL_PRINTER_NAME, l->data,
- -1);
+/*
+ * A variant of gnome_print_dialog_construct_range_page that can be used when
+ * the total page count is unknown. It defaults to 1-1
+ */
+static void
+ephy_print_dialog_construct_range_page (GnomePrintDialog *gpd, gint flags,
+ const guchar *currentlabel, const guchar *rangelabel)
+{
+ GtkWidget *hbox;
+
+ hbox = NULL;
+
+ if (flags & GNOME_PRINT_RANGE_RANGE) {
+ GtkWidget *l, *sb;
+ GtkObject *a;
+ AtkObject *atko;
+
+ hbox = gtk_hbox_new (FALSE, 3);
+ gtk_widget_show (hbox);
+
+ l = gtk_label_new_with_mnemonic (_("_From:"));
+ gtk_widget_show (l);
+ gtk_box_pack_start (GTK_BOX (hbox), l, FALSE, FALSE, 0);
+
+ a = gtk_adjustment_new (1, 1, 9999, 1, 10, 10);
+ g_object_set_data (G_OBJECT (hbox), "from", a);
+ sb = gtk_spin_button_new (GTK_ADJUSTMENT (a), 1, 0.0);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (sb), TRUE);
+ gtk_widget_show (sb);
+ gtk_box_pack_start (GTK_BOX (hbox), sb, FALSE, FALSE, 0);
+ gtk_label_set_mnemonic_widget ((GtkLabel *) l, sb);
+
+ atko = gtk_widget_get_accessible (sb);
+ atk_object_set_description (atko, _("Sets the start of the range of pages to be printed"));
+
+ l = gtk_label_new_with_mnemonic (_("_To:"));
+ gtk_widget_show (l);
+ gtk_box_pack_start (GTK_BOX (hbox), l, FALSE, FALSE, 0);
+
+ a = gtk_adjustment_new (1, 1, 9999, 1, 10, 10);
+ g_object_set_data (G_OBJECT (hbox), "to", a);
+ sb = gtk_spin_button_new (GTK_ADJUSTMENT (a), 1, 0.0);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (sb), TRUE);
+ gtk_widget_show (sb);
+ gtk_box_pack_start (GTK_BOX (hbox), sb, FALSE, FALSE, 0);
+ gtk_label_set_mnemonic_widget ((GtkLabel *) l, sb);
+
+ atko = gtk_widget_get_accessible (sb);
+ atk_object_set_description (atko, _("Sets the end of the range of pages to be printed"));
}
- g_list_foreach (printers, (GFunc)g_free, NULL);
- g_list_free (printers);
- gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store));
- g_object_unref (store);
+ gnome_print_dialog_construct_range_any (gpd, flags, hbox, currentlabel, rangelabel);
+}
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer,
- "text", COL_PRINTER_DISPLAY_NAME,
- NULL);
- ephy_dialog_set_data_column (dialog, print_props[PRINTER_PROP].id,
- COL_PRINTER_NAME);
+GtkWidget *
+ephy_print_dialog_new (GtkWidget *parent,
+ EmbedPrintInfo *info)
+{
+ GtkWidget *dialog;
+
+ dialog = g_object_new (GNOME_TYPE_PRINT_DIALOG, "print_config",
+ info->config, NULL);
+
+ gnome_print_dialog_construct (GNOME_PRINT_DIALOG (dialog), (const guchar *) _("Print"),
+ GNOME_PRINT_DIALOG_RANGE |
+ GNOME_PRINT_DIALOG_COPIES);
+
+ ephy_print_dialog_construct_range_page (GNOME_PRINT_DIALOG (dialog),
+ GNOME_PRINT_RANGE_ALL |
+ GNOME_PRINT_RANGE_RANGE |
+ GNOME_PRINT_RANGE_SELECTION,
+ NULL, (const guchar *) _("Pages"));
+
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
+ GNOME_PRINT_DIALOG_RESPONSE_PREVIEW,
+ FALSE);
+
+ g_signal_connect (G_OBJECT (dialog), "response",
+ G_CALLBACK (ephy_print_dialog_response_cb), info);
+
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
+
+ if (GTK_WINDOW (parent)->group)
+ gtk_window_group_add_window (GTK_WINDOW (parent)->group,
+ GTK_WINDOW (dialog));
return dialog;
}
@@ -421,6 +434,7 @@ ephy_print_setup_dialog_new (void)
{
EphyDialog *dialog;
GtkWidget *window;
+ GtkWidget *paper_selector_hbox;
dialog = EPHY_DIALOG (g_object_new (EPHY_TYPE_DIALOG, NULL));
@@ -430,11 +444,14 @@ ephy_print_setup_dialog_new (void)
"print_setup_dialog",
NULL);
- ephy_dialog_add_enum (dialog, setup_props[PAPER_PROP].id,
- n_paper_format_enum, paper_format_enum);
-
window = ephy_dialog_get_control (dialog, setup_props[SETUP_WINDOW_PROP].id);
gtk_window_set_icon_name (GTK_WINDOW (window), STOCK_PRINT_SETUP);
+
+ paper_selector_hbox = ephy_dialog_get_control (dialog,
+ setup_props[PAPER_SELECTOR_PROP].id);
+ gtk_box_pack_start_defaults (GTK_BOX (paper_selector_hbox),
+ ephy_print_paper_selector_new ());
+ gtk_widget_show_all (paper_selector_hbox);
return dialog;
}