docshell changes for drag/drop/copy/paste hooks (bug 197121) r=adamlock, sr=smfr

git-svn-id: svn://10.0.0.236/trunk@141302 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
brade%netscape.com
2003-04-17 13:16:05 +00:00
parent 7ed8897a64
commit 228c73e38c
5 changed files with 193 additions and 2 deletions

View File

@@ -241,11 +241,13 @@ nsDocShell::nsDocShell():
mUseExternalProtocolHandler(PR_FALSE),
mDisallowPopupWindows(PR_FALSE),
mIsBeingDestroyed(PR_FALSE),
mIsExecutingOnLoadHandler(PR_FALSE),
mEditorData(nsnull),
mTransferableHookData(nsnull),
mParent(nsnull),
mTreeOwner(nsnull),
mChromeEventHandler(nsnull),
mIsPrintingOrPP(PR_FALSE),
mIsExecutingOnLoadHandler(PR_FALSE)
mIsPrintingOrPP(PR_FALSE)
{
#ifdef PR_LOGGING
if (! gDocShellLog)
@@ -427,6 +429,19 @@ NS_IMETHODIMP nsDocShell::GetInterface(const nsIID & aIID, void **aSink)
return NS_NOINTERFACE;
}
else if (aIID.Equals(NS_GET_IID(nsIClipboardDragDropHookList))
&& NS_SUCCEEDED(EnsureTransferableHookData())) {
nsCOMPtr<nsIClipboardDragDropHookList> hook =
NS_STATIC_CAST(nsIClipboardDragDropHookList *, mTransferableHookData);
if (hook)
{
*aSink = hook;
NS_ADDREF((nsISupports *)*aSink);
return NS_OK;
}
return NS_NOINTERFACE;
}
else if (aIID.Equals(NS_GET_IID(nsISelectionDisplay))) {
nsCOMPtr<nsIPresShell> shell;
nsresult rv = GetPresShell(getter_AddRefs(shell));
@@ -2976,6 +2991,10 @@ nsDocShell::Destroy()
delete mEditorData;
mEditorData = 0;
NS_IF_RELEASE(NS_STATIC_CAST(nsIClipboardDragDropHookList *, mTransferableHookData));
delete mTransferableHookData;
mTransferableHookData = nsnull;
// Save the state of the current document, before destroying the window.
// This is needed to capture the state of a frameset when the new document
// causes the frameset to be destroyed...
@@ -6718,6 +6737,18 @@ nsDocShell::EnsureEditorData()
return mEditorData ? NS_OK : NS_ERROR_FAILURE;
}
NS_IMETHODIMP
nsDocShell::EnsureTransferableHookData()
{
if (!mTransferableHookData) {
mTransferableHookData = new nsTransferableHookData();
if (!mTransferableHookData) return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(NS_STATIC_CAST(nsIClipboardDragDropHookList *, mTransferableHookData));
}
return NS_OK;
}
NS_IMETHODIMP nsDocShell::EnsureFind()
{