Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(37)

Side by Side Diff: chrome/browser/ui/views/tab_contents/native_tab_contents_view_win.cc

Issue 7015051: Re-land: (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/tab_contents/native_tab_contents_view_win.h" 5 #include "chrome/browser/ui/views/tab_contents/native_tab_contents_view_win.h"
6 6
7 #include "chrome/browser/renderer_host/render_widget_host_view_win.h" 7 #include "chrome/browser/renderer_host/render_widget_host_view_win.h"
8 #include "chrome/browser/tab_contents/web_drop_target_win.h" 8 #include "chrome/browser/tab_contents/web_drop_target_win.h"
9 #include "chrome/browser/ui/views/tab_contents/tab_contents_drag_win.h" 9 #include "chrome/browser/ui/views/tab_contents/tab_contents_drag_win.h"
10 #include "chrome/browser/ui/views/tab_contents/native_tab_contents_view_delegate .h" 10 #include "chrome/browser/ui/views/tab_contents/native_tab_contents_view_delegate .h"
(...skipping 12 matching lines...) Expand all
23 // 23 //
24 // It may be tempting to use GetDesktopWindow() instead, but this is 24 // It may be tempting to use GetDesktopWindow() instead, but this is
25 // problematic as the shell sends messages to children of the desktop 25 // problematic as the shell sends messages to children of the desktop
26 // window that interact poorly with us. 26 // window that interact poorly with us.
27 // 27 //
28 // See: http://crbug.com/16476 28 // See: http://crbug.com/16476
29 HWND GetHiddenTabHostWindow() { 29 HWND GetHiddenTabHostWindow() {
30 static views::Widget* widget = NULL; 30 static views::Widget* widget = NULL;
31 31
32 if (!widget) { 32 if (!widget) {
33 widget = views::Widget::CreateWidget(); 33 widget = new views::Widget;
34 // We don't want this widget to be closed automatically, this causes
35 // problems in tests that close the last non-secondary window.
36 widget->set_is_secondary_widget(false);
34 views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP); 37 views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
35 widget->Init(params); 38 widget->Init(params);
36 // If a background window requests focus, the hidden tab host will 39 // If a background window requests focus, the hidden tab host will
37 // be activated to focus the tab. Use WS_DISABLED to prevent 40 // be activated to focus the tab. Use WS_DISABLED to prevent
38 // this. 41 // this.
39 EnableWindow(widget->GetNativeView(), FALSE); 42 EnableWindow(widget->GetNativeView(), FALSE);
40 } 43 }
41 44
42 return widget->GetNativeView(); 45 return widget->GetNativeView();
43 } 46 }
44 47
45 } // namespace 48 } // namespace
46 49
47 //////////////////////////////////////////////////////////////////////////////// 50 ////////////////////////////////////////////////////////////////////////////////
48 // NativeTabContentsViewWin, public: 51 // NativeTabContentsViewWin, public:
49 52
50 NativeTabContentsViewWin::NativeTabContentsViewWin( 53 NativeTabContentsViewWin::NativeTabContentsViewWin(
51 internal::NativeTabContentsViewDelegate* delegate) 54 internal::NativeTabContentsViewDelegate* delegate)
52 : delegate_(delegate), 55 : views::WidgetWin(delegate->AsNativeWidgetDelegate()),
53 focus_manager_(NULL) { 56 delegate_(delegate) {
54 } 57 }
55 58
56 NativeTabContentsViewWin::~NativeTabContentsViewWin() { 59 NativeTabContentsViewWin::~NativeTabContentsViewWin() {
57 CloseNow(); 60 CloseNow();
58 } 61 }
59 62
60 TabContents* NativeTabContentsViewWin::GetTabContents() const { 63 TabContents* NativeTabContentsViewWin::GetTabContents() const {
61 return delegate_->GetTabContents(); 64 return delegate_->GetTabContents();
62 } 65 }
63 66
64 void NativeTabContentsViewWin::EndDragging() { 67 void NativeTabContentsViewWin::EndDragging() {
65 delegate_->OnNativeTabContentsViewDraggingEnded(); 68 delegate_->OnNativeTabContentsViewDraggingEnded();
66 drag_handler_ = NULL; 69 drag_handler_ = NULL;
67 } 70 }
68 71
69 //////////////////////////////////////////////////////////////////////////////// 72 ////////////////////////////////////////////////////////////////////////////////
70 // NativeTabContentsViewWin, NativeTabContentsView implementation: 73 // NativeTabContentsViewWin, NativeTabContentsView implementation:
71 74
72 void NativeTabContentsViewWin::InitNativeTabContentsView() { 75 void NativeTabContentsViewWin::InitNativeTabContentsView() {
73 views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL); 76 views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL);
77 params.native_widget = this;
74 params.delete_on_destroy = false; 78 params.delete_on_destroy = false;
75 params.parent = GetHiddenTabHostWindow(); 79 params.parent = GetHiddenTabHostWindow();
76 GetWidget()->Init(params); 80 GetWidget()->Init(params);
77 81
78 // Remove the root view drop target so we can register our own. 82 // Remove the root view drop target so we can register our own.
79 RevokeDragDrop(GetNativeView()); 83 RevokeDragDrop(GetNativeView());
80 drop_target_ = new WebDropTarget(GetNativeView(), 84 drop_target_ = new WebDropTarget(GetNativeView(),
81 delegate_->GetTabContents()); 85 delegate_->GetTabContents());
82 } 86 }
83 87
84 void NativeTabContentsViewWin::Unparent() { 88 void NativeTabContentsViewWin::Unparent() {
85 // Remember who our FocusManager is, we won't be able to access it once
86 // unparented.
87 focus_manager_ = views::WidgetWin::GetFocusManager();
88 // Note that we do not DCHECK on focus_manager_ as it may be NULL when used 89 // Note that we do not DCHECK on focus_manager_ as it may be NULL when used
89 // with an external tab container. 90 // with an external tab container.
90 NativeWidget::ReparentNativeView(GetNativeView(), GetHiddenTabHostWindow()); 91 NativeWidget::ReparentNativeView(GetNativeView(), GetHiddenTabHostWindow());
91 } 92 }
92 93
93 RenderWidgetHostView* NativeTabContentsViewWin::CreateRenderWidgetHostView( 94 RenderWidgetHostView* NativeTabContentsViewWin::CreateRenderWidgetHostView(
94 RenderWidgetHost* render_widget_host) { 95 RenderWidgetHost* render_widget_host) {
95 RenderWidgetHostViewWin* view = 96 RenderWidgetHostViewWin* view =
96 new RenderWidgetHostViewWin(render_widget_host); 97 new RenderWidgetHostViewWin(render_widget_host);
97 view->CreateWnd(GetNativeView()); 98 view->CreateWnd(GetNativeView());
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 return WidgetWin::OnMouseRange(msg, w_param, l_param); 160 return WidgetWin::OnMouseRange(msg, w_param, l_param);
160 161
161 switch (msg) { 162 switch (msg) {
162 case WM_LBUTTONDOWN: 163 case WM_LBUTTONDOWN:
163 case WM_MBUTTONDOWN: 164 case WM_MBUTTONDOWN:
164 case WM_RBUTTONDOWN: { 165 case WM_RBUTTONDOWN: {
165 delegate_->OnNativeTabContentsViewMouseDown(); 166 delegate_->OnNativeTabContentsViewMouseDown();
166 break; 167 break;
167 } 168 }
168 case WM_MOUSEMOVE: 169 case WM_MOUSEMOVE:
169 delegate_->OnNativeTabContentsViewMouseMove(); 170 delegate_->OnNativeTabContentsViewMouseMove(true);
170 break; 171 break;
171 default: 172 default:
172 break; 173 break;
173 } 174 }
174 return 0; 175 return 0;
175 } 176 }
176 177
177 // A message is reflected here from view(). 178 // A message is reflected here from view().
178 // Return non-zero to indicate that it is handled here. 179 // Return non-zero to indicate that it is handled here.
179 // Return 0 to allow view() to further process it. 180 // Return 0 to allow view() to further process it.
180 LRESULT NativeTabContentsViewWin::OnReflectedMessage(UINT msg, 181 LRESULT NativeTabContentsViewWin::OnReflectedMessage(UINT msg,
181 WPARAM w_param, 182 WPARAM w_param,
182 LPARAM l_param) { 183 LPARAM l_param) {
183 MSG* message = reinterpret_cast<MSG*>(l_param); 184 MSG* message = reinterpret_cast<MSG*>(l_param);
184 switch (message->message) { 185 switch (message->message) {
185 case WM_MOUSEWHEEL: 186 case WM_MOUSEWHEEL:
186 // This message is reflected from the view() to this window. 187 // This message is reflected from the view() to this window.
187 if (GET_KEYSTATE_WPARAM(message->wParam) & MK_CONTROL) { 188 if (GET_KEYSTATE_WPARAM(message->wParam) & MK_CONTROL) {
188 delegate_->OnNativeTabContentsViewWheelZoom( 189 delegate_->OnNativeTabContentsViewWheelZoom(
189 GET_WHEEL_DELTA_WPARAM(message->wParam)); 190 GET_WHEEL_DELTA_WPARAM(message->wParam) > 0);
190 return 1; 191 return 1;
191 } 192 }
192 break; 193 break;
193 case WM_HSCROLL: 194 case WM_HSCROLL:
194 case WM_VSCROLL: 195 case WM_VSCROLL:
195 if (ScrollZoom(LOWORD(message->wParam))) 196 if (ScrollZoom(LOWORD(message->wParam)))
196 return 1; 197 return 1;
197 default: 198 default:
198 break; 199 break;
199 } 200 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 // to receive scroll messages from ThinkPad touch-pad driver. Suppress 257 // to receive scroll messages from ThinkPad touch-pad driver. Suppress
257 // painting of scrollbars by returning 0 size for them. 258 // painting of scrollbars by returning 0 size for them.
258 return 0; 259 return 0;
259 } 260 }
260 261
261 void NativeTabContentsViewWin::OnNCPaint(HRGN rgn) { 262 void NativeTabContentsViewWin::OnNCPaint(HRGN rgn) {
262 // Suppress default WM_NCPAINT handling. We don't need to do anything 263 // Suppress default WM_NCPAINT handling. We don't need to do anything
263 // here since the view will draw everything correctly. 264 // here since the view will draw everything correctly.
264 } 265 }
265 266
266 views::FocusManager* NativeTabContentsViewWin::GetFocusManager() {
267 views::FocusManager* focus_manager = WidgetWin::GetFocusManager();
268 if (focus_manager) {
269 // If focus_manager_ is non NULL, it means we have been reparented, in which
270 // case its value may not be valid anymore.
271 focus_manager_ = NULL;
272 return focus_manager;
273 }
274 // TODO(jcampan): we should DCHECK on focus_manager_, as it should not be
275 // NULL. We are not doing it as it breaks some unit-tests. We should
276 // probably have an empty TabContentView implementation for the unit-tests,
277 // that would prevent that code being executed in the unit-test case.
278 // DCHECK(focus_manager_);
279 return focus_manager_;
280 }
281
282 //////////////////////////////////////////////////////////////////////////////// 267 ////////////////////////////////////////////////////////////////////////////////
283 // NativeTabContentsViewWin, private: 268 // NativeTabContentsViewWin, private:
284 269
285 void NativeTabContentsViewWin::ScrollCommon(UINT message, int scroll_type, 270 void NativeTabContentsViewWin::ScrollCommon(UINT message, int scroll_type,
286 short position, HWND scrollbar) { 271 short position, HWND scrollbar) {
287 // This window can receive scroll events as a result of the ThinkPad's 272 // This window can receive scroll events as a result of the ThinkPad's
288 // touch-pad scroll wheel emulation. 273 // touch-pad scroll wheel emulation.
289 if (!ScrollZoom(scroll_type)) { 274 if (!ScrollZoom(scroll_type)) {
290 // Reflect scroll message to the view() to give it a chance 275 // Reflect scroll message to the view() to give it a chance
291 // to process scrolling. 276 // to process scrolling.
(...skipping 21 matching lines...) Expand all
313 break; 298 break;
314 case SB_LINEDOWN: 299 case SB_LINEDOWN:
315 distance = -WHEEL_DELTA; 300 distance = -WHEEL_DELTA;
316 break; 301 break;
317 // TODO(joshia): Handle SB_PAGEUP, SB_PAGEDOWN, SB_THUMBPOSITION, 302 // TODO(joshia): Handle SB_PAGEUP, SB_PAGEDOWN, SB_THUMBPOSITION,
318 // and SB_THUMBTRACK for completeness 303 // and SB_THUMBTRACK for completeness
319 default: 304 default:
320 break; 305 break;
321 } 306 }
322 307
323 delegate_->OnNativeTabContentsViewWheelZoom(distance); 308 delegate_->OnNativeTabContentsViewWheelZoom(distance > 0);
324 return true; 309 return true;
325 } 310 }
326 return false; 311 return false;
327 } 312 }
328 313
329 //////////////////////////////////////////////////////////////////////////////// 314 ////////////////////////////////////////////////////////////////////////////////
330 // NativeTabContentsView, public: 315 // NativeTabContentsView, public:
331 316
332 // static 317 // static
333 NativeTabContentsView* NativeTabContentsView::CreateNativeTabContentsView( 318 NativeTabContentsView* NativeTabContentsView::CreateNativeTabContentsView(
334 internal::NativeTabContentsViewDelegate* delegate) { 319 internal::NativeTabContentsViewDelegate* delegate) {
335 return new NativeTabContentsViewWin(delegate); 320 return new NativeTabContentsViewWin(delegate);
336 } 321 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698