OLD | NEW |
---|---|
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_aura.h" | 5 #include "views/widget/native_widget_aura.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "ui/aura/aura_constants.h" | 8 #include "ui/aura/aura_constants.h" |
9 #include "ui/aura/desktop.h" | 9 #include "ui/aura/desktop.h" |
10 #include "ui/aura/desktop_observer.h" | 10 #include "ui/aura/desktop_observer.h" |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
137 window_->set_minimum_size(delegate_->GetMinimumSize()); | 137 window_->set_minimum_size(delegate_->GetMinimumSize()); |
138 window_->SetBounds(params.bounds); | 138 window_->SetBounds(params.bounds); |
139 if (params.type == Widget::InitParams::TYPE_CONTROL) { | 139 if (params.type == Widget::InitParams::TYPE_CONTROL) { |
140 window_->SetParent(params.GetParent()); | 140 window_->SetParent(params.GetParent()); |
141 } else { | 141 } else { |
142 // Set up the transient child before the window is added. This way the | 142 // Set up the transient child before the window is added. This way the |
143 // LayoutManager knows the window has a transient parent. | 143 // LayoutManager knows the window has a transient parent. |
144 gfx::NativeView parent = params.GetParent(); | 144 gfx::NativeView parent = params.GetParent(); |
145 if (parent) | 145 if (parent) |
146 parent->AddTransientChild(window_); | 146 parent->AddTransientChild(window_); |
147 // SetAlwaysOnTop before SetParent so that always-on-top container is used. | |
148 if (params.keep_on_top) | |
149 SetAlwaysOnTop(true); | |
147 window_->SetParent(NULL); | 150 window_->SetParent(NULL); |
148 } | 151 } |
149 // TODO(beng): do this some other way. | 152 // TODO(beng): do this some other way. |
150 delegate_->OnNativeWidgetSizeChanged(params.bounds.size()); | 153 delegate_->OnNativeWidgetSizeChanged(params.bounds.size()); |
151 can_activate_ = params.can_activate; | 154 can_activate_ = params.can_activate; |
152 if (params.type != Widget::InitParams::TYPE_TOOLTIP && !params.child) { | 155 if (params.type != Widget::InitParams::TYPE_TOOLTIP && !params.child) { |
153 DCHECK(GetWidget()->GetRootView()); | 156 DCHECK(GetWidget()->GetRootView()); |
154 views::TooltipManagerViews* manager = new views::TooltipManagerViews( | 157 views::TooltipManagerViews* manager = new views::TooltipManagerViews( |
155 GetWidget()->GetRootView()); | 158 GetWidget()->GetRootView()); |
156 tooltip_manager_.reset(manager); | 159 tooltip_manager_.reset(manager); |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
411 | 414 |
412 void NativeWidgetAura::Deactivate() { | 415 void NativeWidgetAura::Deactivate() { |
413 window_->Deactivate(); | 416 window_->Deactivate(); |
414 } | 417 } |
415 | 418 |
416 bool NativeWidgetAura::IsActive() const { | 419 bool NativeWidgetAura::IsActive() const { |
417 return aura::Desktop::GetInstance()->active_window() == window_; | 420 return aura::Desktop::GetInstance()->active_window() == window_; |
418 } | 421 } |
419 | 422 |
420 void NativeWidgetAura::SetAlwaysOnTop(bool on_top) { | 423 void NativeWidgetAura::SetAlwaysOnTop(bool on_top) { |
421 // http://crbug.com/102582 | 424 switch (window_->type()) { |
422 NOTIMPLEMENTED(); | 425 case aura::WINDOW_TYPE_NORMAL: |
426 case aura::WINDOW_TYPE_POPUP: | |
427 SetNativeWindowProperty(aura::kAlwaysOnTopKey, | |
428 reinterpret_cast<void*>(on_top)); | |
429 | |
430 // Having a parent means it's added to some container already. | |
431 // Doing SetParent again here to make sure window_ is put in the right | |
432 // container. | |
433 // TODO(xiyuan): Optimize and only switch containers when necessary. | |
434 if (window_->parent()) { | |
435 window_->parent()->RemoveChild(window_); | |
436 window_->SetParent(NULL); | |
437 } | |
438 | |
439 break; | |
440 case aura::WINDOW_TYPE_MENU: | |
441 case aura::WINDOW_TYPE_TOOLTIP: | |
442 // Menu and tooptip has their own container and ignores always-on-top. | |
443 break; | |
444 default: | |
445 NOTREACHED() << "Window " << window_->id() | |
446 << " of type " << window_->type() | |
447 << " does not support always-on-top."; | |
448 break; | |
449 } | |
oshima
2011/11/04 20:40:08
Sorry I missed this part in previous review.
This
xiyuan
2011/11/04 22:40:21
Done.
| |
423 } | 450 } |
424 | 451 |
425 void NativeWidgetAura::Maximize() { | 452 void NativeWidgetAura::Maximize() { |
426 window_->SetIntProperty(aura::kShowStateKey, ui::SHOW_STATE_MAXIMIZED); | 453 window_->SetIntProperty(aura::kShowStateKey, ui::SHOW_STATE_MAXIMIZED); |
427 } | 454 } |
428 | 455 |
429 void NativeWidgetAura::Minimize() { | 456 void NativeWidgetAura::Minimize() { |
430 NOTREACHED(); | 457 NOTREACHED(); |
431 } | 458 } |
432 | 459 |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
731 | 758 |
732 // static | 759 // static |
733 bool NativeWidgetPrivate::IsMouseButtonDown() { | 760 bool NativeWidgetPrivate::IsMouseButtonDown() { |
734 // http://crbug.com/102577 | 761 // http://crbug.com/102577 |
735 NOTIMPLEMENTED(); | 762 NOTIMPLEMENTED(); |
736 return false; | 763 return false; |
737 } | 764 } |
738 | 765 |
739 } // namespace internal | 766 } // namespace internal |
740 } // namespace views | 767 } // namespace views |
OLD | NEW |