aboutsummaryrefslogtreecommitdiffstats
path: root/embed/mozilla/PrintingPromptService.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'embed/mozilla/PrintingPromptService.cpp')
-rw-r--r--embed/mozilla/PrintingPromptService.cpp128
1 files changed, 111 insertions, 17 deletions
diff --git a/embed/mozilla/PrintingPromptService.cpp b/embed/mozilla/PrintingPromptService.cpp
index 570b15774..2770f0d30 100644
--- a/embed/mozilla/PrintingPromptService.cpp
+++ b/embed/mozilla/PrintingPromptService.cpp
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2002 Philip Langdale
* Copyright (C) 2003-2004 Christian Persch
+ * Copyright (C) 2005 Juerg Billeter
*
* 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
@@ -24,6 +25,8 @@
#include "config.h"
#include <gtk/gtkdialog.h>
+
+#include <libgnomeprintui/gnome-print-dialog.h>
#include "print-dialog.h"
#include "ephy-embed.h"
@@ -39,22 +42,30 @@
#include <nsIServiceManager.h>
/* Implementation file */
-NS_IMPL_ISUPPORTS1(GPrintingPromptService, nsIPrintingPromptService)
+NS_IMPL_ISUPPORTS3(GPrintingPromptService, nsIPrintingPromptService, nsIWebProgressListener, nsIPrintProgressParams)
GPrintingPromptService::GPrintingPromptService()
{
LOG ("GPrintingPromptService ctor (%p)", this);
+
+ mPrintInfo = NULL;
}
GPrintingPromptService::~GPrintingPromptService()
{
LOG ("GPrintingPromptService dtor (%p)", this);
+
+ if (mPrintInfo != NULL)
+ {
+ ephy_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)
{
- EphyDialog *dialog;
+ EmbedPrintInfo *info;
+ GtkWidget *dialog;
if (eel_gconf_get_boolean (CONF_LOCKDOWN_DISABLE_PRINTING))
{
@@ -64,38 +75,50 @@ NS_IMETHODIMP GPrintingPromptService::ShowPrintDialog(nsIDOMWindow *parent, nsIW
EphyEmbed *embed = EPHY_EMBED (EphyUtils::FindEmbed (parent));
NS_ENSURE_TRUE (embed, NS_ERROR_FAILURE);
+ info = ephy_print_get_print_info ();
+
if (!eel_gconf_get_boolean (CONF_LOCKDOWN_DISABLE_PRINT_SETUP))
{
GtkWidget *gtkParent = EphyUtils::FindGtkParent(parent);
NS_ENSURE_TRUE (gtkParent, NS_ERROR_FAILURE);
- dialog = ephy_print_dialog_new (gtkParent, embed);
- ephy_dialog_set_modal (dialog, TRUE);
+ dialog = ephy_print_dialog_new (gtkParent, info);
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
- int ret = ephy_dialog_run (dialog);
-
- g_object_unref (dialog);
+ int ret;
+
+ while (TRUE)
+ {
+ ret = gtk_dialog_run (GTK_DIALOG (dialog));;
+
+ if (ret != GNOME_PRINT_DIALOG_RESPONSE_PRINT)
+ break;
+
+ if (ephy_print_verify_postscript (GNOME_PRINT_DIALOG (dialog)))
+ break;
+ }
+
+ gtk_widget_destroy (dialog);
- if (ret != GTK_RESPONSE_OK)
+ if (ret != GNOME_PRINT_DIALOG_RESPONSE_PRINT)
{
+ ephy_print_info_free (info);
+
return NS_ERROR_ABORT;
}
}
- EmbedPrintInfo *info;
-
- info = ephy_print_get_print_info ();
-
/* work around mozilla bug which borks when printing selection without having one */
- if (info->pages == 2 && ephy_command_manager_can_do_command
+ if (info->range == GNOME_PRINT_RANGE_SELECTION &&
+ ephy_command_manager_can_do_command
(EPHY_COMMAND_MANAGER (embed), "cmd_copy") == FALSE)
{
- info->pages = 0;
+ info->range = GNOME_PRINT_RANGE_ALL;
}
EphyUtils::CollatePrintSettings (info, printSettings, FALSE);
-
- ephy_print_info_free (info);
+
+ mPrintInfo = info;
return NS_OK;
}
@@ -103,7 +126,13 @@ NS_IMETHODIMP GPrintingPromptService::ShowPrintDialog(nsIDOMWindow *parent, nsIW
/* 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_ERROR_NOT_IMPLEMENTED;
+ *printProgressParams = NS_STATIC_CAST(nsIPrintProgressParams*, this);
+ NS_ADDREF(*printProgressParams);
+
+ *webProgressListener = NS_STATIC_CAST(nsIWebProgressListener*, this);
+ NS_ADDREF(*webProgressListener);
+
+ return NS_OK;
}
/* void showPageSetup (in nsIDOMWindow parent, in nsIPrintSettings printSettings, in nsIObserver printObserver); */
@@ -138,3 +167,68 @@ NS_IMETHODIMP GPrintingPromptService::ShowPrinterProperties(nsIDOMWindow *parent
{
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)
+{
+ if ((aStateFlags & STATE_STOP) && mPrintInfo)
+ {
+ if (NS_SUCCEEDED (aStatus))
+ {
+ ephy_print_do_print_and_free (mPrintInfo);
+ }
+ else
+ {
+ ephy_print_info_free (mPrintInfo);
+ }
+
+ mPrintInfo = NULL;
+ }
+ 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_ERROR_NOT_IMPLEMENTED;
+}
+
+/* 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;
+}
+