Changeset 148278 in webkit
- Timestamp:
- Apr 12, 2013 8:13:49 AM (11 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r148274 r148278 1 2013-04-12 Andreas Kling <akling@apple.com> 2 3 REGRESSION(r145869): Right-click on SWF contents displays the context menu at the wrong place. 4 <http://webkit.org/b/113836> 5 <rdar://problem/13587624> 6 7 Reviewed by Anders "Wesley Crusher" Carlsson. 8 9 Mac plugins expect flipped-Y screen coordinates, while DOM APIs speak in unflipped coordinates, 10 and we were mixing them up in the window frame caching optimization. 11 12 Solve this by having the UIProcess send both flipped and unflipped window frames to the WebProcess. 13 The flipped frame is passed on to plugins, and the unflipped frame is used for window.screenX/Y etc. 14 15 * UIProcess/API/mac/WKView.mm: 16 (-[WKView _updateWindowAndViewFrames]): 17 18 No need to retrieve the window frame here as WebPageProxy::windowAndViewFramesChanged() will 19 always override it anyway. 20 21 * UIProcess/mac/WebPageProxyMac.mm: 22 (WebKit::WebPageProxy::windowAndViewFramesChanged): 23 * WebProcess/WebCoreSupport/WebChromeClient.cpp: 24 (WebKit::WebChromeClient::windowRect): 25 * WebProcess/WebPage/WebPage.cpp: 26 (WebKit::WebPage::windowAndViewFramesChanged): 27 * WebProcess/WebPage/WebPage.h: 28 (WebKit::WebPage::windowFrameInUnflippedScreenCoordinates): 29 * WebProcess/WebPage/WebPage.messages.in: 30 1 31 2013-04-12 Mikhail Pozdnyakov <mikhail.pozdnyakov@intel.com> 2 32 -
trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm
r146673 r148278 397 397 - (void)_updateWindowAndViewFrames 398 398 { 399 NSWindow *window = [self window];400 ASSERT(window);401 402 NSRect windowFrameInScreenCoordinates = [window frame];403 399 NSRect viewFrameInWindowCoordinates = [self convertRect:[self frame] toView:nil]; 404 400 NSPoint accessibilityPosition = [[self accessibilityAttributeValue:NSAccessibilityPositionAttribute] pointValue]; 405 401 406 _data->_page->windowAndViewFramesChanged( windowFrameInScreenCoordinates,viewFrameInWindowCoordinates, accessibilityPosition);402 _data->_page->windowAndViewFramesChanged(viewFrameInWindowCoordinates, accessibilityPosition); 407 403 if (_data->_expandsToFitContentViaAutoLayout) 408 404 _data->_page->viewExposedRectChanged([self visibleRect]); -
trunk/Source/WebKit2/UIProcess/WebPageProxy.h
r147403 r148278 383 383 #if PLATFORM(MAC) 384 384 void updateWindowIsVisible(bool windowIsVisible); 385 void windowAndViewFramesChanged(const WebCore::FloatRect& windowFrameInScreenCoordinates, const WebCore::FloatRect&viewFrameInWindowCoordinates, const WebCore::FloatPoint& accessibilityViewCoordinates);385 void windowAndViewFramesChanged(const WebCore::FloatRect& viewFrameInWindowCoordinates, const WebCore::FloatPoint& accessibilityViewCoordinates); 386 386 void viewExposedRectChanged(const WebCore::FloatRect& exposedRect); 387 387 void setMainFrameIsScrollable(bool); -
trunk/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm
r146143 r148278 139 139 } 140 140 141 void WebPageProxy::windowAndViewFramesChanged(const FloatRect& windowFrameInScreenCoordinates, const FloatRect&viewFrameInWindowCoordinates, const FloatPoint& accessibilityViewCoordinates)141 void WebPageProxy::windowAndViewFramesChanged(const FloatRect& viewFrameInWindowCoordinates, const FloatPoint& accessibilityViewCoordinates) 142 142 { 143 143 if (!isValid()) … … 145 145 146 146 // In case the UI client overrides getWindowFrame(), we call it here to make sure we send the appropriate window frame. 147 FloatRect adjustedWindowFrameInScreenCoordinates;148 getWindowFrame(adjustedWindowFrameInScreenCoordinates);149 150 process()->send(Messages::WebPage::WindowAndViewFramesChanged( adjustedWindowFrameInScreenCoordinates, viewFrameInWindowCoordinates, accessibilityViewCoordinates), m_pageID);147 FloatRect windowFrameInScreenCoordinates = m_uiClient.windowFrame(this); 148 FloatRect windowFrameInUnflippedScreenCoordinates = m_pageClient->convertToUserSpace(windowFrameInScreenCoordinates); 149 150 process()->send(Messages::WebPage::WindowAndViewFramesChanged(windowFrameInScreenCoordinates, windowFrameInUnflippedScreenCoordinates, viewFrameInWindowCoordinates, accessibilityViewCoordinates), m_pageID); 151 151 } 152 152 -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
r145230 r148278 115 115 #if PLATFORM(MAC) 116 116 if (m_page->hasCachedWindowFrame()) 117 return m_page->windowFrameIn ScreenCoordinates();117 return m_page->windowFrameInUnflippedScreenCoordinates(); 118 118 #endif 119 119 -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
r148253 r148278 2970 2970 } 2971 2971 2972 void WebPage::windowAndViewFramesChanged(const FloatRect& windowFrameInScreenCoordinates, const FloatRect& viewFrameInWindowCoordinates, const FloatPoint& accessibilityViewCoordinates)2972 void WebPage::windowAndViewFramesChanged(const FloatRect& windowFrameInScreenCoordinates, const FloatRect& windowFrameInUnflippedScreenCoordinates, const FloatRect& viewFrameInWindowCoordinates, const FloatPoint& accessibilityViewCoordinates) 2973 2973 { 2974 2974 m_windowFrameInScreenCoordinates = windowFrameInScreenCoordinates; 2975 m_windowFrameInUnflippedScreenCoordinates = windowFrameInUnflippedScreenCoordinates; 2975 2976 m_viewFrameInWindowCoordinates = viewFrameInWindowCoordinates; 2976 2977 m_accessibilityPosition = accessibilityViewCoordinates; … … 2980 2981 (*it)->windowAndViewFramesChanged(enclosingIntRect(windowFrameInScreenCoordinates), enclosingIntRect(viewFrameInWindowCoordinates)); 2981 2982 2982 m_hasCachedWindowFrame = !m_windowFrameIn ScreenCoordinates.isEmpty();2983 m_hasCachedWindowFrame = !m_windowFrameInUnflippedScreenCoordinates.isEmpty(); 2983 2984 } 2984 2985 #endif -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h
r148249 r148278 362 362 void updatePluginsActiveAndFocusedState(); 363 363 const WebCore::FloatRect& windowFrameInScreenCoordinates() const { return m_windowFrameInScreenCoordinates; } 364 const WebCore::FloatRect& windowFrameInUnflippedScreenCoordinates() const { return m_windowFrameInUnflippedScreenCoordinates; } 364 365 const WebCore::FloatRect& viewFrameInWindowCoordinates() const { return m_viewFrameInWindowCoordinates; } 365 366 … … 758 759 759 760 void setWindowIsVisible(bool windowIsVisible); 760 void windowAndViewFramesChanged(const WebCore::FloatRect& windowFrameInScreenCoordinates, const WebCore::FloatRect& viewFrameInWindowCoordinates, const WebCore::FloatPoint& accessibilityViewCoordinates);761 void windowAndViewFramesChanged(const WebCore::FloatRect& windowFrameInScreenCoordinates, const WebCore::FloatRect& windowFrameInUnflippedScreenCoordinates, const WebCore::FloatRect& viewFrameInWindowCoordinates, const WebCore::FloatPoint& accessibilityViewCoordinates); 761 762 762 763 RetainPtr<PDFDocument> pdfDocumentForPrintingFrame(WebCore::Frame*); … … 885 886 // The frame of the containing window in screen coordinates. 886 887 WebCore::FloatRect m_windowFrameInScreenCoordinates; 888 889 // The frame of the containing window in unflipped screen coordinates. 890 WebCore::FloatRect m_windowFrameInUnflippedScreenCoordinates; 887 891 888 892 // The frame of the view in window coordinates. -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in
r145845 r148278 261 261 262 262 SetWindowIsVisible(bool windowIsVisible) 263 WindowAndViewFramesChanged(WebCore::FloatRect windowFrameInScreenCoordinates, WebCore::FloatRect viewFrameInWindowCoordinates, WebCore::FloatPoint accessibilityViewCoordinates)263 WindowAndViewFramesChanged(WebCore::FloatRect windowFrameInScreenCoordinates, WebCore::FloatRect windowFrameInUnflippedScreenCoordinates, WebCore::FloatRect viewFrameInWindowCoordinates, WebCore::FloatPoint accessibilityViewCoordinates) 264 264 ViewExposedRectChanged(WebCore::FloatRect exposedRect) 265 265 SetMainFrameIsScrollable(bool isScrollable)
Note: See TracChangeset
for help on using the changeset viewer.