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

Side by Side Diff: views/widget/widget.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
« no previous file with comments | « views/widget/widget.h ('k') | views/widget/widget_gtk.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "views/widget/widget.h" 5 #include "views/widget/widget.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "ui/gfx/compositor/compositor.h" 9 #include "ui/gfx/compositor/compositor.h"
10 #include "views/focus/view_storage.h" 10 #include "views/focus/view_storage.h"
11 #include "views/ime/input_method.h" 11 #include "views/ime/input_method.h"
12 #include "views/views_delegate.h"
12 #include "views/widget/default_theme_provider.h" 13 #include "views/widget/default_theme_provider.h"
13 #include "views/widget/root_view.h" 14 #include "views/widget/root_view.h"
14 #include "views/widget/native_widget.h" 15 #include "views/widget/native_widget.h"
15 16
16 namespace views { 17 namespace views {
17 18
18 //////////////////////////////////////////////////////////////////////////////// 19 ////////////////////////////////////////////////////////////////////////////////
19 // Widget, InitParams: 20 // Widget, InitParams:
20 21
21 Widget::InitParams::InitParams() 22 Widget::InitParams::InitParams()
22 : type(TYPE_WINDOW), 23 : type(TYPE_WINDOW),
23 child(false), 24 child(false),
25 transient(false),
24 transparent(false), 26 transparent(false),
25 accept_events(true), 27 accept_events(true),
26 can_activate(true), 28 can_activate(true),
27 keep_on_top(false), 29 keep_on_top(false),
28 delete_on_destroy(true), 30 delete_on_destroy(true),
29 mirror_origin_in_rtl(false), 31 mirror_origin_in_rtl(false),
30 has_dropshadow(false), 32 has_dropshadow(false),
31 double_buffer(false), 33 double_buffer(false),
32 parent(NULL), 34 parent(NULL),
33 parent_widget(NULL), 35 parent_widget(NULL),
34 native_widget(NULL) { 36 native_widget(NULL) {
35 } 37 }
36 38
37 Widget::InitParams::InitParams(Type type) 39 Widget::InitParams::InitParams(Type type)
38 : type(type), 40 : type(type),
39 child(type == TYPE_CONTROL), 41 child(type == TYPE_CONTROL),
42 transient(type == TYPE_POPUP || type == TYPE_MENU),
40 transparent(false), 43 transparent(false),
41 accept_events(true), 44 accept_events(true),
42 can_activate(type != TYPE_POPUP && type != TYPE_MENU), 45 can_activate(type != TYPE_POPUP && type != TYPE_MENU),
43 keep_on_top(type == TYPE_MENU), 46 keep_on_top(type == TYPE_MENU),
44 delete_on_destroy(true), 47 delete_on_destroy(true),
45 mirror_origin_in_rtl(false), 48 mirror_origin_in_rtl(false),
46 has_dropshadow(false), 49 has_dropshadow(false),
47 double_buffer(false), 50 double_buffer(false),
48 parent(NULL), 51 parent(NULL),
49 parent_widget(NULL), 52 parent_widget(NULL),
50 native_widget(NULL) { 53 native_widget(NULL) {
51 } 54 }
52 55
53 //////////////////////////////////////////////////////////////////////////////// 56 ////////////////////////////////////////////////////////////////////////////////
54 // Widget, public: 57 // Widget, public:
55 58
56 // static 59 // static
57 Widget::InitParams Widget::WindowInitParams() { 60 Widget::InitParams Widget::WindowInitParams() {
58 return InitParams(InitParams::TYPE_WINDOW); 61 return InitParams(InitParams::TYPE_WINDOW);
59 } 62 }
60 63
61 Widget::Widget() 64 Widget::Widget()
62 : is_mouse_button_pressed_(false), 65 : is_mouse_button_pressed_(false),
63 last_mouse_event_was_move_(false), 66 last_mouse_event_was_move_(false),
64 native_widget_(NULL), 67 native_widget_(NULL),
65 widget_delegate_(NULL), 68 widget_delegate_(NULL),
66 dragged_view_(NULL) { 69 dragged_view_(NULL),
70 delete_on_destroy_(false),
71 is_secondary_widget_(true) {
67 } 72 }
68 73
69 Widget::~Widget() { 74 Widget::~Widget() {
75 DestroyRootView();
76
77 if (!delete_on_destroy_)
78 delete native_widget_;
70 } 79 }
71 80
72 void Widget::Init(const InitParams& params) { 81 void Widget::Init(const InitParams& params) {
82 delete_on_destroy_ = params.delete_on_destroy;
83 native_widget_ =
84 params.native_widget ? params.native_widget
85 : NativeWidget::CreateNativeWidget(this);
73 GetRootView(); 86 GetRootView();
74 default_theme_provider_.reset(new DefaultThemeProvider); 87 default_theme_provider_.reset(new DefaultThemeProvider);
88 if (params.type == InitParams::TYPE_MENU)
89 is_mouse_button_pressed_ = native_widget_->IsMouseButtonDown();
75 native_widget_->InitNativeWidget(params); 90 native_widget_->InitNativeWidget(params);
76 } 91 }
77 92
78 // Unconverted methods (see header) -------------------------------------------- 93 // Unconverted methods (see header) --------------------------------------------
79 94
80 gfx::NativeView Widget::GetNativeView() const { 95 gfx::NativeView Widget::GetNativeView() const {
81 return NULL; 96 return native_widget_->GetNativeView();
82 } 97 }
83 98
84 gfx::NativeWindow Widget::GetNativeWindow() const { 99 gfx::NativeWindow Widget::GetNativeWindow() const {
85 return NULL; 100 return native_widget_->GetNativeWindow();
86 }
87
88 void Widget::GenerateMousePressedForView(View* view, const gfx::Point& point) {
89 } 101 }
90 102
91 bool Widget::GetAccelerator(int cmd_id, ui::Accelerator* accelerator) { 103 bool Widget::GetAccelerator(int cmd_id, ui::Accelerator* accelerator) {
92 return false; 104 return false;
93 } 105 }
94 106
95 Window* Widget::GetWindow() { 107 Window* Widget::GetContainingWindow() {
96 return NULL; 108 return native_widget_->GetContainingWindow();
97 } 109 }
98 110
99 const Window* Widget::GetWindow() const { 111 const Window* Widget::GetContainingWindow() const {
100 return NULL; 112 return native_widget_->GetContainingWindow();
101 } 113 }
102 114
103 void Widget::ViewHierarchyChanged(bool is_add, View* parent, View* child) { 115 void Widget::ViewHierarchyChanged(bool is_add, View* parent, View* child) {
104 if (!is_add) { 116 if (!is_add) {
105 if (child == dragged_view_) 117 if (child == dragged_view_)
106 dragged_view_ = NULL; 118 dragged_view_ = NULL;
107 119
108 FocusManager* focus_manager = GetFocusManager(); 120 FocusManager* focus_manager = GetFocusManager();
109 if (focus_manager) 121 if (focus_manager)
110 focus_manager->ViewRemoved(child); 122 focus_manager->ViewRemoved(child);
111 ViewStorage::GetInstance()->ViewRemoved(parent, child); 123 ViewStorage::GetInstance()->ViewRemoved(child);
124 native_widget_->ViewRemoved(child);
112 } 125 }
113 } 126 }
114 127
115 void Widget::NotifyNativeViewHierarchyChanged(bool attached, 128 void Widget::NotifyNativeViewHierarchyChanged(bool attached,
116 gfx::NativeView native_view) { 129 gfx::NativeView native_view) {
117 if (!attached) { 130 if (!attached) {
118 FocusManager* focus_manager = GetFocusManager(); 131 FocusManager* focus_manager = GetFocusManager();
119 // We are being removed from a window hierarchy. Treat this as 132 // We are being removed from a window hierarchy. Treat this as
120 // the root_view_ being removed. 133 // the root_view_ being removed.
121 if (focus_manager) 134 if (focus_manager)
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 } 279 }
267 280
268 void Widget::SchedulePaintInRect(const gfx::Rect& rect) { 281 void Widget::SchedulePaintInRect(const gfx::Rect& rect) {
269 native_widget_->SchedulePaintInRect(rect); 282 native_widget_->SchedulePaintInRect(rect);
270 } 283 }
271 284
272 void Widget::SetCursor(gfx::NativeCursor cursor) { 285 void Widget::SetCursor(gfx::NativeCursor cursor) {
273 native_widget_->SetCursor(cursor); 286 native_widget_->SetCursor(cursor);
274 } 287 }
275 288
289 void Widget::ResetLastMouseMoveFlag() {
290 last_mouse_event_was_move_ = false;
291 }
292
276 FocusTraversable* Widget::GetFocusTraversable() { 293 FocusTraversable* Widget::GetFocusTraversable() {
277 return root_view_.get(); 294 return root_view_.get();
278 } 295 }
279 296
280 void Widget::ThemeChanged() { 297 void Widget::ThemeChanged() {
281 root_view_->ThemeChanged(); 298 root_view_->ThemeChanged();
282 } 299 }
283 300
284 void Widget::LocaleChanged() { 301 void Widget::LocaleChanged() {
285 root_view_->LocaleChanged(); 302 root_view_->LocaleChanged();
286 } 303 }
287 304
288 void Widget::SetFocusTraversableParent(FocusTraversable* parent) { 305 void Widget::SetFocusTraversableParent(FocusTraversable* parent) {
289 root_view_->SetFocusTraversableParent(parent); 306 root_view_->SetFocusTraversableParent(parent);
290 } 307 }
291 308
292 void Widget::SetFocusTraversableParentView(View* parent_view) { 309 void Widget::SetFocusTraversableParentView(View* parent_view) {
293 root_view_->SetFocusTraversableParentView(parent_view); 310 root_view_->SetFocusTraversableParentView(parent_view);
294 } 311 }
295 312
313 void Widget::NotifyAccessibilityEvent(
314 View* view,
315 ui::AccessibilityTypes::Event event_type,
316 bool send_native_event) {
317 // Send the notification to the delegate.
318 if (ViewsDelegate::views_delegate)
319 ViewsDelegate::views_delegate->NotifyAccessibilityEvent(view, event_type);
320
321 if (send_native_event)
322 native_widget_->SendNativeAccessibilityEvent(view, event_type);
323 }
324
296 //////////////////////////////////////////////////////////////////////////////// 325 ////////////////////////////////////////////////////////////////////////////////
297 // Widget, NativeWidgetDelegate implementation: 326 // Widget, NativeWidgetDelegate implementation:
298 327
299 void Widget::OnNativeFocus(gfx::NativeView focused_view) { 328 void Widget::OnNativeFocus(gfx::NativeView focused_view) {
300 GetFocusManager()->GetWidgetFocusManager()->OnWidgetFocusEvent( 329 GetFocusManager()->GetWidgetFocusManager()->OnWidgetFocusEvent(
301 focused_view, 330 focused_view,
302 GetNativeView()); 331 GetNativeView());
303 } 332 }
304 333
305 void Widget::OnNativeBlur(gfx::NativeView focused_view) { 334 void Widget::OnNativeBlur(gfx::NativeView focused_view) {
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 } 429 }
401 return true; 430 return true;
402 } 431 }
403 432
404 void Widget::OnMouseCaptureLost() { 433 void Widget::OnMouseCaptureLost() {
405 if (is_mouse_button_pressed_) 434 if (is_mouse_button_pressed_)
406 GetRootView()->OnMouseCaptureLost(); 435 GetRootView()->OnMouseCaptureLost();
407 is_mouse_button_pressed_ = false; 436 is_mouse_button_pressed_ = false;
408 } 437 }
409 438
439 Widget* Widget::AsWidget() {
440 return this;
441 }
442
443 const Widget* Widget::AsWidget() const {
444 return this;
445 }
446
410 //////////////////////////////////////////////////////////////////////////////// 447 ////////////////////////////////////////////////////////////////////////////////
411 // Widget, FocusTraversable implementation: 448 // Widget, FocusTraversable implementation:
412 449
413 FocusSearch* Widget::GetFocusSearch() { 450 FocusSearch* Widget::GetFocusSearch() {
414 return root_view_->GetFocusSearch(); 451 return root_view_->GetFocusSearch();
415 } 452 }
416 453
417 FocusTraversable* Widget::GetFocusTraversableParent() { 454 FocusTraversable* Widget::GetFocusTraversableParent() {
418 // We are a proxy to the root view, so we should be bypassed when traversing 455 // We are a proxy to the root view, so we should be bypassed when traversing
419 // up and as a result this should not be called. 456 // up and as a result this should not be called.
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 gfx::AcceleratedWidget widget = native_widget_->GetAcceleratedWidget(); 502 gfx::AcceleratedWidget widget = native_widget_->GetAcceleratedWidget();
466 if (widget != gfx::kNullAcceleratedWidget) 503 if (widget != gfx::kNullAcceleratedWidget)
467 compositor_ = ui::Compositor::Create(widget); 504 compositor_ = ui::Compositor::Create(widget);
468 } 505 }
469 506
470 bool Widget::ShouldReleaseCaptureOnMouseReleased() const { 507 bool Widget::ShouldReleaseCaptureOnMouseReleased() const {
471 return true; 508 return true;
472 } 509 }
473 510
474 } // namespace views 511 } // namespace views
OLDNEW
« no previous file with comments | « views/widget/widget.h ('k') | views/widget/widget_gtk.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698