diff options
Diffstat (limited to 'src/yelp-gecko-services.cpp')
-rw-r--r-- | src/yelp-gecko-services.cpp | 464 |
1 files changed, 0 insertions, 464 deletions
diff --git a/src/yelp-gecko-services.cpp b/src/yelp-gecko-services.cpp deleted file mode 100644 index 1ee3a229..00000000 --- a/src/yelp-gecko-services.cpp +++ /dev/null @@ -1,464 +0,0 @@ -/* - * Copyright (C) 2002 Philip Langdale - * Copyright (C) 2003-2004 Christian Persch - * Copyright (C) 2005 Juerg Billeter - * Copyright (C) 2005 Don Scorgie <Don@Scorgie.org> - * - * 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 - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - */ - -#include <mozilla-config.h> -#include <config.h> - -#include <stdlib.h> -#include <unistd.h> - -#include <nsStringAPI.h> - -#include <nsCOMPtr.h> -#include <nsIComponentManager.h> -#include <nsComponentManagerUtils.h> -#include <nsIComponentRegistrar.h> -#include <nsIGenericFactory.h> -#include <nsILocalFile.h> -#include <nsIPrintSettings.h> -#include <nsServiceManagerUtils.h> - -#ifdef XPCOM_GLUE -#include <nsXPCOMGlue.h> -#else -#include <nsXPCOM.h> -#endif - -#include "yelp-gecko-services.h" - -/* Implementation file */ -NS_IMPL_ISUPPORTS3(GPrintingPromptService, nsIPrintingPromptService, nsIWebProgressListener, nsIPrintProgressParams) - - GPrintingPromptService::GPrintingPromptService() -{ - mPrintInfo = NULL; -} - -GPrintingPromptService::~GPrintingPromptService() -{ - if (mPrintInfo != NULL) - { - yelp_print_info_free (mPrintInfo); - } -} - -/* void showPrintDialog (in nsIDOMWindow parent, in nsIWebBrowserPrint webBrowserPrint, in nsIPrintSettings printSettings); */ -NS_IMETHODIMP GPrintingPromptService::ShowPrintDialog(nsIDOMWindow *parent, nsIWebBrowserPrint *webBrowserPrint, nsIPrintSettings *printSettings) -{ - return NS_OK; - -} - -/* void showProgress (in nsIDOMWindow parent, in nsIWebBrowserPrint webBrowserPrint, in nsIPrintSettings printSettings, in nsIObserver openDialogObserver, in boolean isForPrinting, out nsIWebProgressListener webProgressListener, out nsIPrintProgressParams printProgressParams, out boolean notifyOnOpen); */ -NS_IMETHODIMP GPrintingPromptService::ShowProgress(nsIDOMWindow *parent, nsIWebBrowserPrint *webBrowserPrint, nsIPrintSettings *printSettings, nsIObserver *openDialogObserver, PRBool isForPrinting, nsIWebProgressListener **webProgressListener, nsIPrintProgressParams **printProgressParams, PRBool *notifyOnOpen) -{ - return NS_OK; -} - -/* void showPageSetup (in nsIDOMWindow parent, in nsIPrintSettings printSettings, in nsIObserver printObserver); */ -NS_IMETHODIMP GPrintingPromptService::ShowPageSetup(nsIDOMWindow *parent, nsIPrintSettings *printSettings, - nsIObserver *printObserver) -{ - return NS_OK; -} - -/* void showPrinterProperties (in nsIDOMWindow parent, in wstring printerName, in nsIPrintSettings printSettings); */ -NS_IMETHODIMP GPrintingPromptService::ShowPrinterProperties(nsIDOMWindow *parent, const PRUnichar *printerName, nsIPrintSettings *printSettings) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -/* void onStateChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in unsigned long aStateFlags, in nsresult aStatus); */ -NS_IMETHODIMP GPrintingPromptService::OnStateChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 aStateFlags, nsresult aStatus) -{ - return NS_OK; -} - -/* void onProgressChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in long aCurSelfProgress, in long aMaxSelfProgress, in long aCurTotalProgress, in long aMaxTotalProgress); */ -NS_IMETHODIMP GPrintingPromptService::OnProgressChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRInt32 aCurSelfProgress, PRInt32 aMaxSelfProgress, PRInt32 aCurTotalProgress, PRInt32 aMaxTotalProgress) -{ - return NS_OK; -} - -/* void onLocationChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsIURI location); */ -NS_IMETHODIMP GPrintingPromptService::OnLocationChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsIURI *location) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* void onStatusChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsresult aStatus, in wstring aMessage); */ -NS_IMETHODIMP GPrintingPromptService::OnStatusChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsresult aStatus, const PRUnichar *aMessage) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* void onSecurityChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in unsigned long state); */ -NS_IMETHODIMP GPrintingPromptService::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 state) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* attribute wstring docTitle; */ -NS_IMETHODIMP GPrintingPromptService::GetDocTitle(PRUnichar * *aDocTitle) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} -NS_IMETHODIMP GPrintingPromptService::SetDocTitle(const PRUnichar * aDocTitle) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* attribute wstring docURL; */ -NS_IMETHODIMP GPrintingPromptService::GetDocURL(PRUnichar * *aDocURL) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} -NS_IMETHODIMP GPrintingPromptService::SetDocURL(const PRUnichar * aDocURL) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMPL_ISUPPORTS1(PrintListener, nsIWebProgressListener) - - PrintListener::PrintListener (YelpPrintInfo *in, nsIWebBrowserPrint *p) -{ - info = in; - print = p; - cancel_happened = FALSE; - /*NULL*/ - -} - -PrintListener::~PrintListener () -{ - /*NULL*/ -} - -/* void onStateChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in unsigned long aStateFlags, in nsresult aStatus); */ -NS_IMETHODIMP PrintListener::OnStateChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 aStateFlags, nsresult aStatus) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* void onProgressChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in long aCurSelfProgress, in long aMaxSelfProgress, in long aCurTotalProgress, in long aMaxTotalProgress); */ -NS_IMETHODIMP PrintListener::OnProgressChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRInt32 aCurSelfProgress, PRInt32 aMaxSelfProgress, PRInt32 aCurTotalProgress, PRInt32 aMaxTotalProgress) -{ - yelp_print_update_progress (info, - (1.0 * aCurTotalProgress) / (aMaxTotalProgress * 1.0)); - - if (info->cancelled && !cancel_happened) { - /* This doesn't seem to actually cancel anything. - * therefore, the best course of action is to ignore it - * until we've finished printing to the file - * and then free it - Mozilla bug #253926 - */ - print->Cancel(); - cancel_happened = TRUE; - } - if (aCurTotalProgress == 100 && aMaxTotalProgress == 100) /* 100% finished */ - yelp_print_moz_finished (info); - return NS_OK; -} - -/* void onLocationChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsIURI location); */ -NS_IMETHODIMP PrintListener::OnLocationChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsIURI *location) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* void onStatusChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsresult aStatus, in wstring aMessage); */ -NS_IMETHODIMP PrintListener::OnStatusChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsresult aStatus, const PRUnichar *aMessage) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* void onSecurityChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in unsigned long state); */ -NS_IMETHODIMP PrintListener::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 state) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* static functions */ - -/* static */nsresult -PrintListener::SetPrintSettings (YelpPrintInfo *settings, - PRBool preview, - nsIPrintSettings * target) -{ - nsString tmp; - - /* This is a bastard mix of old Yelp stuff, old epiphany stuff - * and new epiphany stuff. It does work though. - */ - /* Initialisation */ - target->SetIsInitializedFromPrinter (PR_FALSE); - target->SetIsInitializedFromPrefs (PR_FALSE); - target->SetPrintSilent (PR_FALSE); - target->SetShowPrintProgress (PR_TRUE); - target->SetNumCopies (1); - - /* We always print PS to a file and then hand that off to gtk-print */ - target->SetPrinterName (NS_LITERAL_STRING ("PostScript/default").get()); - target->SetPrintToFile (PR_FALSE); - - /* This is the time between printing each page, in ms. - * It 'gives the user more time to press cancel' ! - * We don't want any of this nonsense, so set this to a low value, - * just enough to update the print dialogue. - */ - target->SetPrintPageDelay (50); - - if (!preview) { - gchar *base; - const gchar *temp_dir; - gint fd; - GtkPageSet pageSet; - GtkPrintPages printPages; - - target->SetPrintToFile (PR_TRUE); - - temp_dir = g_get_tmp_dir (); - base = g_build_filename (temp_dir, "printXXXXXX", NULL); - fd = g_mkstemp (base); - close(fd); - settings->tempfile = g_strdup (base); - - g_free (base); - - - NS_CStringToUTF16 (nsDependentCString(settings->tempfile), - NS_CSTRING_ENCODING_UTF8, tmp); - target->SetPrintToFile (PR_TRUE); - target->SetToFileName (tmp.get()); - - pageSet = gtk_print_settings_get_page_set (settings->config); - target->SetPrintOptions (nsIPrintSettings::kPrintEvenPages, - pageSet != GTK_PAGE_SET_ODD); - target->SetPrintOptions (nsIPrintSettings::kPrintEvenPages, - pageSet != GTK_PAGE_SET_EVEN); - - target->SetPrintReversed (gtk_print_settings_get_reverse (settings->config)); - - printPages = gtk_print_settings_get_print_pages (settings->config); - switch (printPages) { - case GTK_PRINT_PAGES_RANGES: { - int numRanges = 0; - GtkPageRange *pageRanges = gtk_print_settings_get_page_ranges (settings->config, &numRanges); - if (numRanges > 0) { - /* FIXME: We can only support one range, - * For now, ignore more ranges */ - target->SetPrintRange (nsIPrintSettings::kRangeSpecifiedPageRange); - target->SetStartPageRange (pageRanges[0].start+1); - target->SetEndPageRange (pageRanges[0].end+1); - - g_free (pageRanges); - } - break; - } - case GTK_PRINT_PAGES_CURRENT: - /* not supported, fall through */ - case GTK_PRINT_PAGES_ALL: - target->SetPrintRange (nsIPrintSettings::kRangeAllPages); - break; - /* FIXME: we need some custom ranges here, "Selection" and - * "Focused Frame" */ - } - } else { - target->SetPrintOptions (nsIPrintSettings::kPrintEvenPages, PR_TRUE); - target->SetPrintOptions (nsIPrintSettings::kPrintEvenPages, PR_TRUE); - target->SetPrintReversed (PR_FALSE); - target->SetPrintRange (nsIPrintSettings::kRangeAllPages); - } - - switch (gtk_print_settings_get_orientation (settings->config)) { - case GTK_PAGE_ORIENTATION_PORTRAIT: - case GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT: /* not supported */ - target->SetOrientation (nsIPrintSettings::kPortraitOrientation); - break; - case GTK_PAGE_ORIENTATION_LANDSCAPE: - case GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE: /* not supported */ - target->SetOrientation (nsIPrintSettings::kLandscapeOrientation); - break; - } - - target->SetPrintInColor (gtk_print_settings_get_use_color (settings->config)); - - target->SetPaperSizeUnit(nsIPrintSettings::kPaperSizeMillimeters); - - GtkPaperSize *paperSize = gtk_page_setup_get_paper_size (settings->setup); - if (!paperSize) { - g_warning ("Paper size not set. Aborting!\n"); - return NS_ERROR_FAILURE; - } - - target->SetPaperSizeType (nsIPrintSettings::kPaperSizeDefined); - target->SetPaperWidth (gtk_paper_size_get_width (paperSize, GTK_UNIT_MM)); - target->SetPaperHeight (gtk_paper_size_get_height (paperSize, GTK_UNIT_MM)); - -#ifdef HAVE_GECKO_1_9 - target->SetPaperName (NS_ConvertUTF8toUTF16 (gtk_paper_size_get_name (paperSize)).get ()); -#else - { - /* Mozilla bug https://bugzilla.mozilla.org/show_bug.cgi?id=307404 - * means that we cannot actually use any paper sizes except mozilla's - * builtin list, and we must refer to them *by name*! - */ - static const struct { - const char gtkPaperName[13]; - const char mozPaperName[10]; - } paperTable [] = { - { GTK_PAPER_NAME_A5, "A5" }, - { GTK_PAPER_NAME_A4, "A4" }, - { GTK_PAPER_NAME_A3, "A3" }, - { GTK_PAPER_NAME_LETTER, "Letter" }, - { GTK_PAPER_NAME_LEGAL, "Legal" }, - { GTK_PAPER_NAME_EXECUTIVE, "Executive" }, - }; - - const char *paperName = gtk_paper_size_get_name (paperSize); - - PRUint32 i; - for (i = 0; i < G_N_ELEMENTS (paperTable); i++) { - if (g_ascii_strcasecmp (paperTable[i].gtkPaperName, paperName) == 0) { - paperName = paperTable[i].mozPaperName; - break; - } - } - if (i == G_N_ELEMENTS (paperTable)) { - /* Not in table, fall back to A4 */ - g_warning ("Unknown paper name '%s', falling back to A4", - gtk_paper_size_get_name (paperSize)); - paperName = paperTable[1].mozPaperName; - } - - target->SetPaperName (NS_ConvertUTF8toUTF16 (paperName).get ()); - } -#endif /* !HAVE_GECKO_1_9 */ - - /* Sucky mozilla wants margins in inch! */ - target->SetMarginTop (gtk_page_setup_get_top_margin (settings->setup, GTK_UNIT_INCH)); - target->SetMarginBottom (gtk_page_setup_get_bottom_margin (settings->setup, GTK_UNIT_INCH)); - target->SetMarginLeft (gtk_page_setup_get_left_margin (settings->setup, GTK_UNIT_INCH)); - target->SetMarginRight (gtk_page_setup_get_right_margin (settings->setup, GTK_UNIT_INCH)); - - - NS_CStringToUTF16 (nsDependentCString(settings->header_left_string), - NS_CSTRING_ENCODING_UTF8, tmp); - target->SetHeaderStrLeft (tmp.get()); - - NS_CStringToUTF16 (nsDependentCString(settings->header_center_string), - NS_CSTRING_ENCODING_UTF8, tmp); - target->SetHeaderStrCenter (tmp.get()); - - NS_CStringToUTF16 (nsDependentCString(settings->header_right_string), - NS_CSTRING_ENCODING_UTF8, tmp); - target->SetHeaderStrRight (tmp.get()); - - NS_CStringToUTF16 (nsDependentCString(settings->footer_left_string), - NS_CSTRING_ENCODING_UTF8, tmp); - target->SetFooterStrLeft (tmp.get()); - - NS_CStringToUTF16 (nsDependentCString(settings->footer_center_string), - NS_CSTRING_ENCODING_UTF8, tmp); - target->SetFooterStrCenter(tmp.get()); - - NS_CStringToUTF16 (nsDependentCString(settings->footer_right_string), - NS_CSTRING_ENCODING_UTF8, tmp); - target->SetFooterStrRight(tmp.get()); - - /* 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. - */ - target->SetPrintFrameType(nsIPrintSettings::kFramesAsIs); /* FIXME setting */ - target->SetPrintFrameTypeUsage (nsIPrintSettings::kUseSettingWhenPossible); - - target->SetScaling (gtk_print_settings_get_scale (settings->config) / 100.0); - - /* FIXME: What do these do? Need to learn to fix them properly - * For now, leave at Epiphany type defaults - */ - - target->SetShrinkToFit (PR_FALSE); /* FIXME setting */ - - target->SetPrintBGColors (PR_FALSE); /* FIXME setting */ - target->SetPrintBGImages (PR_FALSE); /* FIXME setting */ - - /* target->SetPlexName (LITERAL ("default")); */ - /* target->SetColorspace (LITERAL ("default")); */ - /* target->SetResolutionName (LITERAL ("default")); */ - /* target->SetDownloadFonts (PR_TRUE); */ - - return NS_OK; - -}; - -/* component registration */ - -NS_GENERIC_FACTORY_CONSTRUCTOR(GPrintingPromptService) - -static const nsModuleComponentInfo sAppComps[] = { - { - G_PRINTINGPROMPTSERVICE_CLASSNAME, - G_PRINTINGPROMPTSERVICE_CID, - G_PRINTINGPROMPTSERVICE_CONTRACTID, - GPrintingPromptServiceConstructor - }, -}; - -void -yelp_register_printing () -{ - nsresult rv; - nsCOMPtr<nsIComponentRegistrar> cr; - rv = NS_GetComponentRegistrar(getter_AddRefs(cr)); - NS_ENSURE_SUCCESS (rv, ); - - nsCOMPtr<nsIComponentManager> cm; - rv = NS_GetComponentManager (getter_AddRefs (cm)); - NS_ENSURE_SUCCESS (rv, ); - - nsCOMPtr<nsIGenericFactory> componentFactory; - componentFactory = do_CreateInstance ("@mozilla.org/generic-factory;1", &rv); - - if (NS_FAILED(rv) || !componentFactory) - { - g_warning ("Failed to make a factory for %s\n", sAppComps[0].mDescription); - return; - } - - componentFactory->SetComponentInfo(&(sAppComps[0])); - - rv = cr->RegisterFactory(sAppComps[0].mCID, - sAppComps[0].mDescription, - sAppComps[0].mContractID, - componentFactory); - if (NS_FAILED(rv)) - { - g_warning ("Failed to register %s\n", sAppComps[0].mDescription); - } - -} |