⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 157984 in webkit


Ignore:
Timestamp:
Oct 24, 2013, 6:48:25 PM (13 years ago)
Author:
barraclough@apple.com
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.
Location:
trunk/Source/WebKit2
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r157981 r157984  
     12013-10-24  Gavin Barraclough  <barraclough@apple.com>
     2
     3        Coalesce calls to viewStateDidChange
     4        https://bugs.webkit.org/show_bug.cgi?id=123307
     5
     6        Reviewed by Tim Horton.
     7
     8        * UIProcess/API/mac/WKView.mm:
     9        (-[WKView viewDidMoveToWindow]):
     10        (-[WKView _windowDidOrderOffScreen:]):
     11        (-[WKView _windowDidOrderOnScreen:]):
     12            - coalesce calls to viewStateDidChange
     13        * UIProcess/WebPageProxy.cpp:
     14        (WebKit::WebPageProxy::viewStateDidChange):
     15            - handle changes to view visibility & active state in correct order.
     16
    1172013-10-24  Mark Rowe  <mrowe@apple.com>
    218
  • trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm

    r157972 r157984  
    19241924- (void)viewDidMoveToWindow
    19251925{
    1926     // We want to make sure to update the active state while hidden, so if the view is about to become visible, we
    1927     // update the active state first and then make it visible. If the view is about to be hidden, we hide it first and then
    1928     // update the active state.
    19291926    if ([self window]) {
    19301927        _data->_windowHasValidBackingStore = NO;
    19311928        [self doWindowDidChangeScreen];
    1932         _data->_page->viewStateDidChange(WebPageProxy::WindowIsVisible);
    1933         _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive);
    1934 
    1935         if ([self isDeferringViewInWindowChanges]) {
    1936             _data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible);
     1929
     1930        WebPageProxy::ViewStateFlags viewStateChanges = WebPageProxy::WindowIsVisible | WebPageProxy::ViewWindowIsActive | WebPageProxy::ViewIsVisible;
     1931        if ([self isDeferringViewInWindowChanges])
    19371932            _data->_viewInWindowChangeWasDeferred = YES;
    1938         } else
    1939             _data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible | WebPageProxy::ViewIsInWindow);
     1933        else
     1934            viewStateChanges |= WebPageProxy::ViewIsInWindow;
     1935        _data->_page->viewStateDidChange(viewStateChanges);
    19401936
    19411937        [self _updateWindowAndViewFrames];
    … …  
    19501946        [self _accessibilityRegisterUIProcessTokens];
    19511947    } else {
    1952         _data->_page->viewStateDidChange(WebPageProxy::WindowIsVisible);
    1953         _data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible);
    1954 
    1955         if ([self isDeferringViewInWindowChanges]) {
    1956             _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive);
     1948        WebPageProxy::ViewStateFlags viewStateChanges = WebPageProxy::WindowIsVisible | WebPageProxy::ViewWindowIsActive | WebPageProxy::ViewIsVisible;
     1949        if ([self isDeferringViewInWindowChanges])
    19571950            _data->_viewInWindowChangeWasDeferred = YES;
    1958         } else
    1959             _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive | WebPageProxy::ViewIsInWindow);
     1951        else
     1952            viewStateChanges |= WebPageProxy::ViewIsInWindow;
     1953        _data->_page->viewStateDidChange(viewStateChanges);
    19601954
    19611955        [NSEvent removeMonitor:_data->_flagsChangedEventMonitor];
    … …  
    20212015- (void)_windowDidOrderOffScreen:(NSNotification *)notification
    20222016{
    2023     // We want to make sure to update the active state while hidden, so since the view is about to be hidden,
    2024     // we hide it first and then update the active state.
    2025     _data->_page->viewStateDidChange(WebPageProxy::WindowIsVisible);
    2026     _data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible);
    2027     _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive);
     2017    _data->_page->viewStateDidChange(WebPageProxy::WindowIsVisible | WebPageProxy::ViewIsVisible | WebPageProxy::ViewWindowIsActive);
    20282018}
    20292019
    20302020- (void)_windowDidOrderOnScreen:(NSNotification *)notification
    20312021{
    2032     // We want to make sure to update the active state while hidden, so since the view is about to become visible,
    2033     // we update the active state first and then make it visible.
    2034     _data->_page->viewStateDidChange(WebPageProxy::WindowIsVisible);
    2035     _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive);
    2036     _data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible);
     2022    _data->_page->viewStateDidChange(WebPageProxy::WindowIsVisible | WebPageProxy::ViewIsVisible | WebPageProxy::ViewWindowIsActive);
    20372023}
    20382024
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r157972 r157984  
    10031003        m_process->send(Messages::WebPage::SetFocused(m_pageClient->isViewFocused()), m_pageID);
    10041004
    1005     if (flags & ViewWindowIsActive)
     1005    // We want to make sure to update the active state while hidden, so if the view is hidden then update the active state
     1006    // early (in case it becomes visible), and if the view was visible then update active state later (in case it hides).
     1007    bool viewWasVisible = m_isVisible;
     1008   
     1009    if (flags & ViewWindowIsActive && !viewWasVisible)
    10061010        m_process->send(Messages::WebPage::SetActive(m_pageClient->isViewWindowActive()), m_pageID);
    10071011
    … …  
    10261030        }
    10271031    }
     1032
     1033    if (flags & ViewWindowIsActive && viewWasVisible)
     1034        m_process->send(Messages::WebPage::SetActive(m_pageClient->isViewWindowActive()), m_pageID);
    10281035
    10291036    if (flags & ViewIsInWindow)
Note: See TracChangeset for help on using the changeset viewer.