From b35cd8548ba7c601a4b890e5005514a396e2015a Mon Sep 17 00:00:00 2001 From: "danm%netscape.com" Date: Thu, 24 Feb 2000 21:16:16 +0000 Subject: [PATCH] tree-closure bug 29094 -- A tricky condition involving relative timing of size and position events seems to have surfaced. This patch should sort them out. git-svn-id: svn://10.0.0.236/trunk@61608 18797224-902f-48f8-a5cc-f745e15eee43 --- .../xpfe/appshell/src/nsWebShellWindow.cpp | 19 +++++++++++++------ mozilla/xpfe/appshell/src/nsWebShellWindow.h | 3 ++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp b/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp index 77adaf50000..426af43108f 100644 --- a/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp +++ b/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp @@ -441,7 +441,8 @@ nsWebShellWindow::HandleEvent(nsGUIEvent *aEvent) win = NS_REINTERPRET_CAST(nsWebShellWindow *, data); // persist position, but not immediately, in case this OS is firing // repeated move events as the user drags the window - win->SetPersistenceTimer(); +// win->SetPersistenceTimer(); + win->StoreBoundsToXUL(PR_TRUE, PR_FALSE); break; } case NS_SIZE: { @@ -455,7 +456,8 @@ nsWebShellWindow::HandleEvent(nsGUIEvent *aEvent) win = NS_REINTERPRET_CAST(nsWebShellWindow *, data); // persist size, but not immediately, in case this OS is firing // repeated size events as the user drags the sizing handle - win->SetPersistenceTimer(); + //win->SetPersistenceTimer(); + win->StoreBoundsToXUL(PR_FALSE, PR_TRUE); result = nsEventStatus_eConsumeNoDefault; break; } @@ -1224,15 +1226,20 @@ nsWebShellWindow::DestroyModalDialogEvent(PLEvent *aEvent) } void -nsWebShellWindow::SetPersistenceTimer(void) +nsWebShellWindow::SetPersistenceTimer(PRBool aSize, PRBool aPosition) { PR_Lock(mSPTimerLock); - if (mSPTimer) + if (mSPTimer) { mSPTimer->SetDelay(SIZE_PERSISTENCE_TIMEOUT); - else + mSPTimerSize |= aSize; + mSPTimerPosition |= aPosition; + } else { if (NS_SUCCEEDED(NS_NewTimer(getter_AddRefs(mSPTimer)))) mSPTimer->Init(FirePersistenceTimer, this, SIZE_PERSISTENCE_TIMEOUT, NS_TYPE_ONE_SHOT); + mSPTimerSize = aSize; + mSPTimerPosition = aPosition; + } PR_Unlock(mSPTimerLock); } @@ -1243,7 +1250,7 @@ nsWebShellWindow::FirePersistenceTimer(nsITimer *aTimer, void *aClosure) PR_Lock(win->mSPTimerLock); win->mSPTimer = nsnull; PR_Unlock(win->mSPTimerLock); - win->StoreBoundsToXUL(PR_TRUE, PR_TRUE); + win->StoreBoundsToXUL(win->mSPTimerSize, win->mSPTimerPosition); } diff --git a/mozilla/xpfe/appshell/src/nsWebShellWindow.h b/mozilla/xpfe/appshell/src/nsWebShellWindow.h index a8f878ede0f..1bb58a8acce 100644 --- a/mozilla/xpfe/appshell/src/nsWebShellWindow.h +++ b/mozilla/xpfe/appshell/src/nsWebShellWindow.h @@ -263,9 +263,10 @@ protected: nsString mDefaultStatus; nsCOMPtr mSPTimer; + PRBool mSPTimerSize, mSPTimerPosition; PRLock * mSPTimerLock; - void SetPersistenceTimer(void); + void SetPersistenceTimer(PRBool aSize, PRBool aPosition); static void FirePersistenceTimer(nsITimer *aTimer, void *aClosure); private: