Index: chrome/browser/printing/print_dialog_gtk.cc |
diff --git a/chrome/browser/printing/print_dialog_gtk.cc b/chrome/browser/printing/print_dialog_gtk.cc |
index 789ded4a8164fc5f30d96654b41a3a52bad763e9..b53f2c3302882a6ad1f19fa176e7cb707d376adb 100644 |
--- a/chrome/browser/printing/print_dialog_gtk.cc |
+++ b/chrome/browser/printing/print_dialog_gtk.cc |
@@ -231,6 +231,7 @@ bool PrintDialogGtk::UpdateSettings(const DictionaryValue& job_settings, |
} |
void PrintDialogGtk::ShowDialog( |
+ bool has_selection, |
const PrintingContextGtk::PrintSettingsCallback& callback) { |
callback_ = callback; |
@@ -256,6 +257,10 @@ void PrintDialogGtk::ShowDialog( |
cap); |
gtk_print_unix_dialog_set_embed_page_setup(GTK_PRINT_UNIX_DIALOG(dialog_), |
TRUE); |
+ gtk_print_unix_dialog_set_support_selection(GTK_PRINT_UNIX_DIALOG(dialog_), |
+ TRUE); |
+ gtk_print_unix_dialog_set_has_selection(GTK_PRINT_UNIX_DIALOG(dialog_), |
+ has_selection); |
g_signal_connect(dialog_, "response", G_CALLBACK(OnResponseThunk), this); |
gtk_widget_show(dialog_); |
} |
@@ -326,21 +331,38 @@ void PrintDialogGtk::OnResponse(GtkWidget* dialog, int response_id) { |
// Handle page ranges. |
PageRanges ranges_vector; |
gint num_ranges; |
- GtkPageRange* gtk_range = |
- gtk_print_settings_get_page_ranges(gtk_settings_, &num_ranges); |
- if (gtk_range) { |
- for (int i = 0; i < num_ranges; ++i) { |
- printing::PageRange range; |
- range.from = gtk_range[i].start; |
- range.to = gtk_range[i].end; |
- ranges_vector.push_back(range); |
+ bool print_selection_only = false; |
+ switch (gtk_print_settings_get_print_pages(gtk_settings_)) { |
+ case GTK_PRINT_PAGES_RANGES: { |
+ GtkPageRange* gtk_range = |
+ gtk_print_settings_get_page_ranges(gtk_settings_, &num_ranges); |
+ if (gtk_range) { |
+ for (int i = 0; i < num_ranges; ++i) { |
+ printing::PageRange range; |
+ range.from = gtk_range[i].start; |
+ range.to = gtk_range[i].end; |
+ ranges_vector.push_back(range); |
+ } |
+ g_free(gtk_range); |
+ } |
+ break; |
} |
- g_free(gtk_range); |
+ case GTK_PRINT_PAGES_SELECTION: |
+ print_selection_only = true; |
+ break; |
+ case GTK_PRINT_PAGES_ALL: |
+ // Leave |ranges_vector| empty to indicate print all pages. |
+ break; |
+ case GTK_PRINT_PAGES_CURRENT: |
+ default: |
+ NOTREACHED(); |
+ break; |
} |
PrintSettings settings; |
printing::PrintSettingsInitializerGtk::InitPrintSettings( |
- gtk_settings_, page_setup_, ranges_vector, false, &settings); |
+ gtk_settings_, page_setup_, ranges_vector, print_selection_only, |
+ &settings); |
context_->InitWithSettings(settings); |
callback_.Run(PrintingContextGtk::OK); |
callback_.Reset(); |