From 04361a6b1470f2d5cc4e23354445eb85c2d7d996 Mon Sep 17 00:00:00 2001 From: "beard%netscape.com" Date: Sun, 19 Sep 1999 00:54:55 +0000 Subject: [PATCH] bug #6251: changed Repaint() method to call nsIViewManager::UpdateAllViews() to force a globa redraw. --- docshell/base/nsWebShell.cpp | 47 ++++++++++++++++++++++++++++++------ webshell/src/nsWebShell.cpp | 47 ++++++++++++++++++++++++++++++------ 2 files changed, 80 insertions(+), 14 deletions(-) diff --git a/docshell/base/nsWebShell.cpp b/docshell/base/nsWebShell.cpp index f52909c69753..ed197ad162db 100644 --- a/docshell/base/nsWebShell.cpp +++ b/docshell/base/nsWebShell.cpp @@ -400,6 +400,7 @@ protected: nsresult CheckForTrailingSlash(nsIURI* aURL); nsresult StopBeforeRequestingURL(void); nsresult StopAfterURLAvailable(void); + nsresult GetViewManager(nsIViewManager* *viewManager); nsIEventQueue* mThreadEventQueue; nsIScriptGlobalObject *mScriptGlobal; @@ -1378,11 +1379,20 @@ nsWebShell::Repaint(PRBool aForce) NS_PRECONDITION(nsnull != mWindow, "null window"); */ - if (nsnull != mWindow) { - mWindow->Invalidate(aForce); - } - - return NS_OK; +#if 0 + if (nsnull != mWindow) { + mWindow->Invalidate(aForce); + } + return NS_OK; +#else + nsresult rv; + nsCOMPtr viewManager; + rv = GetViewManager(getter_AddRefs(viewManager)); + if (NS_SUCCEEDED(rv) && viewManager) { + rv = viewManager->UpdateAllViews(0); + } + return rv; +#endif } NS_IMETHODIMP @@ -2391,8 +2401,6 @@ nsWebShell::StopAfterURLAvailable() return NS_OK; } - - /* The generic session History code here is now obsolete. * Use nsISessionHistory instead */ @@ -4101,6 +4109,31 @@ nsWebShell::FindNext(const PRUnichar * aSearchStr, PRBool aMatchCase, PRBool aSe } +nsresult nsWebShell::GetViewManager(nsIViewManager* *viewManager) +{ + nsresult rv = NS_ERROR_FAILURE; + *viewManager = nsnull; + do { + if (nsnull == mContentViewer) break; + + nsCOMPtr docViewer; + rv = mContentViewer->QueryInterface(kIDocumentViewerIID, + getter_AddRefs(docViewer)); + if (NS_FAILED(rv)) break; + + nsCOMPtr context; + rv = docViewer->GetPresContext(*getter_AddRefs(context)); + if (NS_FAILED(rv)) break; + + nsCOMPtr shell; + rv = context->GetShell(getter_AddRefs(shell)); + if (NS_FAILED(rv)) break; + + rv = shell->GetViewManager(viewManager); + } while (0); + return rv; +} + //---------------------------------------------------------------------- // Factory code for creating nsWebShell's diff --git a/webshell/src/nsWebShell.cpp b/webshell/src/nsWebShell.cpp index f52909c69753..ed197ad162db 100644 --- a/webshell/src/nsWebShell.cpp +++ b/webshell/src/nsWebShell.cpp @@ -400,6 +400,7 @@ protected: nsresult CheckForTrailingSlash(nsIURI* aURL); nsresult StopBeforeRequestingURL(void); nsresult StopAfterURLAvailable(void); + nsresult GetViewManager(nsIViewManager* *viewManager); nsIEventQueue* mThreadEventQueue; nsIScriptGlobalObject *mScriptGlobal; @@ -1378,11 +1379,20 @@ nsWebShell::Repaint(PRBool aForce) NS_PRECONDITION(nsnull != mWindow, "null window"); */ - if (nsnull != mWindow) { - mWindow->Invalidate(aForce); - } - - return NS_OK; +#if 0 + if (nsnull != mWindow) { + mWindow->Invalidate(aForce); + } + return NS_OK; +#else + nsresult rv; + nsCOMPtr viewManager; + rv = GetViewManager(getter_AddRefs(viewManager)); + if (NS_SUCCEEDED(rv) && viewManager) { + rv = viewManager->UpdateAllViews(0); + } + return rv; +#endif } NS_IMETHODIMP @@ -2391,8 +2401,6 @@ nsWebShell::StopAfterURLAvailable() return NS_OK; } - - /* The generic session History code here is now obsolete. * Use nsISessionHistory instead */ @@ -4101,6 +4109,31 @@ nsWebShell::FindNext(const PRUnichar * aSearchStr, PRBool aMatchCase, PRBool aSe } +nsresult nsWebShell::GetViewManager(nsIViewManager* *viewManager) +{ + nsresult rv = NS_ERROR_FAILURE; + *viewManager = nsnull; + do { + if (nsnull == mContentViewer) break; + + nsCOMPtr docViewer; + rv = mContentViewer->QueryInterface(kIDocumentViewerIID, + getter_AddRefs(docViewer)); + if (NS_FAILED(rv)) break; + + nsCOMPtr context; + rv = docViewer->GetPresContext(*getter_AddRefs(context)); + if (NS_FAILED(rv)) break; + + nsCOMPtr shell; + rv = context->GetShell(getter_AddRefs(shell)); + if (NS_FAILED(rv)) break; + + rv = shell->GetViewManager(viewManager); + } while (0); + return rv; +} + //---------------------------------------------------------------------- // Factory code for creating nsWebShell's