mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-06-12 01:29:43 +00:00
#402, Bug 1363396 - Ensure ContentViewer listeners are handled only when needed. r=mccr8, a=abillings
This commit is contained in:
parent
eb8492dd33
commit
c1a5c64e78
|
@ -169,6 +169,8 @@ public:
|
||||||
|
|
||||||
nsresult Init(nsDocumentViewer *aDocViewer);
|
nsresult Init(nsDocumentViewer *aDocViewer);
|
||||||
|
|
||||||
|
void Disconnect() { mDocViewer = nullptr; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual ~nsDocViewerSelectionListener() {}
|
virtual ~nsDocViewerSelectionListener() {}
|
||||||
|
@ -193,6 +195,8 @@ public:
|
||||||
|
|
||||||
nsresult Init(nsDocumentViewer *aDocViewer);
|
nsresult Init(nsDocumentViewer *aDocViewer);
|
||||||
|
|
||||||
|
void Disconnect() { mDocViewer = nullptr; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** default destructor
|
/** default destructor
|
||||||
*/
|
*/
|
||||||
|
@ -347,7 +351,7 @@ protected:
|
||||||
RefPtr<nsPresContext> mPresContext;
|
RefPtr<nsPresContext> mPresContext;
|
||||||
nsCOMPtr<nsIPresShell> mPresShell;
|
nsCOMPtr<nsIPresShell> mPresShell;
|
||||||
|
|
||||||
nsCOMPtr<nsISelectionListener> mSelectionListener;
|
RefPtr<nsDocViewerSelectionListener> mSelectionListener;
|
||||||
RefPtr<nsDocViewerFocusListener> mFocusListener;
|
RefPtr<nsDocViewerFocusListener> mFocusListener;
|
||||||
|
|
||||||
nsCOMPtr<nsIContentViewer> mPreviousViewer;
|
nsCOMPtr<nsIContentViewer> mPreviousViewer;
|
||||||
|
@ -523,6 +527,14 @@ nsDocumentViewer::~nsDocumentViewer()
|
||||||
Destroy();
|
Destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mSelectionListener) {
|
||||||
|
mSelectionListener->Disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mFocusListener) {
|
||||||
|
mFocusListener->Disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
// XXX(?) Revoke pending invalidate events
|
// XXX(?) Revoke pending invalidate events
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -701,6 +713,9 @@ nsDocumentViewer::InitPresentationStuff(bool aDoInitialReflow)
|
||||||
|
|
||||||
// Save old listener so we can unregister it
|
// Save old listener so we can unregister it
|
||||||
RefPtr<nsDocViewerFocusListener> oldFocusListener = mFocusListener;
|
RefPtr<nsDocViewerFocusListener> oldFocusListener = mFocusListener;
|
||||||
|
if (oldFocusListener) {
|
||||||
|
oldFocusListener->Disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
// focus listener
|
// focus listener
|
||||||
//
|
//
|
||||||
|
@ -1467,11 +1482,14 @@ nsDocumentViewer::Close(nsISHEntry *aSHEntry)
|
||||||
mDocument->RemovedFromDocShell();
|
mDocument->RemovedFromDocShell();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mFocusListener && mDocument) {
|
if (mFocusListener) {
|
||||||
mDocument->RemoveEventListener(NS_LITERAL_STRING("focus"), mFocusListener,
|
mFocusListener->Disconnect();
|
||||||
false);
|
if (mDocument) {
|
||||||
mDocument->RemoveEventListener(NS_LITERAL_STRING("blur"), mFocusListener,
|
mDocument->RemoveEventListener(NS_LITERAL_STRING("focus"), mFocusListener,
|
||||||
false);
|
false);
|
||||||
|
mDocument->RemoveEventListener(NS_LITERAL_STRING("blur"), mFocusListener,
|
||||||
|
false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -3450,7 +3468,9 @@ NS_IMETHODIMP nsDocumentViewer::GetInImage(bool* aInImage)
|
||||||
|
|
||||||
NS_IMETHODIMP nsDocViewerSelectionListener::NotifySelectionChanged(nsIDOMDocument *, nsISelection *, int16_t aReason)
|
NS_IMETHODIMP nsDocViewerSelectionListener::NotifySelectionChanged(nsIDOMDocument *, nsISelection *, int16_t aReason)
|
||||||
{
|
{
|
||||||
NS_ASSERTION(mDocViewer, "Should have doc viewer!");
|
if (!mDocViewer) {
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
// get the selection state
|
// get the selection state
|
||||||
RefPtr<mozilla::dom::Selection> selection = mDocViewer->GetDocumentSelection();
|
RefPtr<mozilla::dom::Selection> selection = mDocViewer->GetDocumentSelection();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user