|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
# HG changeset patch
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
# User Martin Stransky <stransky@redhat.com>
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
# Date 1523525760 -7200
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
# Node ID 6654f42bc0e615e3fd2328d23b4a2283cad9ad45
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
# Parent b4bc6b2401738b78fd47127a4c716bb9178e1a09
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
Bug 1447775 - Change persist mode immediately after sizemodechange change, r?jimm
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
Recently the window sizemode attribute is updated with 500ms delay (on Linux). It causes race condition
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
between reflow/CSS rule and window resize callbacks and also causes visual glitch when toolbar dragspace
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
is enabled.
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
TabsToolbar height is used at resize callback to do dragspace calculation. It has old values here
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
because it depends on 'window[sizemode="normal"] #TabsToolbar' css rule which is applied with 500ms delay.
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
So we use old TabsToolbar height for the dragspace, then the sizemode us updated by PersistenceTimer and
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
a new TabsToolbar height is calculated but the dragspace size stays as we're not notified
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
about the TabsToolbar height update.
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
MozReview-Commit-ID: AiensY5LMDO
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
diff --git a/xpfe/appshell/nsWebShellWindow.cpp b/xpfe/appshell/nsWebShellWindow.cpp
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
--- a/xpfe/appshell/nsWebShellWindow.cpp
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
+++ b/xpfe/appshell/nsWebShellWindow.cpp
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
@@ -350,20 +350,16 @@ nsWebShellWindow::SizeModeChanged(nsSize
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
if (sizeMode == nsSizeMode_Maximized || sizeMode == nsSizeMode_Fullscreen) {
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
uint32_t zLevel;
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
GetZLevel(&zLevel);
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
if (zLevel > nsIXULWindow::normalZ)
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
SetZLevel(nsIXULWindow::normalZ);
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
}
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
mWindow->SetSizeMode(sizeMode);
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
- // Persist mode, but not immediately, because in many (all?)
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
- // cases this will merge with the similar call in NS_SIZE and
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
- // write the attribute values only once.
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
- SetPersistenceTimer(PAD_MISC);
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
nsCOMPtr<nsPIDOMWindowOuter> ourWindow =
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
mDocShell ? mDocShell->GetWindow() : nullptr;
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
if (ourWindow) {
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
// Ensure that the fullscreen state is synchronized between
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
// the widget and the outer window object.
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
if (sizeMode == nsSizeMode_Fullscreen) {
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
ourWindow->SetFullScreen(true);
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
}
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
@@ -384,16 +380,22 @@ nsWebShellWindow::SizeModeChanged(nsSize
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
ourWindow->DispatchCustomEvent(NS_LITERAL_STRING("sizemodechange"));
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
}
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
nsIPresShell* presShell;
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
if ((presShell = GetPresShell())) {
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
presShell->GetPresContext()->SizeModeChanged(sizeMode);
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
}
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
+ // Persist mode immediately as the timer causes race condition
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
+ // between css rules dependent on window sizemode and
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
+ // sizemodechange/resize listener which calculates TabsToolbar height.
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
+ PersistentAttributesDirty(PAD_MISC);
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
+ SavePersistentAttributes();
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
+
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
// Note the current implementation of SetSizeMode just stores
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
// the new state; it doesn't actually resize. So here we store
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
// the state and pass the event on to the OS. The day is coming
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
// when we'll handle the event here, and the return result will
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
// then need to be different.
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
}
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
void
|
|
![](https://seccdn.libravatar.org/avatar/7ef8adee4aad4a9c36b8af537200b83c3e67e02079a3087b786c7a643fce3830?s=16&d=retro) |
f4af4b7 |
|