aboutsummaryrefslogtreecommitdiffstats
path: root/embed/mozilla/EphyUtils.cpp
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@gnome.org>2004-10-11 00:03:53 +0800
committerMarco Pesenti Gritti <marco@src.gnome.org>2004-10-11 00:03:53 +0800
commitef0d06b1cca990d13d0f1e3e051248e795c4d79b (patch)
treec03d644960b6ae1863a8973a1cd1187d20a1db17 /embed/mozilla/EphyUtils.cpp
parent840e12a02b3e26c0697b81af8bdfdb5398017fb8 (diff)
downloadgsoc2013-epiphany-ef0d06b1cca990d13d0f1e3e051248e795c4d79b.tar
gsoc2013-epiphany-ef0d06b1cca990d13d0f1e3e051248e795c4d79b.tar.gz
gsoc2013-epiphany-ef0d06b1cca990d13d0f1e3e051248e795c4d79b.tar.bz2
gsoc2013-epiphany-ef0d06b1cca990d13d0f1e3e051248e795c4d79b.tar.lz
gsoc2013-epiphany-ef0d06b1cca990d13d0f1e3e051248e795c4d79b.tar.xz
gsoc2013-epiphany-ef0d06b1cca990d13d0f1e3e051248e795c4d79b.tar.zst
gsoc2013-epiphany-ef0d06b1cca990d13d0f1e3e051248e795c4d79b.zip
reviewed by: Christian Persch <chpe@cvs.gnome.org>
2004-10-10 Marco Pesenti Gritti <marco@gnome.org> reviewed by: Christian Persch <chpe@cvs.gnome.org> * data/glade/print.glade: * embed/ephy-embed-single.c: (ephy_embed_single_get_printer_list): * embed/ephy-embed-single.h: * embed/mozilla/ContentHandler.cpp: * embed/mozilla/EphyBrowser.cpp: * embed/mozilla/EphyHeaderSniffer.cpp: * embed/mozilla/EphyUtils.cpp: * embed/mozilla/EphyUtils.h: * embed/mozilla/FilePicker.cpp: * embed/mozilla/GtkNSSClientAuthDialogs.cpp: * embed/mozilla/GtkNSSDialogs.cpp: * embed/mozilla/GtkNSSKeyPairDialogs.cpp: * embed/mozilla/MozillaPrivate.cpp: * embed/mozilla/MozillaPrivate.h: * embed/mozilla/PrintingPromptService.cpp: * embed/mozilla/mozilla-embed-single.cpp: * embed/mozilla/mozilla-embed.cpp: * embed/print-dialog.c: (ephy_print_dialog_new): * lib/ephy-dialog.c: (set_combo_box_from_value): Move current MozillaPrivate helpers to EphyUtils. Use MozillaPrivate for stuff that needs mozilla internal strings. Support multiple printers in the print dialog. This is actually a bug fix because on several distributions using hardcoded Poscript/default will simply not work at all.
Diffstat (limited to 'embed/mozilla/EphyUtils.cpp')
-rw-r--r--embed/mozilla/EphyUtils.cpp142
1 files changed, 142 insertions, 0 deletions
diff --git a/embed/mozilla/EphyUtils.cpp b/embed/mozilla/EphyUtils.cpp
index 9b271abaf..c5e0bf666 100644
--- a/embed/mozilla/EphyUtils.cpp
+++ b/embed/mozilla/EphyUtils.cpp
@@ -25,9 +25,15 @@
#endif
#include "EphyUtils.h"
+#include "ephy-embed-shell.h"
+#include "ephy-embed-single.h"
#include <nsIServiceManager.h>
#include <nsEmbedString.h>
+#include <nsIWindowWatcher.h>
+#include <nsIEmbeddingSiteWindow.h>
+#include <nsIWebBrowserChrome.h>
+#include <gtkmozembed.h>
nsresult
EphyUtils::GetIOService (nsIIOService **ioService)
@@ -64,3 +70,139 @@ nsresult EphyUtils::NewURI (nsIURI **result, const nsACString &spec)
return rv;
}
+
+GtkWidget *
+EphyUtils::FindEmbed (nsIDOMWindow *aDOMWindow)
+{
+ if (!aDOMWindow) return nsnull;
+
+ nsCOMPtr<nsIWindowWatcher> wwatch
+ (do_GetService("@mozilla.org/embedcomp/window-watcher;1"));
+ NS_ENSURE_TRUE (wwatch, nsnull);
+
+ /* this DOM window may belong to some inner frame, we need
+ * to get the topmost DOM window to get the embed
+ */
+ nsCOMPtr<nsIDOMWindow> topWindow;
+ aDOMWindow->GetTop (getter_AddRefs (topWindow));
+ if (!topWindow) return nsnull;
+
+ nsCOMPtr<nsIWebBrowserChrome> windowChrome;
+ wwatch->GetChromeForWindow (topWindow, getter_AddRefs(windowChrome));
+ NS_ENSURE_TRUE (windowChrome, nsnull);
+
+ nsCOMPtr<nsIEmbeddingSiteWindow> window (do_QueryInterface(windowChrome));
+ NS_ENSURE_TRUE (window, nsnull);
+
+ nsresult rv;
+ GtkWidget *mozembed;
+ rv = window->GetSiteWindow ((void **)&mozembed);
+ NS_ENSURE_SUCCESS (rv, nsnull);
+
+ return mozembed;
+}
+
+GtkWidget *
+EphyUtils::FindGtkParent (nsIDOMWindow *aDOMWindow)
+{
+ GtkWidget *embed = FindEmbed (aDOMWindow);
+ NS_ENSURE_TRUE (embed, nsnull);
+
+ return gtk_widget_get_toplevel (GTK_WIDGET (embed));
+}
+
+#define MM_TO_INCH(x) (((double) x) / 25.4)
+
+nsresult
+EphyUtils::CollatePrintSettings (const EmbedPrintInfo *info,
+ nsIPrintSettings *options,
+ gboolean preview)
+{
+ const static int frame_types[] = {
+ nsIPrintSettings::kFramesAsIs,
+ nsIPrintSettings::kSelectedFrame,
+ nsIPrintSettings::kEachFrameSep
+ };
+
+ switch (info->pages)
+ {
+ case 0:
+ options->SetPrintRange (nsIPrintSettings::kRangeAllPages);
+ break;
+ case 1:
+ options->SetPrintRange (nsIPrintSettings::kRangeSpecifiedPageRange);
+ options->SetStartPageRange (info->from_page);
+ options->SetEndPageRange (info->to_page);
+ break;
+ case 2:
+ options->SetPrintRange (nsIPrintSettings::kRangeSelection);
+ break;
+ }
+
+ options->SetMarginTop (MM_TO_INCH (info->top_margin));
+ options->SetMarginBottom (MM_TO_INCH (info->bottom_margin));
+ options->SetMarginLeft (MM_TO_INCH (info->left_margin));
+ options->SetMarginRight (MM_TO_INCH (info->right_margin));
+
+ nsEmbedString tmp;
+
+ NS_CStringToUTF16 (nsEmbedCString(info->header_left_string),
+ NS_CSTRING_ENCODING_UTF8, tmp);
+ options->SetHeaderStrLeft (tmp.get());
+
+ NS_CStringToUTF16 (nsEmbedCString(info->header_center_string),
+ NS_CSTRING_ENCODING_UTF8, tmp);
+ options->SetHeaderStrCenter (tmp.get());
+
+ NS_CStringToUTF16 (nsEmbedCString(info->header_right_string),
+ NS_CSTRING_ENCODING_UTF8, tmp);
+ options->SetHeaderStrRight (tmp.get());
+
+ NS_CStringToUTF16 (nsEmbedCString(info->footer_left_string),
+ NS_CSTRING_ENCODING_UTF8, tmp);
+ options->SetFooterStrLeft (tmp.get());
+
+ NS_CStringToUTF16 (nsEmbedCString(info->footer_center_string),
+ NS_CSTRING_ENCODING_UTF8, tmp);
+ options->SetFooterStrCenter(tmp.get());
+
+ NS_CStringToUTF16 (nsEmbedCString(info->footer_right_string),
+ NS_CSTRING_ENCODING_UTF8, tmp);
+ options->SetFooterStrRight(tmp.get());
+
+ NS_CStringToUTF16 (nsEmbedCString(info->file),
+ NS_CSTRING_ENCODING_UTF8, tmp);
+ options->SetToFileName (tmp.get());
+
+ NS_CStringToUTF16 (nsEmbedCString(info->printer),
+ NS_CSTRING_ENCODING_UTF8, tmp);
+ options->SetPrinterName (tmp.get());
+
+ /**
+ * Work around a mozilla bug where paper size & orientation are ignored
+ * and the specified file is created (containing invalid postscript)
+ * in print preview mode if we set "print to file" to true.
+ * See epiphany bug #119818.
+ */
+ if (preview)
+ {
+ options->SetPrintToFile (PR_FALSE);
+ }
+ else
+ {
+ options->SetPrintToFile (info->print_to_file);
+ }
+
+ /* native paper size formats. Our dialog does not support custom yet */
+ options->SetPaperSize (nsIPrintSettings::kPaperSizeNativeData);
+
+ NS_CStringToUTF16 (nsEmbedCString(info->paper),
+ NS_CSTRING_ENCODING_UTF8, tmp);
+ options->SetPaperName (tmp.get());
+
+ options->SetPrintInColor (info->print_color);
+ options->SetOrientation (info->orientation);
+ options->SetPrintFrameType (frame_types[info->frame_type]);
+
+ return NS_OK;
+}