Bug 65878: Make Image documents obey scrolling attribute on containing frames/iframes, remove unused variable, r=heikki@netscape.com, sr=jst@netscape.com

This commit is contained in:
pollmann%netscape.com 2001-03-14 07:35:29 +00:00
Родитель 9d7ce42388
Коммит ce606f1c58
2 изменённых файлов: 23 добавлений и 15 удалений

Просмотреть файл

@ -339,7 +339,6 @@ public:
PRInt32 mNumOpenIFRAMES;
nsCString mRef;
nsScrollPreference mOriginalScrollPreference;
nsString mBaseHREF;
nsString mBaseTarget;
@ -3516,15 +3515,13 @@ HTMLContentSink::StartLayout()
// Else, reset scrolling to default settings for this shell.
// This must happen before the initial reflow, when we create the root frame
nsresult rv;
if (mWebShell) {
nsCOMPtr<nsIScrollable> scrollableContainer = do_QueryInterface(mWebShell, &rv);
if (NS_SUCCEEDED(rv) && scrollableContainer) {
if (mFrameset) {
scrollableContainer->SetCurrentScrollbarPreferences(nsIScrollable::ScrollOrientation_Y, NS_STYLE_OVERFLOW_HIDDEN);
scrollableContainer->SetCurrentScrollbarPreferences(nsIScrollable::ScrollOrientation_X, NS_STYLE_OVERFLOW_HIDDEN);
} else {
scrollableContainer->ResetScrollbarPreferences();
}
nsCOMPtr<nsIScrollable> scrollableContainer = do_QueryInterface(mWebShell, &rv);
if (NS_SUCCEEDED(rv) && scrollableContainer) {
if (mFrameset) {
scrollableContainer->SetCurrentScrollbarPreferences(nsIScrollable::ScrollOrientation_Y, NS_STYLE_OVERFLOW_HIDDEN);
scrollableContainer->SetCurrentScrollbarPreferences(nsIScrollable::ScrollOrientation_X, NS_STYLE_OVERFLOW_HIDDEN);
} else {
scrollableContainer->ResetScrollbarPreferences();
}
}
@ -3568,7 +3565,7 @@ HTMLContentSink::StartLayout()
}
}
if ((nsnull != ref) || mFrameset) {
if (ref || mFrameset) {
// XXX support more than one presentation-shell here
// Get initial scroll preference and save it away; disable the
@ -3586,10 +3583,6 @@ HTMLContentSink::StartLayout()
nsIScrollableView* sview = nsnull;
rootView->QueryInterface(NS_GET_IID(nsIScrollableView), (void**) &sview);
if (nsnull != sview) {
if (mFrameset)
mOriginalScrollPreference = nsScrollPreference_kNeverScroll;
else
sview->GetScrollPreference(mOriginalScrollPreference);
sview->SetScrollPreference(nsScrollPreference_kNeverScroll);
}
}

Просмотреть файл

@ -40,6 +40,9 @@
// Needed for Localization
#include "nsXPIDLString.h"
#include "nsIStringBundle.h"
// Needed to fetch scrollbar prefs for image documents that are iframes/frameset frames
#include "nsIScrollable.h"
#include "nsWeakReference.h"
#define NSIMAGEDOCUMENT_PROPERTIES_URI "chrome://communicator/locale/layout/ImageDocument.properties"
static NS_DEFINE_CID(kStringBundleServiceCID, NS_STRINGBUNDLESERVICE_CID);
@ -85,6 +88,7 @@ public:
nsIImageRequest* mImageRequest;
nscolor mBlack;
nsWeakPtr mContainer;
};
//----------------------------------------------------------------------
@ -195,6 +199,8 @@ nsImageDocument::StartDocumentLoad(const char* aCommand,
PRBool aReset)
{
NS_ASSERTION(aDocListener, "null aDocListener");
NS_ENSURE_ARG_POINTER(aContainer);
mContainer = dont_AddRef(NS_GetWeakReference(aContainer));
nsresult rv = Init();
@ -345,6 +351,15 @@ nsImageDocument::CreateSyntheticDocument()
void
nsImageDocument::StartLayout()
{
// Reset scrolling to default settings for this shell.
// This must happen before the initial reflow, when we create the root frame
nsCOMPtr<nsIScrollable> scrollableContainer(do_QueryReferent(mContainer));
if (scrollableContainer) {
scrollableContainer->ResetScrollbarPreferences();
}
PRInt32 i, ns = GetNumberOfShells();
for (i = 0; i < ns; i++) {
nsIPresShell* shell = GetShellAt(i);