diff options
author | jcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-25 22:01:00 +0000 |
---|---|---|
committer | jcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-25 22:01:00 +0000 |
commit | 30f75e618e08b5bd943feec72261cc36a8fd9280 (patch) | |
tree | 7f108ae961dc8ff5b11f904bdbc4894247f2c7c0 /chrome | |
parent | e191c147e4704d4e75f548cdaf90f914d196aa63 (diff) | |
download | chromium_src-30f75e618e08b5bd943feec72261cc36a8fd9280.zip chromium_src-30f75e618e08b5bd943feec72261cc36a8fd9280.tar.gz chromium_src-30f75e618e08b5bd943feec72261cc36a8fd9280.tar.bz2 |
This CL causes the autofill popup to hide when the browser window is moved or resized.
TEST=Bring up an autofill popup in a form, move the browser. The autofill popup should be closed.
BUG=7401
R=ben
Review URL: http://codereview.chromium.org/28126
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10384 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/renderer_host/render_view_host.cc | 4 | ||||
-rw-r--r-- | chrome/browser/renderer_host/render_view_host.h | 4 | ||||
-rw-r--r-- | chrome/browser/tab_contents/web_contents.h | 4 | ||||
-rw-r--r-- | chrome/browser/views/frame/aero_glass_frame.cc | 4 | ||||
-rw-r--r-- | chrome/browser/views/frame/aero_glass_frame.h | 1 | ||||
-rw-r--r-- | chrome/browser/views/frame/browser_view.cc | 6 | ||||
-rw-r--r-- | chrome/browser/views/frame/browser_view.h | 4 | ||||
-rw-r--r-- | chrome/browser/views/frame/opaque_frame.cc | 4 | ||||
-rw-r--r-- | chrome/browser/views/frame/opaque_frame.h | 1 | ||||
-rw-r--r-- | chrome/common/render_messages_internal.h | 3 | ||||
-rw-r--r-- | chrome/renderer/render_view.cc | 13 | ||||
-rw-r--r-- | chrome/renderer/render_view.h | 7 | ||||
-rw-r--r-- | chrome/renderer/render_widget.h | 3 | ||||
-rw-r--r-- | chrome/views/widget_win.h | 2 |
14 files changed, 59 insertions, 1 deletions
diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc index edff720..28117c2 100644 --- a/chrome/browser/renderer_host/render_view_host.cc +++ b/chrome/browser/renderer_host/render_view_host.cc @@ -1266,6 +1266,10 @@ void RenderViewHost::AutofillSuggestionsReturned( // Default index -1 means no default suggestion. } +void RenderViewHost::WindowMoveOrResizeStarted() { + Send(new ViewMsg_MoveOrResizeStarted(routing_id())); +} + void RenderViewHost::NotifyRendererUnresponsive() { // If the debugger is attached, we're going to be unresponsive anytime it's // stopped at a breakpoint. diff --git a/chrome/browser/renderer_host/render_view_host.h b/chrome/browser/renderer_host/render_view_host.h index 2974db6..39704f3 100644 --- a/chrome/browser/renderer_host/render_view_host.h +++ b/chrome/browser/renderer_host/render_view_host.h @@ -404,6 +404,10 @@ class RenderViewHost : public RenderWidgetHost { int request_id, int default_suggestion_index); + // Notifies the Renderer that a move or resize of its containing window has + // started (this is used to hide the autocomplete popups if any). + void WindowMoveOrResizeStarted(); + // RenderWidgetHost public overrides. virtual void Init(); virtual void Shutdown(); diff --git a/chrome/browser/tab_contents/web_contents.h b/chrome/browser/tab_contents/web_contents.h index 3974a78..9ed4331 100644 --- a/chrome/browser/tab_contents/web_contents.h +++ b/chrome/browser/tab_contents/web_contents.h @@ -265,6 +265,10 @@ class WebContents : public TabContents, render_manager_.CrossSiteNavigationCanceled(); } + void WindowMoveOrResizeStarted() { + render_view_host()->WindowMoveOrResizeStarted(); + } + protected: // Should be deleted via CloseContents. virtual ~WebContents(); diff --git a/chrome/browser/views/frame/aero_glass_frame.cc b/chrome/browser/views/frame/aero_glass_frame.cc index 67d40d2..d51b69c 100644 --- a/chrome/browser/views/frame/aero_glass_frame.cc +++ b/chrome/browser/views/frame/aero_glass_frame.cc @@ -105,6 +105,10 @@ void AeroGlassFrame::OnInitMenuPopup(HMENU menu, UINT position, browser_view_->PrepareToRunSystemMenu(menu); } +void AeroGlassFrame::OnEnterSizeMove() { + browser_view_->WindowMoveOrResizeStarted(); +} + void AeroGlassFrame::OnEndSession(BOOL ending, UINT logoff) { BrowserList::WindowsSessionEnding(); } diff --git a/chrome/browser/views/frame/aero_glass_frame.h b/chrome/browser/views/frame/aero_glass_frame.h index 2541467..4c7e2f8 100644 --- a/chrome/browser/views/frame/aero_glass_frame.h +++ b/chrome/browser/views/frame/aero_glass_frame.h @@ -44,6 +44,7 @@ class AeroGlassFrame : public BrowserFrame, virtual bool AcceleratorPressed(views::Accelerator* accelerator); virtual bool GetAccelerator(int cmd_id, views::Accelerator* accelerator); virtual void OnInitMenuPopup(HMENU menu, UINT position, BOOL is_system_menu); + virtual void OnEnterSizeMove(); virtual void OnEndSession(BOOL ending, UINT logoff); virtual LRESULT OnMouseActivate(HWND window, UINT hittest_code, diff --git a/chrome/browser/views/frame/browser_view.cc b/chrome/browser/views/frame/browser_view.cc index 898a147..d1aae0b 100644 --- a/chrome/browser/views/frame/browser_view.cc +++ b/chrome/browser/views/frame/browser_view.cc @@ -247,6 +247,12 @@ void BrowserView::WindowMoved() { toolbar_->GetLocationBarView()->location_entry()->ClosePopup(); } +void BrowserView::WindowMoveOrResizeStarted() { + TabContents* tab_contents = GetSelectedTabContents(); + if (tab_contents && tab_contents->AsWebContents()) + tab_contents->AsWebContents()->WindowMoveOrResizeStarted(); +} + gfx::Rect BrowserView::GetToolbarBounds() const { return toolbar_->bounds(); } diff --git a/chrome/browser/views/frame/browser_view.h b/chrome/browser/views/frame/browser_view.h index c2af520..12634b9 100644 --- a/chrome/browser/views/frame/browser_view.h +++ b/chrome/browser/views/frame/browser_view.h @@ -68,6 +68,10 @@ class BrowserView : public BrowserWindow, // any dependent popup windows should be repositioned. void WindowMoved(); + // Called by the frame to notify the BrowserView that a move or resize was + // initiated. + void WindowMoveOrResizeStarted(); + // Returns the bounds of the toolbar, in BrowserView coordinates. gfx::Rect GetToolbarBounds() const; diff --git a/chrome/browser/views/frame/opaque_frame.cc b/chrome/browser/views/frame/opaque_frame.cc index 5895418..066bcad 100644 --- a/chrome/browser/views/frame/opaque_frame.cc +++ b/chrome/browser/views/frame/opaque_frame.cc @@ -89,6 +89,10 @@ void OpaqueFrame::OnEndSession(BOOL ending, UINT logoff) { BrowserList::WindowsSessionEnding(); } +void OpaqueFrame::OnEnterSizeMove() { + browser_view_->WindowMoveOrResizeStarted(); +} + void OpaqueFrame::OnInitMenuPopup(HMENU menu, UINT position, BOOL is_system_menu) { browser_view_->PrepareToRunSystemMenu(menu); diff --git a/chrome/browser/views/frame/opaque_frame.h b/chrome/browser/views/frame/opaque_frame.h index 8a02595..7042002 100644 --- a/chrome/browser/views/frame/opaque_frame.h +++ b/chrome/browser/views/frame/opaque_frame.h @@ -49,6 +49,7 @@ class OpaqueFrame : public BrowserFrame, // Overridden from views::WidgetWin: virtual bool AcceleratorPressed(views::Accelerator* accelerator); virtual bool GetAccelerator(int cmd_id, views::Accelerator* accelerator); + virtual void OnEnterSizeMove(); virtual void OnEndSession(BOOL ending, UINT logoff); virtual void OnInitMenuPopup(HMENU menu, UINT position, BOOL is_system_menu); virtual LRESULT OnMouseActivate(HWND window, diff --git a/chrome/common/render_messages_internal.h b/chrome/common/render_messages_internal.h index 27a49a0..6d75d81 100644 --- a/chrome/common/render_messages_internal.h +++ b/chrome/common/render_messages_internal.h @@ -526,6 +526,9 @@ IPC_BEGIN_MESSAGES(View) double /* left channel */, double /* right channel */) + // Notification that a move or resize renderer's containing window has + // started. + IPC_MESSAGE_ROUTED0(ViewMsg_MoveOrResizeStarted) IPC_END_MESSAGES(View) diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 978be7b..8621085 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -414,6 +414,7 @@ void RenderView::OnMessageReceived(const IPC::Message& message) { IPC_MESSAGE_HANDLER(ViewMsg_NotifyAudioStreamStateChanged, OnAudioStreamStateChanged) IPC_MESSAGE_HANDLER(ViewMsg_NotifyAudioStreamVolume, OnAudioStreamVolume) + IPC_MESSAGE_HANDLER(ViewMsg_MoveOrResizeStarted, OnMoveOrResizeStarted) // Have the super handle all other messages. IPC_MESSAGE_UNHANDLED(RenderWidget::OnMessageReceived(message)) @@ -2907,6 +2908,11 @@ void RenderView::OnAudioStreamVolume(int stream_id, double left, double right) { audio_renderer->OnVolume(left, right); } +void RenderView::OnMoveOrResizeStarted() { + if (webview()) + webview()->HideAutofillPopup(); +} + int32 RenderView::CreateAudioStream(AudioRendererImpl* audio_renderer, AudioManager::Format format, int channels, int sample_rate, int bits_per_sample, @@ -2959,3 +2965,10 @@ void RenderView::SetAudioVolume(int stream_id, double left, double right) { DCHECK(audio_renderers_.Lookup(stream_id) != NULL); Send(new ViewHostMsg_SetAudioVolume(routing_id_, stream_id, left, right)); } + +void RenderView::OnResize(const gfx::Size& new_size, + const gfx::Rect& resizer_rect) { + if (webview()) + webview()->HideAutofillPopup(); + RenderWidget::OnResize(new_size, resizer_rect); +} diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h index 9ff7e06..6202f7a 100644 --- a/chrome/renderer/render_view.h +++ b/chrome/renderer/render_view.h @@ -359,6 +359,11 @@ class RenderView : public RenderWidget, void GetAudioVolume(int stream_id); void SetAudioVolume(int stream_id, double left, double right); + protected: + // RenderWidget override. + virtual void OnResize(const gfx::Size& new_size, + const gfx::Rect& resizer_rect); + private: FRIEND_TEST(RenderViewTest, OnLoadAlternateHTMLText); FRIEND_TEST(RenderViewTest, OnNavStateChanged); @@ -508,6 +513,8 @@ class RenderView : public RenderWidget, AccessibilityOutParams* out_params); void OnClearAccessibilityInfo(int iaccessible_id, bool clear_all); + void OnMoveOrResizeStarted(); + // Checks if the RenderView should close, runs the beforeunload handler and // sends ViewMsg_ShouldClose to the browser. void OnMsgShouldClose(); diff --git a/chrome/renderer/render_widget.h b/chrome/renderer/render_widget.h index 4f8e3b4..4079a8b 100644 --- a/chrome/renderer/render_widget.h +++ b/chrome/renderer/render_widget.h @@ -114,7 +114,8 @@ class RenderWidget : public IPC::Channel::Listener, // RenderWidget IPC message handlers void OnClose(); void OnCreatingNewAck(gfx::NativeViewId parent); - void OnResize(const gfx::Size& new_size, const gfx::Rect& resizer_rect); + virtual void OnResize(const gfx::Size& new_size, + const gfx::Rect& resizer_rect); void OnWasHidden(); void OnWasRestored(bool needs_repainting); void OnPaintRectAck(); diff --git a/chrome/views/widget_win.h b/chrome/views/widget_win.h index d135e27..97f9fe4 100644 --- a/chrome/views/widget_win.h +++ b/chrome/views/widget_win.h @@ -192,6 +192,7 @@ class WidgetWin : public Widget, MSG_WM_DESTROY(OnDestroy) MSG_WM_ERASEBKGND(OnEraseBkgnd) MSG_WM_ENDSESSION(OnEndSession) + MSG_WM_ENTERSIZEMOVE(OnEnterSizeMove) MSG_WM_EXITMENULOOP(OnExitMenuLoop) MSG_WM_HSCROLL(OnHScroll) MSG_WM_INITMENU(OnInitMenu) @@ -362,6 +363,7 @@ class WidgetWin : public Widget, // leak a few things. virtual void OnDestroy(); virtual void OnEndSession(BOOL ending, UINT logoff) { SetMsgHandled(FALSE); } + virtual void OnEnterSizeMove() { SetMsgHandled(FALSE); } virtual void OnExitMenuLoop(BOOL is_track_popup_menu) { SetMsgHandled(FALSE); } virtual LRESULT OnEraseBkgnd(HDC dc); virtual LRESULT OnGetObject(UINT uMsg, WPARAM w_param, LPARAM l_param); |