-
-static void
-get_margins_finished_callback (GtkPrinter *printer,
- gboolean success,
- CustomPaperDialog *data)
-{
- data->request_details_tag = 0;
-
- if (success)
- set_margins_from_printer (data, printer);
-
- gtk_combo_box_set_active (GTK_COMBO_BOX (data->printer_combo), 0);
-}
-
-static void
-margins_from_printer_changed (CustomPaperDialog *data)
-{
- GtkTreeIter iter;
- GtkComboBox *combo;
- GtkPrinter *printer;
-
- combo = GTK_COMBO_BOX (data->printer_combo);
-
- if (data->request_details_tag)
- {
- g_source_remove (data->request_details_tag);
- data->request_details_tag = 0;
- }
-
- if (gtk_combo_box_get_active_iter (combo, &iter))
- {
- gtk_tree_model_get (gtk_combo_box_get_model (combo), &iter,
- PRINTER_LIST_COL_PRINTER, &printer, -1);
-
- if (printer)
- {
- if (_gtk_printer_has_details (printer))
- {
- set_margins_from_printer (data, printer);
- gtk_combo_box_set_active (combo, 0);
- }
- else
- {
- data->request_details_tag =
- g_signal_connect (printer, "details-acquired",
- G_CALLBACK (get_margins_finished_callback), data);
- _gtk_printer_request_details (printer);
- }
-
- g_object_unref (printer);
- }
- }
-}
-
-
-static void
-custom_paper_dialog_free (gpointer p)
-{
- CustomPaperDialog *data = p;
- if (data->request_details_tag)
- {
- g_source_remove (data->request_details_tag);
- data->request_details_tag = 0;
- }
-
- g_free (data);
-}
-
-static void
-custom_size_name_edited (GtkCellRenderer *cell,
- gchar *path_string,
- gchar *new_text,
- CustomPaperDialog *data)
-{
- GtkTreePath *path;
- GtkTreeIter iter;
- GtkListStore *store;
- GtkPageSetup *page_setup;
- GtkPaperSize *paper_size;
-
- store = data->dialog->priv->custom_paper_list;
- path = gtk_tree_path_new_from_string (path_string);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path);
- gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, 0, &page_setup, -1);
- gtk_tree_path_free (path);
-
- paper_size = gtk_paper_size_new_custom (new_text, new_text,
- gtk_page_setup_get_paper_width (page_setup, GTK_UNIT_MM),
- gtk_page_setup_get_paper_height (page_setup, GTK_UNIT_MM),
- GTK_UNIT_MM);
- gtk_page_setup_set_paper_size (page_setup, paper_size);
- gtk_paper_size_free (paper_size);
-
- g_object_unref (page_setup);
-}
-
-static void
-custom_name_func (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gpointer data)
-{
- GtkPageSetup *page_setup;
- GtkPaperSize *paper_size;
-
- gtk_tree_model_get (tree_model, iter, 0, &page_setup, -1);
- if (page_setup)
- {
- paper_size = gtk_page_setup_get_paper_size (page_setup);
- g_object_set (cell, "text", gtk_paper_size_get_display_name (paper_size), NULL);
- g_object_unref (page_setup);
- }
-}
-
-static void
-set_dialog_hig_spacing (GtkWidget *widget,
- GtkStyle *previous_style,
- GtkDialog *dialog)
-{
- gtk_container_set_border_width (GTK_CONTAINER (dialog->vbox), 12);
- gtk_box_set_spacing (GTK_BOX (dialog->vbox), 24);
- gtk_container_set_border_width (GTK_CONTAINER (dialog->action_area), 0);
- gtk_box_set_spacing (GTK_BOX (dialog->action_area), 6);
-}
-
-static void
-run_custom_paper_dialog (GtkPageSetupUnixDialog *dialog)
-{
- GtkWidget *custom_dialog, *image, *table, *label, *widget, *frame, *combo;
- GtkWidget *hbox, *vbox, *treeview, *scrolled, *button_box, *button;
- GtkCellRenderer *cell;
- GtkTreeViewColumn *column;
- GtkTreeIter iter;
- GtkTreeSelection *selection;
- CustomPaperDialog *data;
- GtkUnit user_units;
- gulong printer_tag1, printer_tag2;
-
- custom_dialog = gtk_dialog_new_with_buttons (_("Manage Custom Sizes"),
- GTK_WINDOW (dialog),
- GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
- GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
- NULL);
-
- g_signal_connect (custom_dialog, "style-set", G_CALLBACK (set_dialog_hig_spacing), custom_dialog);
-
- data = g_new0 (CustomPaperDialog, 1);
- data->dialog = dialog;
- g_object_set_data_full (G_OBJECT (custom_dialog), "custom-dialog", data, custom_paper_dialog_free);
-
- hbox = gtk_hbox_new (FALSE, 12);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (custom_dialog)->vbox), hbox, TRUE, TRUE, 0);
- gtk_widget_show (hbox);
-
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
- gtk_widget_show (vbox);
-
- scrolled = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled),
- GTK_SHADOW_IN);
- gtk_box_pack_start (GTK_BOX (vbox), scrolled, TRUE, TRUE, 0);
- gtk_widget_show (scrolled);
-
- treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (dialog->priv->custom_paper_list));
- data->treeview = treeview;
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
- gtk_widget_set_size_request (treeview, 140, -1);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
- g_signal_connect (selection, "changed", G_CALLBACK (selected_custom_paper_changed), data);
-
- cell = gtk_cell_renderer_text_new ();
- g_object_set (cell, "editable", TRUE, NULL);
- g_signal_connect (cell, "edited",
- G_CALLBACK (custom_size_name_edited), data);
- data->text_column = column =
- gtk_tree_view_column_new_with_attributes ("paper", cell,
- NULL);
- gtk_tree_view_column_set_cell_data_func (column, cell, custom_name_func, NULL, NULL);
-
- gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
-
- gtk_container_add (GTK_CONTAINER (scrolled), treeview);
- gtk_widget_show (treeview);
-
- button_box = gtk_hbox_new (FALSE, 6);
- gtk_box_pack_start (GTK_BOX (vbox), button_box, FALSE, FALSE, 0);
- gtk_widget_show (button_box);
-
- button = gtk_button_new ();
- image = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_BUTTON);
- gtk_widget_show (image);
- gtk_container_add (GTK_CONTAINER (button), image);
- gtk_box_pack_start (GTK_BOX (button_box), button, FALSE, FALSE, 0);
- gtk_widget_show (button);
-
- g_signal_connect_swapped (button, "clicked", G_CALLBACK (add_custom_paper), data);
-
- button = gtk_button_new ();
- image = gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_BUTTON);
- gtk_widget_show (image);
- gtk_container_add (GTK_CONTAINER (button), image);
- gtk_box_pack_start (GTK_BOX (button_box), button, FALSE, FALSE, 0);
- gtk_widget_show (button);
-
- g_signal_connect_swapped (button, "clicked", G_CALLBACK (remove_custom_paper), data);
-
- user_units = get_default_user_units ();
-
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
- gtk_widget_show (vbox);
-
- table = gtk_table_new (2, 2, FALSE);
-
- label = gtk_label_new (_("Width:"));
- gtk_table_set_row_spacings (GTK_TABLE (table), 6);
- gtk_table_set_col_spacings (GTK_TABLE (table), 12);
- gtk_widget_show (label);
- gtk_table_attach (GTK_TABLE (table), label,
- 0, 1, 0, 1, 0, 0, 0, 0);
-
- widget = new_unit_widget (data, user_units);
- data->width_widget = widget;
- gtk_table_attach (GTK_TABLE (table), widget,
- 1, 2, 0, 1, 0, 0, 0, 0);
- gtk_widget_show (widget);
-
- label = gtk_label_new (_("Height:"));
- gtk_widget_show (label);
- gtk_table_attach (GTK_TABLE (table), label,
- 0, 1, 1, 2, 0, 0, 0, 0);
-
- widget = new_unit_widget (data, user_units);
- data->height_widget = widget;
- gtk_table_attach (GTK_TABLE (table), widget,
- 1, 2, 1, 2, 0, 0, 0, 0);
- gtk_widget_show (widget);
-
- frame = wrap_in_frame (_("Paper Size"), table);
- gtk_widget_show (table);
- gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
- gtk_widget_show (frame);
-
-
- table = gtk_table_new (3, 5, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (table), 6);
- gtk_table_set_col_spacings (GTK_TABLE (table), 0);
-
- widget = new_unit_widget (data, user_units);
- data->top_widget = widget;
- gtk_table_attach (GTK_TABLE (table), widget,
- 1, 2, 0, 1, 0, 0, 0, 0);
- gtk_widget_show (widget);
-
- label = gtk_label_new (_("top"));
- gtk_table_attach (GTK_TABLE (table), label,
- 1, 2, 1, 2, 0, GTK_FILL|GTK_EXPAND, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (label),
- 0.5, 0.0);
- gtk_widget_show (label);
-
- widget = new_unit_widget (data, user_units);
- data->bottom_widget = widget;
- gtk_table_attach (GTK_TABLE (table), widget,
- 1, 2, 2, 3, 0, 0, 0, 0);
- gtk_widget_show (widget);
-
- label = gtk_label_new (_("bottom"));
- gtk_table_attach (GTK_TABLE (table), label,
- 1, 2, 3, 4, 0, GTK_FILL|GTK_EXPAND, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (label),
- 0.5, 0.0);
- gtk_widget_show (label);
-
- widget = new_unit_widget (data, user_units);
- data->left_widget = widget;
- gtk_table_attach (GTK_TABLE (table), widget,
- 0, 1, 1, 2, 0, 0, 0, 0);
- gtk_widget_show (widget);
-
- label = gtk_label_new (_("left"));
- gtk_table_attach (GTK_TABLE (table), label,
- 0, 1, 2, 3, 0, GTK_FILL|GTK_EXPAND, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (label),
- 0.5, 0.0);
- gtk_widget_show (label);
-
- widget = new_unit_widget (data, user_units);
- data->right_widget = widget;
- gtk_table_attach (GTK_TABLE (table), widget,
- 2, 3, 1, 2, 0, 0, 0, 0);
- gtk_widget_show (widget);
-
- label = gtk_label_new (_("right"));
- gtk_table_attach (GTK_TABLE (table), label,
- 2, 3, 2, 3, 0, GTK_FILL|GTK_EXPAND, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (label),
- 0.5, 0.0);
- gtk_widget_show (label);
-
- hbox = gtk_hbox_new (FALSE, 0);
- gtk_table_attach (GTK_TABLE (table), hbox,
- 0, 3, 4, 5, GTK_FILL | GTK_EXPAND, 0, 0, 0);
- gtk_widget_show (hbox);
- gtk_table_set_row_spacing (GTK_TABLE (table), 3, 8);
-
- combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (dialog->priv->printer_list));
- data->printer_combo = combo;
-
- printer_tag1 =
- g_signal_connect_swapped (dialog->priv->printer_list, "row_inserted",
- G_CALLBACK (update_combo_sensitivity_from_printers), data);
- printer_tag2 =
- g_signal_connect_swapped (dialog->priv->printer_list, "row_deleted",
- G_CALLBACK (update_combo_sensitivity_from_printers), data);
- update_combo_sensitivity_from_printers (data);
-
- cell = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE);
- gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo), cell,
- custom_paper_printer_data_func,
- NULL, NULL);
-
- gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
- gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0);
- gtk_widget_show (combo);
-
- g_signal_connect_swapped (combo, "changed",
- G_CALLBACK (margins_from_printer_changed), data);
-
- frame = wrap_in_frame (_("Paper Margins"), table);
- gtk_widget_show (table);
- gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
- gtk_widget_show (frame);
-
- update_custom_widgets_from_list (data);
-
- /* If no custom sizes, add one */
- if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (dialog->priv->custom_paper_list),
- &iter))
- {
- /* Need to realize treeview so we can start the rename */
- gtk_widget_realize (treeview);
- add_custom_paper (data);
- }
-
- gtk_dialog_run (GTK_DIALOG (custom_dialog));
- gtk_widget_destroy (custom_dialog);
-
- save_custom_papers (dialog->priv->custom_paper_list);
-
- g_signal_handler_disconnect (dialog->priv->printer_list, printer_tag1);
- g_signal_handler_disconnect (dialog->priv->printer_list, printer_tag2);
-
-}
-
-
-#define __GTK_PAGE_SETUP_UNIX_DIALOG_C__
-#include "gtkaliasdef.c"