Title: [157984] trunk/Source/WebKit2
- Revision
- 157984
- Author
- [email protected]
- Date
- 2013-10-24 18:48:25 -0700 (Thu, 24 Oct 2013)
Log Message
Coalesce calls to viewStateDidChange
https://bugs.webkit.org/show_bug.cgi?id=123307
Reviewed by Tim Horton.
* UIProcess/API/mac/WKView.mm:
(-[WKView viewDidMoveToWindow]):
(-[WKView _windowDidOrderOffScreen:]):
(-[WKView _windowDidOrderOnScreen:]):
- coalesce calls to viewStateDidChange
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::viewStateDidChange):
- handle changes to view visibility & active state in correct order.
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (157983 => 157984)
--- trunk/Source/WebKit2/ChangeLog 2013-10-25 01:46:44 UTC (rev 157983)
+++ trunk/Source/WebKit2/ChangeLog 2013-10-25 01:48:25 UTC (rev 157984)
@@ -1,3 +1,19 @@
+2013-10-24 Gavin Barraclough <[email protected]>
+
+ Coalesce calls to viewStateDidChange
+ https://bugs.webkit.org/show_bug.cgi?id=123307
+
+ Reviewed by Tim Horton.
+
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView viewDidMoveToWindow]):
+ (-[WKView _windowDidOrderOffScreen:]):
+ (-[WKView _windowDidOrderOnScreen:]):
+ - coalesce calls to viewStateDidChange
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::viewStateDidChange):
+ - handle changes to view visibility & active state in correct order.
+
2013-10-24 Mark Rowe <[email protected]>
<rdar://problem/15312643> Prepare for the mysterious future.
Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (157983 => 157984)
--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm 2013-10-25 01:46:44 UTC (rev 157983)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm 2013-10-25 01:48:25 UTC (rev 157984)
@@ -1923,20 +1923,16 @@
- (void)viewDidMoveToWindow
{
- // We want to make sure to update the active state while hidden, so if the view is about to become visible, we
- // update the active state first and then make it visible. If the view is about to be hidden, we hide it first and then
- // update the active state.
if ([self window]) {
_data->_windowHasValidBackingStore = NO;
[self doWindowDidChangeScreen];
- _data->_page->viewStateDidChange(WebPageProxy::WindowIsVisible);
- _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive);
- if ([self isDeferringViewInWindowChanges]) {
- _data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible);
+ WebPageProxy::ViewStateFlags viewStateChanges = WebPageProxy::WindowIsVisible | WebPageProxy::ViewWindowIsActive | WebPageProxy::ViewIsVisible;
+ if ([self isDeferringViewInWindowChanges])
_data->_viewInWindowChangeWasDeferred = YES;
- } else
- _data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible | WebPageProxy::ViewIsInWindow);
+ else
+ viewStateChanges |= WebPageProxy::ViewIsInWindow;
+ _data->_page->viewStateDidChange(viewStateChanges);
[self _updateWindowAndViewFrames];
@@ -1949,14 +1945,12 @@
[self _accessibilityRegisterUIProcessTokens];
} else {
- _data->_page->viewStateDidChange(WebPageProxy::WindowIsVisible);
- _data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible);
-
- if ([self isDeferringViewInWindowChanges]) {
- _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive);
+ WebPageProxy::ViewStateFlags viewStateChanges = WebPageProxy::WindowIsVisible | WebPageProxy::ViewWindowIsActive | WebPageProxy::ViewIsVisible;
+ if ([self isDeferringViewInWindowChanges])
_data->_viewInWindowChangeWasDeferred = YES;
- } else
- _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive | WebPageProxy::ViewIsInWindow);
+ else
+ viewStateChanges |= WebPageProxy::ViewIsInWindow;
+ _data->_page->viewStateDidChange(viewStateChanges);
[NSEvent removeMonitor:_data->_flagsChangedEventMonitor];
_data->_flagsChangedEventMonitor = nil;
@@ -2020,20 +2014,12 @@
- (void)_windowDidOrderOffScreen:(NSNotification *)notification
{
- // We want to make sure to update the active state while hidden, so since the view is about to be hidden,
- // we hide it first and then update the active state.
- _data->_page->viewStateDidChange(WebPageProxy::WindowIsVisible);
- _data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible);
- _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive);
+ _data->_page->viewStateDidChange(WebPageProxy::WindowIsVisible | WebPageProxy::ViewIsVisible | WebPageProxy::ViewWindowIsActive);
}
- (void)_windowDidOrderOnScreen:(NSNotification *)notification
{
- // We want to make sure to update the active state while hidden, so since the view is about to become visible,
- // we update the active state first and then make it visible.
- _data->_page->viewStateDidChange(WebPageProxy::WindowIsVisible);
- _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive);
- _data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible);
+ _data->_page->viewStateDidChange(WebPageProxy::WindowIsVisible | WebPageProxy::ViewIsVisible | WebPageProxy::ViewWindowIsActive);
}
- (void)_windowDidChangeBackingProperties:(NSNotification *)notification
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (157983 => 157984)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2013-10-25 01:46:44 UTC (rev 157983)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2013-10-25 01:48:25 UTC (rev 157984)
@@ -1002,7 +1002,11 @@
if (flags & ViewIsFocused)
m_process->send(Messages::WebPage::SetFocused(m_pageClient->isViewFocused()), m_pageID);
- if (flags & ViewWindowIsActive)
+ // We want to make sure to update the active state while hidden, so if the view is hidden then update the active state
+ // early (in case it becomes visible), and if the view was visible then update active state later (in case it hides).
+ bool viewWasVisible = m_isVisible;
+
+ if (flags & ViewWindowIsActive && !viewWasVisible)
m_process->send(Messages::WebPage::SetActive(m_pageClient->isViewWindowActive()), m_pageID);
if (flags & ViewIsVisible) {
@@ -1026,6 +1030,9 @@
}
}
+ if (flags & ViewWindowIsActive && viewWasVisible)
+ m_process->send(Messages::WebPage::SetActive(m_pageClient->isViewWindowActive()), m_pageID);
+
if (flags & ViewIsInWindow)
viewInWindowStateDidChange();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes