Commit c3c99970 authored by sadrul@chromium.org's avatar sadrul@chromium.org

NativeWidgetViews: Implement widget activation/deactivation.

BUG=none
TEST=WidgetObserverTest.ActivationChange

Review URL: http://codereview.chromium.org/7585028

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@95828 0039d316-1c4b-4281-b951-d872f2087c98
parent 3b50a1c7
...@@ -138,15 +138,10 @@ void DesktopWindowView::ActivateWidget(Widget* widget) { ...@@ -138,15 +138,10 @@ void DesktopWindowView::ActivateWidget(Widget* widget) {
if (widget && widget->IsActive()) if (widget && widget->IsActive())
return; return;
if (active_native_widget_)
active_native_widget_->OnActivate(false);
if (widget) { if (widget) {
widget->MoveToTop();
active_native_widget_ =
static_cast<NativeWidgetViews*>(widget->native_widget());
active_native_widget_->OnActivate(true);
if (!widget->HasObserver(this)) if (!widget->HasObserver(this))
widget->AddObserver(this); widget->AddObserver(this);
widget->Activate();
} }
} }
...@@ -252,6 +247,14 @@ void DesktopWindowView::OnWidgetVisibilityChanged(Widget* widget, ...@@ -252,6 +247,14 @@ void DesktopWindowView::OnWidgetVisibilityChanged(Widget* widget,
void DesktopWindowView::OnWidgetActivationChanged(Widget* widget, void DesktopWindowView::OnWidgetActivationChanged(Widget* widget,
bool active) { bool active) {
if (active) {
if (active_native_widget_)
active_native_widget_->GetWidget()->Deactivate();
active_native_widget_ =
static_cast<NativeWidgetViews*>(widget->native_widget());
} else if (widget == active_native_widget_->GetWidget()) {
active_native_widget_ = NULL;
}
} }
} // namespace desktop } // namespace desktop
......
...@@ -378,11 +378,12 @@ bool NativeWidgetViews::IsVisible() const { ...@@ -378,11 +378,12 @@ bool NativeWidgetViews::IsVisible() const {
void NativeWidgetViews::Activate() { void NativeWidgetViews::Activate() {
// Enable WidgetObserverTest.ActivationChange when this is implemented. // Enable WidgetObserverTest.ActivationChange when this is implemented.
NOTIMPLEMENTED(); MoveToTop();
OnActivate(true);
} }
void NativeWidgetViews::Deactivate() { void NativeWidgetViews::Deactivate() {
NOTIMPLEMENTED(); OnActivate(false);
} }
bool NativeWidgetViews::IsActive() const { bool NativeWidgetViews::IsActive() const {
......
...@@ -14,6 +14,10 @@ ...@@ -14,6 +14,10 @@
#include "views/widget/native_widget_private.h" #include "views/widget/native_widget_private.h"
namespace views { namespace views {
namespace desktop {
class DesktopWindowView;
}
namespace internal { namespace internal {
class NativeWidgetView; class NativeWidgetView;
} }
...@@ -128,6 +132,8 @@ class VIEWS_EXPORT NativeWidgetViews : public internal::NativeWidgetPrivate, ...@@ -128,6 +132,8 @@ class VIEWS_EXPORT NativeWidgetViews : public internal::NativeWidgetPrivate,
virtual void DispatchKeyEventPostIME(const KeyEvent& key) OVERRIDE; virtual void DispatchKeyEventPostIME(const KeyEvent& key) OVERRIDE;
private: private:
friend class desktop::DesktopWindowView;
// These functions may return NULL during Widget destruction. // These functions may return NULL during Widget destruction.
internal::NativeWidgetPrivate* GetParentNativeWidget(); internal::NativeWidgetPrivate* GetParentNativeWidget();
const internal::NativeWidgetPrivate* GetParentNativeWidget() const; const internal::NativeWidgetPrivate* GetParentNativeWidget() const;
......
...@@ -586,10 +586,15 @@ class WidgetObserverTest : public WidgetTest, ...@@ -586,10 +586,15 @@ class WidgetObserverTest : public WidgetTest,
virtual void OnWidgetActivationChanged(Widget* widget, virtual void OnWidgetActivationChanged(Widget* widget,
bool active) OVERRIDE { bool active) OVERRIDE {
if (active) { if (active) {
if (widget_activated_)
widget_activated_->Deactivate();
widget_activated_ = widget; widget_activated_ = widget;
active_ = widget; active_ = widget;
} else } else {
if (widget_activated_ == widget)
widget_activated_ = NULL;
widget_deactivated_ = widget; widget_deactivated_ = widget;
}
} }
virtual void OnWidgetVisibilityChanged(Widget* widget, virtual void OnWidgetVisibilityChanged(Widget* widget,
...@@ -633,9 +638,7 @@ class WidgetObserverTest : public WidgetTest, ...@@ -633,9 +638,7 @@ class WidgetObserverTest : public WidgetTest,
Widget* widget_hidden_; Widget* widget_hidden_;
}; };
// TODO: This test should be enabled when NativeWidgetViews::Activate is TEST_F(WidgetObserverTest, ActivationChange) {
// implemented.
TEST_F(WidgetObserverTest, DISABLED_ActivationChange) {
Widget* toplevel = CreateTopLevelPlatformWidget(); Widget* toplevel = CreateTopLevelPlatformWidget();
views_delegate.set_default_parent_view(toplevel->GetRootView()); views_delegate.set_default_parent_view(toplevel->GetRootView());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment