diff options
-rw-r--r-- | chrome/browser/resource_message_filter.cc | 5 | ||||
-rw-r--r-- | chrome/renderer/render_widget.cc | 6 | ||||
-rw-r--r-- | chrome/renderer/render_widget.h | 2 | ||||
-rw-r--r-- | webkit/glue/chrome_client_impl.cc | 36 | ||||
-rw-r--r-- | webkit/glue/webwidget_delegate.h | 4 | ||||
-rw-r--r-- | webkit/tools/test_shell/test_webview_delegate.cc | 8 | ||||
-rw-r--r-- | webkit/tools/test_shell/test_webview_delegate.h | 2 |
7 files changed, 36 insertions, 27 deletions
diff --git a/chrome/browser/resource_message_filter.cc b/chrome/browser/resource_message_filter.cc index 99b188c..e175db7 100644 --- a/chrome/browser/resource_message_filter.cc +++ b/chrome/browser/resource_message_filter.cc @@ -458,9 +458,10 @@ void ResourceMessageFilter::OnClipboardReadHTML(std::wstring* markup, *src_url = GURL(src_url_str); } -void ResourceMessageFilter::OnGetWindowRect(HWND window, gfx::Rect *rect) { +void ResourceMessageFilter::OnGetWindowRect(HWND hwnd_view_container, + gfx::Rect *rect) { RECT window_rect = {0}; - // GetWindowRect can fail if window is invalid. + HWND window = ::GetAncestor(hwnd_view_container, GA_ROOT); GetWindowRect(window, &window_rect); *rect = window_rect; } diff --git a/chrome/renderer/render_widget.cc b/chrome/renderer/render_widget.cc index 749fd8c..3f5d6c5 100644 --- a/chrome/renderer/render_widget.cc +++ b/chrome/renderer/render_widget.cc @@ -652,10 +652,8 @@ void RenderWidget::Close() { } } -void RenderWidget::GetWindowLocation(WebWidget* webwidget, gfx::Point* origin) { - gfx::Rect rect; - Send(new ViewHostMsg_GetWindowRect(routing_id_, host_window_, &rect)); - *origin = rect.origin(); +void RenderWidget::GetWindowRect(WebWidget* webwidget, gfx::Rect* rect) { + Send(new ViewHostMsg_GetWindowRect(routing_id_, host_window_, rect)); } void RenderWidget::SetWindowRect(WebWidget* webwidget, const gfx::Rect& pos) { diff --git a/chrome/renderer/render_widget.h b/chrome/renderer/render_widget.h index adb1033..4207c53 100644 --- a/chrome/renderer/render_widget.h +++ b/chrome/renderer/render_widget.h @@ -90,7 +90,7 @@ class RenderWidget : public IPC::Channel::Listener, virtual void CloseWidgetSoon(WebWidget* webwidget); virtual void Focus(WebWidget* webwidget); virtual void Blur(WebWidget* webwidget); - virtual void GetWindowLocation(WebWidget* webwidget, gfx::Point* origin); + virtual void GetWindowRect(WebWidget* webwidget, gfx::Rect* rect); virtual void SetWindowRect(WebWidget* webwidget, const gfx::Rect& rect); virtual void DidMove(WebWidget* webwidget, const WebPluginGeometry& move); virtual void RunModal(WebWidget* webwidget) {} diff --git a/webkit/glue/chrome_client_impl.cc b/webkit/glue/chrome_client_impl.cc index 20109b9..ddb1e85 100644 --- a/webkit/glue/chrome_client_impl.cc +++ b/webkit/glue/chrome_client_impl.cc @@ -97,16 +97,26 @@ void ChromeClientImpl::setWindowRect(const WebCore::FloatRect& r) { } WebCore::FloatRect ChromeClientImpl::windowRect() { - gfx::Point origin; - if (webview_->delegate()) - webview_->delegate()->GetWindowLocation(webview_, &origin); - const gfx::Size size = webview_->size(); - - return WebCore::FloatRect( - static_cast<float>(origin.x()), - static_cast<float>(origin.y()), - static_cast<float>(size.width()), - static_cast<float>(size.height())); + if (webview_->delegate()) { + gfx::Rect rect; + webview_->delegate()->GetWindowRect(webview_, &rect); + return WebCore::FloatRect( + static_cast<float>(rect.x()), + static_cast<float>(rect.y()), + static_cast<float>(rect.width()), + static_cast<float>(rect.height())); + } else { + // These numbers will be fairly wrong. The window's x/y coordinates will + // be the top left corner of the screen and the size will be the content + // size instead of the window size. + gfx::Point origin; + const gfx::Size size = webview_->size(); + return WebCore::FloatRect( + static_cast<float>(origin.x()), + static_cast<float>(origin.y()), + static_cast<float>(size.width()), + static_cast<float>(size.height())); + } } WebCore::FloatRect ChromeClientImpl::pageRect() { @@ -420,9 +430,9 @@ WebCore::IntRect ChromeClientImpl::windowToScreen(const WebCore::IntRect& rect) WebViewDelegate* d = webview_->delegate(); if (d) { - gfx::Point window_pos; - d->GetWindowLocation(webview_, &window_pos); - screen_rect.move(window_pos.x(), window_pos.y()); + gfx::Rect window_rect; + d->GetWindowRect(webview_, &window_rect); + screen_rect.move(window_rect.x(), window_rect.y()); } return screen_rect; diff --git a/webkit/glue/webwidget_delegate.h b/webkit/glue/webwidget_delegate.h index 80f8ba4d..20b26f1 100644 --- a/webkit/glue/webwidget_delegate.h +++ b/webkit/glue/webwidget_delegate.h @@ -78,8 +78,8 @@ class WebWidgetDelegate { virtual void SetCursor(WebWidget* webwidget, const WebCursor& cursor) = 0; - // Returns the location (x,y) of the WebWidget in screen coordinates. - virtual void GetWindowLocation(WebWidget* webwidget, gfx::Point* origin) = 0; + // Returns the rectangle of the WebWidget in screen coordinates. + virtual void GetWindowRect(WebWidget* webwidget, gfx::Rect* rect) = 0; // This method is called to re-position the WebWidget on the screen. The given // rect is in screen coordinates. The implementation may choose to ignore diff --git a/webkit/tools/test_shell/test_webview_delegate.cc b/webkit/tools/test_shell/test_webview_delegate.cc index e111877..de84d38 100644 --- a/webkit/tools/test_shell/test_webview_delegate.cc +++ b/webkit/tools/test_shell/test_webview_delegate.cc @@ -747,12 +747,12 @@ void TestWebViewDelegate::SetCursor(WebWidget* webwidget, } } -void TestWebViewDelegate::GetWindowLocation(WebWidget* webwidget, - gfx::Point* origin) { +void TestWebViewDelegate::GetWindowRect(WebWidget* webwidget, + gfx::Rect* out_rect) { if (WebWidgetHost* host = GetHostForWidget(webwidget)) { RECT rect; - GetWindowRect(host->window_handle(), &rect); - origin->SetPoint(rect.left, rect.top); + ::GetWindowRect(host->window_handle(), &rect); + *out_rect = gfx::Rect(rect); } } diff --git a/webkit/tools/test_shell/test_webview_delegate.h b/webkit/tools/test_shell/test_webview_delegate.h index ee1a4f9..1c9cf0f 100644 --- a/webkit/tools/test_shell/test_webview_delegate.h +++ b/webkit/tools/test_shell/test_webview_delegate.h @@ -217,7 +217,7 @@ class TestWebViewDelegate : public base::RefCounted<TestWebViewDelegate>, public virtual void Blur(WebWidget* webwidget); virtual void SetCursor(WebWidget* webwidget, const WebCursor& cursor); - virtual void GetWindowLocation(WebWidget* webwidget, gfx::Point* origin); + virtual void GetWindowRect(WebWidget* webwidget, gfx::Rect* rect); virtual void SetWindowRect(WebWidget* webwidget, const gfx::Rect& rect); virtual void DidMove(WebWidget* webwidget, const WebPluginGeometry& move); virtual void RunModal(WebWidget* webwidget); |