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

Side by Side Diff: views/widget/native_widget_views.cc

Issue 7273084: Change the meaning of "Widget::GetTopLevelWidget()" to mean the logical top level Window in the v... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 5 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/native_widget_views.h ('k') | views/widget/native_widget_win.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/native_widget_views.h" 5 #include "views/widget/native_widget_views.h"
6 6
7 #include "ui/gfx/compositor/compositor.h" 7 #include "ui/gfx/compositor/compositor.h"
8 #include "views/desktop/desktop_window_view.h"
8 #include "views/view.h" 9 #include "views/view.h"
9 #include "views/views_delegate.h" 10 #include "views/views_delegate.h"
10 #include "views/widget/native_widget_view.h" 11 #include "views/widget/native_widget_view.h"
11 #include "views/widget/root_view.h" 12 #include "views/widget/root_view.h"
12 13
13 namespace views { 14 namespace views {
14 15
15 //////////////////////////////////////////////////////////////////////////////// 16 ////////////////////////////////////////////////////////////////////////////////
16 // NativeWidgetViews, public: 17 // NativeWidgetViews, public:
17 18
18 NativeWidgetViews::NativeWidgetViews(internal::NativeWidgetDelegate* delegate) 19 NativeWidgetViews::NativeWidgetViews(internal::NativeWidgetDelegate* delegate)
19 : delegate_(delegate), 20 : delegate_(delegate),
20 view_(NULL), 21 view_(NULL),
21 active_(false), 22 active_(false),
22 minimized_(false), 23 minimized_(false),
23 ALLOW_THIS_IN_INITIALIZER_LIST(close_widget_factory_(this)), 24 ALLOW_THIS_IN_INITIALIZER_LIST(close_widget_factory_(this)),
24 hosting_widget_(NULL) { 25 hosting_widget_(NULL),
26 ownership_(Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET),
27 delete_native_view_(true) {
25 } 28 }
26 29
27 NativeWidgetViews::~NativeWidgetViews() { 30 NativeWidgetViews::~NativeWidgetViews() {
31 delegate_->OnNativeWidgetDestroying();
32 if (delete_native_view_) {
33 view_->parent()->RemoveChildView(view_);
34 // We must prevent the NativeWidgetView from attempting to delete us.
35 view_->set_delete_native_widget(false);
36 delete view_;
37 }
38 delegate_->OnNativeWidgetDestroyed();
39 if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET)
40 delete delegate_;
28 } 41 }
29 42
30 View* NativeWidgetViews::GetView() { 43 View* NativeWidgetViews::GetView() {
31 return view_; 44 return view_;
32 } 45 }
33 46
34 const View* NativeWidgetViews::GetView() const { 47 const View* NativeWidgetViews::GetView() const {
35 return view_; 48 return view_;
36 } 49 }
37 50
38 void NativeWidgetViews::OnActivate(bool active) { 51 void NativeWidgetViews::OnActivate(bool active) {
39 active_ = active; 52 active_ = active;
40 view_->SchedulePaint(); 53 view_->SchedulePaint();
41 } 54 }
42 55
43 //////////////////////////////////////////////////////////////////////////////// 56 ////////////////////////////////////////////////////////////////////////////////
44 // NativeWidgetViews, NativeWidget implementation: 57 // NativeWidgetViews, NativeWidget implementation:
45 58
46 void NativeWidgetViews::InitNativeWidget(const Widget::InitParams& params) { 59 void NativeWidgetViews::InitNativeWidget(const Widget::InitParams& params) {
60 ownership_ = params.ownership;
47 View* desktop_view = ViewsDelegate::views_delegate->GetDefaultParentView(); 61 View* desktop_view = ViewsDelegate::views_delegate->GetDefaultParentView();
48 hosting_widget_ = desktop_view->GetWidget(); 62 hosting_widget_ = desktop_view->GetWidget();
49 view_ = new internal::NativeWidgetView(this); 63 view_ = new internal::NativeWidgetView(this);
50 view_->SetBoundsRect(params.bounds); 64 view_->SetBoundsRect(params.bounds);
51 view_->SetPaintToLayer(true); 65 view_->SetPaintToLayer(true);
66 // TODO(beng): This is insufficient. While this handles the case where
67 // params.parent_widget is NULL, we need to somehow handle a case
68 // where we are passed a specified, valid parent. We may have to
69 // add View* Widget::GetContainerView().
52 desktop_view->AddChildView(view_); 70 desktop_view->AddChildView(view_);
53 71
54 // TODO(beng): handle parenting. 72 // TODO(beng): handle parenting.
55 // TODO(beng): SetInitParams(). 73 // TODO(beng): SetInitParams().
56 } 74 }
57 75
58 NonClientFrameView* NativeWidgetViews::CreateNonClientFrameView() { 76 NonClientFrameView* NativeWidgetViews::CreateNonClientFrameView() {
59 return NULL; 77 return NULL;
60 } 78 }
61 79
(...skipping 17 matching lines...) Expand all
79 } 97 }
80 98
81 gfx::NativeView NativeWidgetViews::GetNativeView() const { 99 gfx::NativeView NativeWidgetViews::GetNativeView() const {
82 return GetParentNativeWidget()->GetNativeView(); 100 return GetParentNativeWidget()->GetNativeView();
83 } 101 }
84 102
85 gfx::NativeWindow NativeWidgetViews::GetNativeWindow() const { 103 gfx::NativeWindow NativeWidgetViews::GetNativeWindow() const {
86 return GetParentNativeWidget()->GetNativeWindow(); 104 return GetParentNativeWidget()->GetNativeWindow();
87 } 105 }
88 106
107 Widget* NativeWidgetViews::GetTopLevelWidget() {
108 if (view_->parent() == ViewsDelegate::views_delegate->GetDefaultParentView())
109 return GetWidget();
110 return view_->GetWidget()->GetTopLevelWidget();
111 }
112
89 const ui::Compositor* NativeWidgetViews::GetCompositor() const { 113 const ui::Compositor* NativeWidgetViews::GetCompositor() const {
90 return hosting_widget_->GetCompositor(); 114 return hosting_widget_->GetCompositor();
91 } 115 }
92 116
93 ui::Compositor* NativeWidgetViews::GetCompositor() { 117 ui::Compositor* NativeWidgetViews::GetCompositor() {
94 return hosting_widget_->GetCompositor(); 118 return hosting_widget_->GetCompositor();
95 } 119 }
96 120
97 void NativeWidgetViews::MarkLayerDirty() { 121 void NativeWidgetViews::MarkLayerDirty() {
98 view_->MarkLayerDirty(); 122 view_->MarkLayerDirty();
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 251
228 void NativeWidgetViews::Close() { 252 void NativeWidgetViews::Close() {
229 Hide(); 253 Hide();
230 if (close_widget_factory_.empty()) { 254 if (close_widget_factory_.empty()) {
231 MessageLoop::current()->PostTask(FROM_HERE, 255 MessageLoop::current()->PostTask(FROM_HERE,
232 close_widget_factory_.NewRunnableMethod(&NativeWidgetViews::CloseNow)); 256 close_widget_factory_.NewRunnableMethod(&NativeWidgetViews::CloseNow));
233 } 257 }
234 } 258 }
235 259
236 void NativeWidgetViews::CloseNow() { 260 void NativeWidgetViews::CloseNow() {
237 view_->parent()->RemoveChildView(view_); 261 // TODO(beng): what about the other case??
238 delete view_; 262 if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET)
263 delete view_;
239 } 264 }
240 265
241 void NativeWidgetViews::EnableClose(bool enable) { 266 void NativeWidgetViews::EnableClose(bool enable) {
242 } 267 }
243 268
244 void NativeWidgetViews::Show() { 269 void NativeWidgetViews::Show() {
245 view_->SetVisible(true); 270 view_->SetVisible(true);
246 } 271 }
247 272
248 void NativeWidgetViews::Hide() { 273 void NativeWidgetViews::Hide() {
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 } 397 }
373 398
374 const internal::NativeWidgetPrivate* 399 const internal::NativeWidgetPrivate*
375 NativeWidgetViews::GetParentNativeWidget() const { 400 NativeWidgetViews::GetParentNativeWidget() const {
376 return static_cast<const internal::NativeWidgetPrivate*>( 401 return static_cast<const internal::NativeWidgetPrivate*>(
377 view_->GetWidget()->native_widget()); 402 view_->GetWidget()->native_widget());
378 } 403 }
379 404
380 } // namespace views 405 } // namespace views
381 406
OLDNEW
« no previous file with comments | « views/widget/native_widget_views.h ('k') | views/widget/native_widget_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698