diff options
author | Christian Persch <chpe@gnome.org> | 2007-04-09 20:07:15 +0800 |
---|---|---|
committer | Christian Persch <chpe@src.gnome.org> | 2007-04-09 20:07:15 +0800 |
commit | 94aa8d7f39a5471b8ab738c2032c64fc16bca949 (patch) | |
tree | 6e661af6e443f9fe6e051d44a89b320b392ec1ae /embed | |
parent | c1d90d87f89bcc69b76762694513c1f5b64b6c35 (diff) | |
download | gsoc2013-epiphany-94aa8d7f39a5471b8ab738c2032c64fc16bca949.tar gsoc2013-epiphany-94aa8d7f39a5471b8ab738c2032c64fc16bca949.tar.gz gsoc2013-epiphany-94aa8d7f39a5471b8ab738c2032c64fc16bca949.tar.bz2 gsoc2013-epiphany-94aa8d7f39a5471b8ab738c2032c64fc16bca949.tar.lz gsoc2013-epiphany-94aa8d7f39a5471b8ab738c2032c64fc16bca949.tar.xz gsoc2013-epiphany-94aa8d7f39a5471b8ab738c2032c64fc16bca949.tar.zst gsoc2013-epiphany-94aa8d7f39a5471b8ab738c2032c64fc16bca949.zip |
Fix printing of frames.
2007-04-09 Christian Persch <chpe@gnome.org>
* data/glade/print.glade:
* embed/mozilla/EphyBrowser.cpp:
* embed/mozilla/GeckoPrintService.cpp:
* embed/mozilla/GeckoPrintService.h:
Fix printing of frames.
svn path=/trunk/; revision=6985
Diffstat (limited to 'embed')
-rw-r--r-- | embed/mozilla/EphyBrowser.cpp | 1 | ||||
-rw-r--r-- | embed/mozilla/GeckoPrintService.cpp | 49 | ||||
-rw-r--r-- | embed/mozilla/GeckoPrintService.h | 2 |
3 files changed, 39 insertions, 13 deletions
diff --git a/embed/mozilla/EphyBrowser.cpp b/embed/mozilla/EphyBrowser.cpp index 848134e2b..1fd2ca02e 100644 --- a/embed/mozilla/EphyBrowser.cpp +++ b/embed/mozilla/EphyBrowser.cpp @@ -750,6 +750,7 @@ nsresult EphyBrowser::SetPrintPreviewMode (PRBool previewMode) ephy_embed_shell_get_page_setup (shell), NULL, nsCString(), + nsIPrintSettings::kFramesAsIs, PR_FALSE, settings); diff --git a/embed/mozilla/GeckoPrintService.cpp b/embed/mozilla/GeckoPrintService.cpp index a496cf5eb..376f508b9 100644 --- a/embed/mozilla/GeckoPrintService.cpp +++ b/embed/mozilla/GeckoPrintService.cpp @@ -110,20 +110,20 @@ GeckoPrintService::ShowPrintDialog (nsIDOMWindow *aParent, /* Not locked down, show the dialogue */ + nsresult rv; #if 0 PRBool haveSelection = PR_FALSE; rv = aSettings->GetPrintOptions(nsIPrintSettings::kEnableSelectionRB, &haveSelection); NS_ENSURE_SUCCESS (rv, rv); +#endif - PRInt16 frameUI = 0; + PRInt16 frameUI = nsIPrintSettings::kFrameEnableAll; rv = aSettings->GetHowToEnableFrameUI (&frameUI); NS_ENSURE_SUCCESS (rv, rv); -#endif GtkWidget *parent = EphyUtils::FindGtkParent (aParent); NS_ENSURE_TRUE(parent, NS_ERROR_INVALID_POINTER); - nsresult rv; AutoJSContextStack stack; rv = stack.Init (); if (NS_FAILED (rv)) { @@ -148,7 +148,26 @@ GeckoPrintService::ShowPrintDialog (nsIDOMWindow *aParent, ephy_gui_connect_checkbutton_to_gconf (glade_xml_get_widget (xml, "print_page_numbers_checkbutton"), CONF_PRINT_PAGE_NUMBERS); ephy_gui_connect_checkbutton_to_gconf (glade_xml_get_widget (xml, "print_page_title_checkbutton"), CONF_PRINT_PAGE_TITLE); ephy_gui_connect_checkbutton_to_gconf (glade_xml_get_widget (xml, "print_page_url_checkbutton"), CONF_PRINT_PAGE_URL); - + + GtkWidget *frame_box = glade_xml_get_widget (xml, "frame_box"); + GtkWidget *print_frames_normal = glade_xml_get_widget (xml, "print_frames_normal"); + GtkWidget *print_frames_selected = glade_xml_get_widget (xml, "print_frames_selected"); + GtkWidget *print_frames_separately = glade_xml_get_widget (xml, "print_frames_separately"); + + /* FIXME: store/load from pref */ + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (print_frames_normal), TRUE); + + if (frameUI == nsIPrintSettings::kFrameEnableAll) { + /* Allow all frame options */ + gtk_widget_set_sensitive (frame_box, TRUE); + } else if (frameUI == nsIPrintSettings::kFrameEnableAsIsAndEach) { + /* Allow all except "selected frame" */ + gtk_widget_set_sensitive (frame_box, TRUE); + gtk_widget_set_sensitive (print_frames_selected, FALSE); + /* Preselect this one, since the default above only prints _one page_ ! */ + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (print_frames_separately), TRUE); + } + /* FIXME: this sucks! find some way to do all of this async! */ GtkWidget *dialog = gtk_print_unix_dialog_new (NULL /* FIXME title */, GTK_WINDOW (parent)); @@ -192,6 +211,17 @@ GeckoPrintService::ShowPrintDialog (nsIDOMWindow *aParent, return NS_ERROR_ABORT; } + PRInt16 printFrames = nsIPrintSettings::kNoFrames; + if (frameUI != nsIPrintSettings::kFrameEnableNone) { + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (print_frames_normal))) { + printFrames = nsIPrintSettings::kFramesAsIs; + } else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (print_frames_selected))) { + printFrames = nsIPrintSettings::kSelectedFrame; + } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (print_frames_separately))) { + printFrames = nsIPrintSettings::kEachFrameSep; + } + } + GtkPageSetup *pageSetup = gtk_print_unix_dialog_get_page_setup (print_dialog); /* no reference owned */ ephy_embed_shell_set_page_setup (shell, pageSetup); @@ -215,7 +245,7 @@ GeckoPrintService::ShowPrintDialog (nsIDOMWindow *aParent, nsCString sourceFile; session->GetSourceFile (sourceFile); if (!sourceFile.IsEmpty ()) { - rv = TranslateSettings (settings, pageSetup, printer, sourceFile, PR_TRUE, aSettings); + rv = TranslateSettings (settings, pageSetup, printer, sourceFile, printFrames, PR_TRUE, aSettings); } else { rv = NS_ERROR_FAILURE; } @@ -488,6 +518,7 @@ GeckoPrintService::TranslateSettings (GtkPrintSettings *aGtkSettings, GtkPageSetup *aPageSetup, GtkPrinter *aPrinter, const nsACString &aSourceFile, + PRInt16 aPrintFrames, PRBool aIsForPrinting, nsIPrintSettings *aSettings) { @@ -672,13 +703,7 @@ GeckoPrintService::TranslateSettings (GtkPrintSettings *aGtkSettings, aSettings->SetFooterStrCenter (LITERAL ("")); aSettings->SetFooterStrRight (eel_gconf_get_boolean (CONF_PRINT_DATE) ? LITERAL ("&D") : LITERAL ("")); - /* FIXME I think this is the right default, but this prevents the user - * from cancelling the print immediately, see the stupid comment in nsPrintEngine: - * "DO NOT allow the print job to be cancelled if it is Print FrameAsIs - * because it is only printing one page." - * We work around this by just not sending the job to the printer then. - */ - aSettings->SetPrintFrameType(nsIPrintSettings::kFramesAsIs); /* FIXME setting */ + aSettings->SetPrintFrameType (aPrintFrames); aSettings->SetPrintFrameTypeUsage (nsIPrintSettings::kUseSettingWhenPossible); aSettings->SetScaling (gtk_print_settings_get_scale (aGtkSettings) / 100.0); diff --git a/embed/mozilla/GeckoPrintService.h b/embed/mozilla/GeckoPrintService.h index 74dc6830e..c2e21cf3e 100644 --- a/embed/mozilla/GeckoPrintService.h +++ b/embed/mozilla/GeckoPrintService.h @@ -45,7 +45,7 @@ public: GeckoPrintService(); virtual ~GeckoPrintService(); - static nsresult TranslateSettings (GtkPrintSettings*, GtkPageSetup *, GtkPrinter *, const nsACString&, PRBool, nsIPrintSettings*); + static nsresult TranslateSettings (GtkPrintSettings*, GtkPageSetup *, GtkPrinter *, const nsACString&, PRInt16, PRBool, nsIPrintSettings*); private: nsresult PrintUnattended (nsIDOMWindow *, nsIPrintSettings *); |