From 015984531492a68cd813b04a270b2039205f1b91 Mon Sep 17 00:00:00 2001 From: "neil%parkwaycc.co.uk" Date: Fri, 4 Jun 2004 22:06:05 +0000 Subject: [PATCH] Bug 245024 Fix crash in print preview by blocking click events r/sr=jst --- content/base/src/nsDocumentViewer.cpp | 2 +- content/base/src/nsPrintEngine.cpp | 5 +- content/base/src/nsPrintPreviewListener.cpp | 110 +++++--------------- content/base/src/nsPrintPreviewListener.h | 48 ++------- layout/base/nsDocumentViewer.cpp | 2 +- layout/printing/nsPrintEngine.cpp | 5 +- layout/printing/nsPrintPreviewListener.cpp | 110 +++++--------------- layout/printing/nsPrintPreviewListener.h | 48 ++------- 8 files changed, 76 insertions(+), 254 deletions(-) diff --git a/content/base/src/nsDocumentViewer.cpp b/content/base/src/nsDocumentViewer.cpp index 395de0b6cfc9..a1ec5f187c2c 100644 --- a/content/base/src/nsDocumentViewer.cpp +++ b/content/base/src/nsDocumentViewer.cpp @@ -3751,7 +3751,7 @@ DocumentViewerImpl::InstallNewPresentation() mWindow = nsnull; } - // XXX InstallPrintPreviewListener(); + mPrintEngine->InstallPrintPreviewListener(); mPrintEngine->GetNewPresentation(mPresShell, mPresContext, mViewManager, mWindow); diff --git a/content/base/src/nsPrintEngine.cpp b/content/base/src/nsPrintEngine.cpp index b70db4602df8..810e87a06464 100644 --- a/content/base/src/nsPrintEngine.cpp +++ b/content/base/src/nsPrintEngine.cpp @@ -483,8 +483,9 @@ void nsPrintEngine::InstallPrintPreviewListener() { if (!mPrt->mPPEventListeners) { - nsCOMPtr evRec (do_QueryInterface(mDocument)); - mPrt->mPPEventListeners = new nsPrintPreviewListener(evRec); + nsCOMPtr win(do_GetInterface(mContainer)); + nsCOMPtr target(do_QueryInterface(win->GetFrameElementInternal())); + mPrt->mPPEventListeners = new nsPrintPreviewListener(target); if (mPrt->mPPEventListeners) { mPrt->mPPEventListeners->AddListeners(); diff --git a/content/base/src/nsPrintPreviewListener.cpp b/content/base/src/nsPrintPreviewListener.cpp index d1b39059cdbc..17ebd208fc0b 100644 --- a/content/base/src/nsPrintPreviewListener.cpp +++ b/content/base/src/nsPrintPreviewListener.cpp @@ -38,26 +38,16 @@ #include "nsPrintPreviewListener.h" #include "nsIDOMKeyEvent.h" +#include "nsLiteralString.h" -NS_IMPL_ADDREF(nsPrintPreviewListener) -NS_IMPL_RELEASE(nsPrintPreviewListener) - -NS_INTERFACE_MAP_BEGIN(nsPrintPreviewListener) - NS_INTERFACE_MAP_ENTRY(nsIDOMContextMenuListener) - NS_INTERFACE_MAP_ENTRY(nsIDOMKeyListener) - NS_INTERFACE_MAP_ENTRY(nsIDOMMouseListener) - NS_INTERFACE_MAP_ENTRY(nsIDOMMouseMotionListener) - NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsIDOMEventListener, nsIDOMContextMenuListener) - NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMContextMenuListener) -NS_INTERFACE_MAP_END +NS_IMPL_ISUPPORTS1(nsPrintPreviewListener, nsIDOMEventListener) // // nsPrintPreviewListener ctor // -nsPrintPreviewListener::nsPrintPreviewListener (nsIDOMEventReceiver* aEVRec) - : mEventReceiver(aEVRec), - mRegFlags(REG_NONE_LISTENER) +nsPrintPreviewListener::nsPrintPreviewListener (nsIDOMEventTarget* aTarget) + : mEventTarget(aTarget) { NS_ADDREF_THIS(); } // ctor @@ -72,27 +62,17 @@ nsPrintPreviewListener::nsPrintPreviewListener (nsIDOMEventReceiver* aEVRec) nsresult nsPrintPreviewListener::AddListeners() { - if (mRegFlags != REG_NONE_LISTENER) return NS_ERROR_FAILURE; - - if (mEventReceiver) { - nsIDOMContextMenuListener *pListener = NS_STATIC_CAST(nsIDOMContextMenuListener *, this); - NS_ASSERTION(pListener, "Cast can't fail!"); - - nsresult rv = mEventReceiver->AddEventListenerByIID(pListener, NS_GET_IID(nsIDOMContextMenuListener)); - NS_ENSURE_SUCCESS(rv, rv); - mRegFlags |= REG_CONTEXTMENU_LISTENER; - - rv = mEventReceiver->AddEventListenerByIID(pListener, NS_GET_IID(nsIDOMKeyListener)); - NS_ENSURE_SUCCESS(rv, rv); - mRegFlags |= REG_KEY_LISTENER; - - rv = mEventReceiver->AddEventListenerByIID(pListener, NS_GET_IID(nsIDOMMouseListener)); - NS_ENSURE_SUCCESS(rv, rv); - mRegFlags |= REG_MOUSE_LISTENER; - - rv = mEventReceiver->AddEventListenerByIID(pListener, NS_GET_IID(nsIDOMMouseMotionListener)); - NS_ENSURE_SUCCESS(rv, rv); - mRegFlags |= REG_MOUSEMOTION_LISTENER; + if (mEventTarget) { + mEventTarget->AddEventListener(NS_LITERAL_STRING("click"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("contextmenu"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("keydown"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("keypress"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("keyup"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("mousedown"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("mousemove"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("mouseout"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("mouseover"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("mouseup"), this, true); } return NS_OK; @@ -108,23 +88,17 @@ nsPrintPreviewListener::AddListeners() nsresult nsPrintPreviewListener::RemoveListeners() { - if (mEventReceiver && mRegFlags != REG_NONE_LISTENER) { - nsIDOMContextMenuListener *pListener = NS_STATIC_CAST(nsIDOMContextMenuListener *, this); - NS_ASSERTION(pListener, "Cast can't fail!"); - - // ignore return values, so we can try to unregister the other listeners - if (mRegFlags & REG_CONTEXTMENU_LISTENER) { - mEventReceiver->RemoveEventListenerByIID(pListener, NS_GET_IID(nsIDOMContextMenuListener)); - } - if (mRegFlags & REG_KEY_LISTENER) { - mEventReceiver->RemoveEventListenerByIID(pListener, NS_GET_IID(nsIDOMKeyListener)); - } - if (mRegFlags & REG_MOUSE_LISTENER) { - mEventReceiver->RemoveEventListenerByIID(pListener, NS_GET_IID(nsIDOMMouseListener)); - } - if (mRegFlags & REG_MOUSEMOTION_LISTENER) { - mEventReceiver->RemoveEventListenerByIID(pListener, NS_GET_IID(nsIDOMMouseMotionListener)); - } + if (mEventTarget) { + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("click"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("contextmenu"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("keydown"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("keypress"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("keyup"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("mousedown"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("mousemove"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("mouseout"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("mouseover"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("mouseup"), this, true); } return NS_OK; @@ -166,39 +140,11 @@ static PRBool IsKeyOK(nsIDOMEvent* aEvent) return PR_FALSE; } -//------------------------------------------------------- -// -// KeyDown -// -NS_IMETHODIMP nsPrintPreviewListener::KeyDown(nsIDOMEvent* aKeyEvent) +NS_IMETHODIMP nsPrintPreviewListener::HandleEvent(nsIDOMEvent* aKeyEvent) { if (!IsKeyOK(aKeyEvent)) { + aKeyEvent->StopPropagation(); aKeyEvent->PreventDefault(); } return NS_OK; } - -//------------------------------------------------------- -// -// KeyUp -// -NS_IMETHODIMP nsPrintPreviewListener::KeyUp(nsIDOMEvent* aKeyEvent) -{ - if (!IsKeyOK(aKeyEvent)) { - aKeyEvent->PreventDefault(); - } - return NS_OK; -} - -//------------------------------------------------------- -// -// KeyPress -// -NS_IMETHODIMP nsPrintPreviewListener::KeyPress(nsIDOMEvent* aKeyEvent) -{ - if (!IsKeyOK(aKeyEvent)) { - aKeyEvent->PreventDefault(); - } - return NS_OK; -} - diff --git a/content/base/src/nsPrintPreviewListener.h b/content/base/src/nsPrintPreviewListener.h index ee67d8a02669..2de5403b3712 100644 --- a/content/base/src/nsPrintPreviewListener.h +++ b/content/base/src/nsPrintPreviewListener.h @@ -40,20 +40,11 @@ #define nsPrintPreviewListener_h__ // Interfaces needed to be included -#include "nsIDOMContextMenuListener.h" -#include "nsIDOMKeyListener.h" -#include "nsIDOMMouseListener.h" -#include "nsIDOMMouseMotionListener.h" +#include "nsIDOMEventListener.h" +#include "nsIDOMEventTarget.h" // Helper Classes -#include "nsIDOMEventReceiver.h" #include "nsCOMPtr.h" -#define REG_NONE_LISTENER 0x00 -#define REG_CONTEXTMENU_LISTENER 0x01 -#define REG_KEY_LISTENER 0x02 -#define REG_MOUSE_LISTENER 0x04 -#define REG_MOUSEMOTION_LISTENER 0x08 - // // class nsPrintPreviewListener // @@ -62,40 +53,14 @@ // with the DOM with AddChromeListeners() and removing itself with // RemoveChromeListeners(). // -class nsPrintPreviewListener : public nsIDOMContextMenuListener, - public nsIDOMKeyListener, - public nsIDOMMouseListener, - public nsIDOMMouseMotionListener +class nsPrintPreviewListener : public nsIDOMEventListener { public: NS_DECL_ISUPPORTS + NS_DECL_NSIDOMEVENTLISTENER - nsPrintPreviewListener(nsIDOMEventReceiver* aEVRec); - virtual ~nsPrintPreviewListener() - { - } - - // nsIDOMContextMenuListener - NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; } - NS_IMETHOD ContextMenu (nsIDOMEvent* aEvent) { aEvent->PreventDefault(); return NS_OK; } - - // nsIDOMKeyListener - NS_IMETHOD KeyDown(nsIDOMEvent* aKeyEvent); - NS_IMETHOD KeyUp(nsIDOMEvent* aKeyEvent); - NS_IMETHOD KeyPress(nsIDOMEvent* aKeyEvent); - - // nsIDOMMouseListener - NS_IMETHOD MouseDown(nsIDOMEvent* aMouseEvent) { aMouseEvent->StopPropagation();aMouseEvent->PreventDefault(); return NS_OK; } - NS_IMETHOD MouseUp(nsIDOMEvent* aMouseEvent) { aMouseEvent->StopPropagation();aMouseEvent->PreventDefault(); return NS_OK; } - NS_IMETHOD MouseClick(nsIDOMEvent* aMouseEvent) { aMouseEvent->StopPropagation();aMouseEvent->PreventDefault(); return NS_OK; } - NS_IMETHOD MouseDblClick(nsIDOMEvent* aMouseEvent) { aMouseEvent->StopPropagation();aMouseEvent->PreventDefault(); return NS_OK; } - NS_IMETHOD MouseOver(nsIDOMEvent* aMouseEvent) { aMouseEvent->StopPropagation();aMouseEvent->PreventDefault(); return NS_OK; } - NS_IMETHOD MouseOut(nsIDOMEvent* aMouseEvent) { aMouseEvent->StopPropagation();aMouseEvent->PreventDefault(); return NS_OK; } - - // nsIDOMMouseMotionListener - NS_IMETHOD DragMove(nsIDOMEvent* aMouseEvent) { return NS_OK; }; - NS_IMETHOD MouseMove(nsIDOMEvent* aMouseEvent) { aMouseEvent->PreventDefault(); return NS_OK; } + nsPrintPreviewListener(nsIDOMEventTarget* aTarget); // Add/remove the relevant listeners, based on what interfaces // the embedding chrome implements. @@ -104,8 +69,7 @@ public: private: - nsCOMPtr mEventReceiver; - PRInt8 mRegFlags; + nsCOMPtr mEventTarget; }; // class nsPrintPreviewListener diff --git a/layout/base/nsDocumentViewer.cpp b/layout/base/nsDocumentViewer.cpp index 395de0b6cfc9..a1ec5f187c2c 100644 --- a/layout/base/nsDocumentViewer.cpp +++ b/layout/base/nsDocumentViewer.cpp @@ -3751,7 +3751,7 @@ DocumentViewerImpl::InstallNewPresentation() mWindow = nsnull; } - // XXX InstallPrintPreviewListener(); + mPrintEngine->InstallPrintPreviewListener(); mPrintEngine->GetNewPresentation(mPresShell, mPresContext, mViewManager, mWindow); diff --git a/layout/printing/nsPrintEngine.cpp b/layout/printing/nsPrintEngine.cpp index b70db4602df8..810e87a06464 100644 --- a/layout/printing/nsPrintEngine.cpp +++ b/layout/printing/nsPrintEngine.cpp @@ -483,8 +483,9 @@ void nsPrintEngine::InstallPrintPreviewListener() { if (!mPrt->mPPEventListeners) { - nsCOMPtr evRec (do_QueryInterface(mDocument)); - mPrt->mPPEventListeners = new nsPrintPreviewListener(evRec); + nsCOMPtr win(do_GetInterface(mContainer)); + nsCOMPtr target(do_QueryInterface(win->GetFrameElementInternal())); + mPrt->mPPEventListeners = new nsPrintPreviewListener(target); if (mPrt->mPPEventListeners) { mPrt->mPPEventListeners->AddListeners(); diff --git a/layout/printing/nsPrintPreviewListener.cpp b/layout/printing/nsPrintPreviewListener.cpp index d1b39059cdbc..17ebd208fc0b 100644 --- a/layout/printing/nsPrintPreviewListener.cpp +++ b/layout/printing/nsPrintPreviewListener.cpp @@ -38,26 +38,16 @@ #include "nsPrintPreviewListener.h" #include "nsIDOMKeyEvent.h" +#include "nsLiteralString.h" -NS_IMPL_ADDREF(nsPrintPreviewListener) -NS_IMPL_RELEASE(nsPrintPreviewListener) - -NS_INTERFACE_MAP_BEGIN(nsPrintPreviewListener) - NS_INTERFACE_MAP_ENTRY(nsIDOMContextMenuListener) - NS_INTERFACE_MAP_ENTRY(nsIDOMKeyListener) - NS_INTERFACE_MAP_ENTRY(nsIDOMMouseListener) - NS_INTERFACE_MAP_ENTRY(nsIDOMMouseMotionListener) - NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsIDOMEventListener, nsIDOMContextMenuListener) - NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMContextMenuListener) -NS_INTERFACE_MAP_END +NS_IMPL_ISUPPORTS1(nsPrintPreviewListener, nsIDOMEventListener) // // nsPrintPreviewListener ctor // -nsPrintPreviewListener::nsPrintPreviewListener (nsIDOMEventReceiver* aEVRec) - : mEventReceiver(aEVRec), - mRegFlags(REG_NONE_LISTENER) +nsPrintPreviewListener::nsPrintPreviewListener (nsIDOMEventTarget* aTarget) + : mEventTarget(aTarget) { NS_ADDREF_THIS(); } // ctor @@ -72,27 +62,17 @@ nsPrintPreviewListener::nsPrintPreviewListener (nsIDOMEventReceiver* aEVRec) nsresult nsPrintPreviewListener::AddListeners() { - if (mRegFlags != REG_NONE_LISTENER) return NS_ERROR_FAILURE; - - if (mEventReceiver) { - nsIDOMContextMenuListener *pListener = NS_STATIC_CAST(nsIDOMContextMenuListener *, this); - NS_ASSERTION(pListener, "Cast can't fail!"); - - nsresult rv = mEventReceiver->AddEventListenerByIID(pListener, NS_GET_IID(nsIDOMContextMenuListener)); - NS_ENSURE_SUCCESS(rv, rv); - mRegFlags |= REG_CONTEXTMENU_LISTENER; - - rv = mEventReceiver->AddEventListenerByIID(pListener, NS_GET_IID(nsIDOMKeyListener)); - NS_ENSURE_SUCCESS(rv, rv); - mRegFlags |= REG_KEY_LISTENER; - - rv = mEventReceiver->AddEventListenerByIID(pListener, NS_GET_IID(nsIDOMMouseListener)); - NS_ENSURE_SUCCESS(rv, rv); - mRegFlags |= REG_MOUSE_LISTENER; - - rv = mEventReceiver->AddEventListenerByIID(pListener, NS_GET_IID(nsIDOMMouseMotionListener)); - NS_ENSURE_SUCCESS(rv, rv); - mRegFlags |= REG_MOUSEMOTION_LISTENER; + if (mEventTarget) { + mEventTarget->AddEventListener(NS_LITERAL_STRING("click"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("contextmenu"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("keydown"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("keypress"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("keyup"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("mousedown"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("mousemove"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("mouseout"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("mouseover"), this, true); + mEventTarget->AddEventListener(NS_LITERAL_STRING("mouseup"), this, true); } return NS_OK; @@ -108,23 +88,17 @@ nsPrintPreviewListener::AddListeners() nsresult nsPrintPreviewListener::RemoveListeners() { - if (mEventReceiver && mRegFlags != REG_NONE_LISTENER) { - nsIDOMContextMenuListener *pListener = NS_STATIC_CAST(nsIDOMContextMenuListener *, this); - NS_ASSERTION(pListener, "Cast can't fail!"); - - // ignore return values, so we can try to unregister the other listeners - if (mRegFlags & REG_CONTEXTMENU_LISTENER) { - mEventReceiver->RemoveEventListenerByIID(pListener, NS_GET_IID(nsIDOMContextMenuListener)); - } - if (mRegFlags & REG_KEY_LISTENER) { - mEventReceiver->RemoveEventListenerByIID(pListener, NS_GET_IID(nsIDOMKeyListener)); - } - if (mRegFlags & REG_MOUSE_LISTENER) { - mEventReceiver->RemoveEventListenerByIID(pListener, NS_GET_IID(nsIDOMMouseListener)); - } - if (mRegFlags & REG_MOUSEMOTION_LISTENER) { - mEventReceiver->RemoveEventListenerByIID(pListener, NS_GET_IID(nsIDOMMouseMotionListener)); - } + if (mEventTarget) { + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("click"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("contextmenu"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("keydown"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("keypress"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("keyup"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("mousedown"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("mousemove"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("mouseout"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("mouseover"), this, true); + mEventTarget->RemoveEventListener(NS_LITERAL_STRING("mouseup"), this, true); } return NS_OK; @@ -166,39 +140,11 @@ static PRBool IsKeyOK(nsIDOMEvent* aEvent) return PR_FALSE; } -//------------------------------------------------------- -// -// KeyDown -// -NS_IMETHODIMP nsPrintPreviewListener::KeyDown(nsIDOMEvent* aKeyEvent) +NS_IMETHODIMP nsPrintPreviewListener::HandleEvent(nsIDOMEvent* aKeyEvent) { if (!IsKeyOK(aKeyEvent)) { + aKeyEvent->StopPropagation(); aKeyEvent->PreventDefault(); } return NS_OK; } - -//------------------------------------------------------- -// -// KeyUp -// -NS_IMETHODIMP nsPrintPreviewListener::KeyUp(nsIDOMEvent* aKeyEvent) -{ - if (!IsKeyOK(aKeyEvent)) { - aKeyEvent->PreventDefault(); - } - return NS_OK; -} - -//------------------------------------------------------- -// -// KeyPress -// -NS_IMETHODIMP nsPrintPreviewListener::KeyPress(nsIDOMEvent* aKeyEvent) -{ - if (!IsKeyOK(aKeyEvent)) { - aKeyEvent->PreventDefault(); - } - return NS_OK; -} - diff --git a/layout/printing/nsPrintPreviewListener.h b/layout/printing/nsPrintPreviewListener.h index ee67d8a02669..2de5403b3712 100644 --- a/layout/printing/nsPrintPreviewListener.h +++ b/layout/printing/nsPrintPreviewListener.h @@ -40,20 +40,11 @@ #define nsPrintPreviewListener_h__ // Interfaces needed to be included -#include "nsIDOMContextMenuListener.h" -#include "nsIDOMKeyListener.h" -#include "nsIDOMMouseListener.h" -#include "nsIDOMMouseMotionListener.h" +#include "nsIDOMEventListener.h" +#include "nsIDOMEventTarget.h" // Helper Classes -#include "nsIDOMEventReceiver.h" #include "nsCOMPtr.h" -#define REG_NONE_LISTENER 0x00 -#define REG_CONTEXTMENU_LISTENER 0x01 -#define REG_KEY_LISTENER 0x02 -#define REG_MOUSE_LISTENER 0x04 -#define REG_MOUSEMOTION_LISTENER 0x08 - // // class nsPrintPreviewListener // @@ -62,40 +53,14 @@ // with the DOM with AddChromeListeners() and removing itself with // RemoveChromeListeners(). // -class nsPrintPreviewListener : public nsIDOMContextMenuListener, - public nsIDOMKeyListener, - public nsIDOMMouseListener, - public nsIDOMMouseMotionListener +class nsPrintPreviewListener : public nsIDOMEventListener { public: NS_DECL_ISUPPORTS + NS_DECL_NSIDOMEVENTLISTENER - nsPrintPreviewListener(nsIDOMEventReceiver* aEVRec); - virtual ~nsPrintPreviewListener() - { - } - - // nsIDOMContextMenuListener - NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; } - NS_IMETHOD ContextMenu (nsIDOMEvent* aEvent) { aEvent->PreventDefault(); return NS_OK; } - - // nsIDOMKeyListener - NS_IMETHOD KeyDown(nsIDOMEvent* aKeyEvent); - NS_IMETHOD KeyUp(nsIDOMEvent* aKeyEvent); - NS_IMETHOD KeyPress(nsIDOMEvent* aKeyEvent); - - // nsIDOMMouseListener - NS_IMETHOD MouseDown(nsIDOMEvent* aMouseEvent) { aMouseEvent->StopPropagation();aMouseEvent->PreventDefault(); return NS_OK; } - NS_IMETHOD MouseUp(nsIDOMEvent* aMouseEvent) { aMouseEvent->StopPropagation();aMouseEvent->PreventDefault(); return NS_OK; } - NS_IMETHOD MouseClick(nsIDOMEvent* aMouseEvent) { aMouseEvent->StopPropagation();aMouseEvent->PreventDefault(); return NS_OK; } - NS_IMETHOD MouseDblClick(nsIDOMEvent* aMouseEvent) { aMouseEvent->StopPropagation();aMouseEvent->PreventDefault(); return NS_OK; } - NS_IMETHOD MouseOver(nsIDOMEvent* aMouseEvent) { aMouseEvent->StopPropagation();aMouseEvent->PreventDefault(); return NS_OK; } - NS_IMETHOD MouseOut(nsIDOMEvent* aMouseEvent) { aMouseEvent->StopPropagation();aMouseEvent->PreventDefault(); return NS_OK; } - - // nsIDOMMouseMotionListener - NS_IMETHOD DragMove(nsIDOMEvent* aMouseEvent) { return NS_OK; }; - NS_IMETHOD MouseMove(nsIDOMEvent* aMouseEvent) { aMouseEvent->PreventDefault(); return NS_OK; } + nsPrintPreviewListener(nsIDOMEventTarget* aTarget); // Add/remove the relevant listeners, based on what interfaces // the embedding chrome implements. @@ -104,8 +69,7 @@ public: private: - nsCOMPtr mEventReceiver; - PRInt8 mRegFlags; + nsCOMPtr mEventTarget; }; // class nsPrintPreviewListener