From: tkent@chromium.org Date: Tue, 17 Apr 2012 07:40:30 +0000 (+0000) Subject: [Chromium] Calendar Picker: Popup position is wrong when there are X-Git-Tag: 070512121124~6829 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=143f93b8cfe118e7df3ae4dacd5291c87e8b6d6c;p=profile%2Fivi%2Fwebkit-efl.git [Chromium] Calendar Picker: Popup position is wrong when there are no enough space below the target date field https://bugs.webkit.org/show_bug.cgi?id=84007 Reviewed by Hajime Morita. The popup was detached from the origin element because calendarPicker.js resizes its window. To fix this bug, we move the window position vertically when it is resized. No new tests. This is not testable in WebKit. * src/WebPagePopupImpl.cpp: (WebKit::PagePopupChromeClient::setWindowRect): If this request is just a resize and m_isPutAboveOrigin is true, update the vertical position so that the popup attaches to the origin rectangle. (WebKit::WebPagePopupImpl::WebPagePopupImpl): Initialize m_isPutAboveOrigin with false. (WebKit::WebPagePopupImpl::init): Set m_isPutAboveOrigin true. * src/WebPagePopupImpl.h: (WebPagePopupImpl): Add m_isPutAboveOrigin. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@114357 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- diff --git a/Source/WebKit/chromium/ChangeLog b/Source/WebKit/chromium/ChangeLog index ec0d03f..760cda5 100644 --- a/Source/WebKit/chromium/ChangeLog +++ b/Source/WebKit/chromium/ChangeLog @@ -1,3 +1,28 @@ +2012-04-17 Kent Tamura + + [Chromium] Calendar Picker: Popup position is wrong when there are + no enough space below the target date field + https://bugs.webkit.org/show_bug.cgi?id=84007 + + Reviewed by Hajime Morita. + + The popup was detached from the origin element because + calendarPicker.js resizes its window. To fix this bug, we move the + window position vertically when it is resized. + + No new tests. This is not testable in WebKit. + + * src/WebPagePopupImpl.cpp: + (WebKit::PagePopupChromeClient::setWindowRect): + If this request is just a resize and m_isPutAboveOrigin is true, + update the vertical position so that the popup attaches to the + origin rectangle. + (WebKit::WebPagePopupImpl::WebPagePopupImpl): + Initialize m_isPutAboveOrigin with false. + (WebKit::WebPagePopupImpl::init): Set m_isPutAboveOrigin true. + * src/WebPagePopupImpl.h: + (WebPagePopupImpl): Add m_isPutAboveOrigin. + 2012-04-16 Kent Tamura Rename LocalizedNumberICU.h to ICULocale.h diff --git a/Source/WebKit/chromium/src/WebPagePopupImpl.cpp b/Source/WebKit/chromium/src/WebPagePopupImpl.cpp index 7fb6f34..291f243 100644 --- a/Source/WebKit/chromium/src/WebPagePopupImpl.cpp +++ b/Source/WebKit/chromium/src/WebPagePopupImpl.cpp @@ -79,7 +79,11 @@ private: virtual void setWindowRect(const FloatRect& rect) OVERRIDE { - m_popup->m_windowRectInScreen = IntRect(rect); + IntRect intRect(rect); + const WebRect currentRect = m_popup->m_windowRectInScreen; + if (intRect.x() == currentRect.x && intRect.y() == currentRect.y && m_popup->m_isPutAboveOrigin) + intRect.setY(currentRect.y + currentRect.height - intRect.height()); + m_popup->m_windowRectInScreen = intRect; m_popup->widgetClient()->setWindowRect(m_popup->m_windowRectInScreen); } @@ -127,6 +131,7 @@ private: WebPagePopupImpl::WebPagePopupImpl(WebWidgetClient* client) : m_widgetClient(client) + , m_isPutAboveOrigin(false) { ASSERT(client); } @@ -146,8 +151,10 @@ bool WebPagePopupImpl::init(WebViewImpl* webView, PagePopupClient* popupClient, WebSize rootViewSize = webView->size(); IntSize popupSize = popupClient->contentSize(); IntRect popupBoundsInRootView(IntPoint(max(0, originBoundsInRootView.x()), max(0, originBoundsInRootView.maxY())), popupSize); - if (popupBoundsInRootView.maxY() > rootViewSize.height) + if (popupBoundsInRootView.maxY() > rootViewSize.height) { popupBoundsInRootView.setY(max(0, originBoundsInRootView.y() - popupSize.height())); + m_isPutAboveOrigin = true; + } if (popupBoundsInRootView.maxX() > rootViewSize.width) popupBoundsInRootView.setX(max(0, rootViewSize.width - popupSize.width())); IntRect boundsInScreen = webView->page()->chrome()->rootViewToScreen(popupBoundsInRootView); diff --git a/Source/WebKit/chromium/src/WebPagePopupImpl.h b/Source/WebKit/chromium/src/WebPagePopupImpl.h index 3b776f1..dfdb9d8 100644 --- a/Source/WebKit/chromium/src/WebPagePopupImpl.h +++ b/Source/WebKit/chromium/src/WebPagePopupImpl.h @@ -90,6 +90,7 @@ private: OwnPtr m_page; OwnPtr m_chromeClient; WebCore::PagePopupClient* m_popupClient; + bool m_isPutAboveOrigin; friend class WebPagePopup; friend class PagePopupChromeClient;