diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-26 19:04:46 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-26 19:04:46 +0000 |
commit | b6b19e26bb00c8e8bc4ab91b535520352fb009f9 (patch) | |
tree | cac19c6ed6138c8a3d80d90558a0f328b558101f /views | |
parent | 568f11038c851e25254b364c659504edc8a35d1d (diff) | |
download | chromium_src-b6b19e26bb00c8e8bc4ab91b535520352fb009f9.zip chromium_src-b6b19e26bb00c8e8bc4ab91b535520352fb009f9.tar.gz chromium_src-b6b19e26bb00c8e8bc4ab91b535520352fb009f9.tar.bz2 |
Rough cut at window activation.
http://crbug.com/84070
TEST=none
Review URL: http://codereview.chromium.org/7071017
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86869 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views')
-rw-r--r-- | views/desktop/desktop_window.cc | 36 | ||||
-rw-r--r-- | views/desktop/desktop_window.h | 8 | ||||
-rw-r--r-- | views/desktop/desktop_window_root_view.cc | 42 | ||||
-rw-r--r-- | views/desktop/desktop_window_root_view.h | 32 | ||||
-rw-r--r-- | views/views.gyp | 6 | ||||
-rw-r--r-- | views/widget/native_widget_view.cc | 12 | ||||
-rw-r--r-- | views/widget/native_widget_view.h | 5 | ||||
-rw-r--r-- | views/widget/native_widget_views.cc | 8 | ||||
-rw-r--r-- | views/widget/native_widget_views.h | 7 | ||||
-rw-r--r-- | views/widget/widget.cc | 8 | ||||
-rw-r--r-- | views/window/native_window_views.cc | 3 |
11 files changed, 155 insertions, 12 deletions
diff --git a/views/desktop/desktop_window.cc b/views/desktop/desktop_window.cc index e6c073b..15c9860 100644 --- a/views/desktop/desktop_window.cc +++ b/views/desktop/desktop_window.cc @@ -7,6 +7,8 @@ #include "ui/gfx/canvas.h" #include "ui/gfx/transform.h" #include "views/desktop/desktop_background.h" +#include "views/desktop/desktop_window_root_view.h" +#include "views/widget/native_widget_view.h" #include "views/window/native_window_views.h" #include "views/window/window.h" @@ -19,6 +21,24 @@ namespace views { namespace desktop { +// TODO(beng): resolve naming! +class DesktopWindowWindow : public Window { + public: + explicit DesktopWindowWindow(DesktopWindow* desktop_window) + : desktop_window_(desktop_window) {} + virtual ~DesktopWindowWindow() {} + + private: + // Overridden from Widget: + virtual internal::RootView* CreateRootView() OVERRIDE { + return new DesktopWindowRootView(desktop_window_, this); + } + + DesktopWindow* desktop_window_; + + DISALLOW_COPY_AND_ASSIGN(DesktopWindowWindow); +}; + class TestWindowContentView : public View, public WindowDelegate { public: @@ -51,7 +71,7 @@ class TestWindowContentView : public View, //////////////////////////////////////////////////////////////////////////////// // DesktopWindow, public: -DesktopWindow::DesktopWindow() { +DesktopWindow::DesktopWindow() : active_widget_(NULL) { set_background(new DesktopBackground); } @@ -61,7 +81,7 @@ DesktopWindow::~DesktopWindow() { // static void DesktopWindow::CreateDesktopWindow() { DesktopWindow* desktop = new DesktopWindow; - views::Window* window = new views::Window; + views::Window* window = new DesktopWindowWindow(desktop); views::Window::InitParams params(desktop); // In this environment, CreateChromeWindow will default to creating a views- // window, so we need to construct a NativeWindowWin by hand. @@ -81,6 +101,18 @@ void DesktopWindow::CreateDesktopWindow() { gfx::Rect(600, 650, 450, 300), false); } +void DesktopWindow::ActivateWidget(Widget* widget) { + if (widget && widget->IsActive()) + return; + + if (active_widget_) + active_widget_->OnActivate(false); + if (widget) { + active_widget_ = static_cast<NativeWidgetViews*>(widget->native_widget()); + active_widget_->OnActivate(true); + } +} + //////////////////////////////////////////////////////////////////////////////// // DesktopWindow, View overrides: diff --git a/views/desktop/desktop_window.h b/views/desktop/desktop_window.h index d15bde9..8cd943a 100644 --- a/views/desktop/desktop_window.h +++ b/views/desktop/desktop_window.h @@ -9,6 +9,8 @@ #include "views/window/window_delegate.h" namespace views { +class NativeWidgetViews; + namespace desktop { class DesktopWindow : public View, @@ -19,6 +21,10 @@ class DesktopWindow : public View, static void CreateDesktopWindow(); + // Changes activation to the specified Widget. The currently active Widget + // is de-activated. + void ActivateWidget(Widget* widget); + private: // Overridden from View: virtual void Layout() OVERRIDE; @@ -38,6 +44,8 @@ class DesktopWindow : public View, gfx::Rect initial_bounds, bool rotate); + NativeWidgetViews* active_widget_; + DISALLOW_COPY_AND_ASSIGN(DesktopWindow); }; diff --git a/views/desktop/desktop_window_root_view.cc b/views/desktop/desktop_window_root_view.cc new file mode 100644 index 0000000..5639cb5 --- /dev/null +++ b/views/desktop/desktop_window_root_view.cc @@ -0,0 +1,42 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "views/desktop/desktop_window_root_view.h" + +#include "views/desktop/desktop_window.h" +#include "views/widget/native_widget_view.h" +#include "views/window/window.h" + +namespace views { +namespace desktop { + +//////////////////////////////////////////////////////////////////////////////// +// DesktopWindowRootView, public: + +DesktopWindowRootView::DesktopWindowRootView(DesktopWindow* desktop_window, + Window* window) + : internal::RootView(window), + desktop_window_(desktop_window) { +} + +DesktopWindowRootView::~DesktopWindowRootView() { +} + +//////////////////////////////////////////////////////////////////////////////// +// DesktopWindowRootView, internal::RootView overrides: + +bool DesktopWindowRootView::OnMousePressed(const MouseEvent& event) { + View* target = GetEventHandlerForPoint(event.location()); + if (target->GetClassName() == internal::NativeWidgetView::kViewClassName) { + internal::NativeWidgetView* native_widget_view = + static_cast<internal::NativeWidgetView*>(target); + desktop_window_->ActivateWidget(native_widget_view->GetAssociatedWidget()); + } else { + desktop_window_->ActivateWidget(NULL); + } + return RootView::OnMousePressed(event); +} + +} // namespace desktop +} // namespace views diff --git a/views/desktop/desktop_window_root_view.h b/views/desktop/desktop_window_root_view.h new file mode 100644 index 0000000..9ad5f1c --- /dev/null +++ b/views/desktop/desktop_window_root_view.h @@ -0,0 +1,32 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef VIEWS_DESKTOP_DESKTOP_WINDOW_ROOT_VIEW_H_ +#define VIEWS_DESKTOP_DESKTOP_WINDOW_ROOT_VIEW_H_ + +#include "views/widget/root_view.h" + +namespace views { +namespace desktop { + +class DesktopWindow; + +class DesktopWindowRootView : public internal::RootView { + public: + DesktopWindowRootView(DesktopWindow* desktop_window, Window* window); + virtual ~DesktopWindowRootView(); + + private: + // Overridden from RootView: + virtual bool OnMousePressed(const MouseEvent& event) OVERRIDE; + + DesktopWindow* desktop_window_; + + DISALLOW_COPY_AND_ASSIGN(DesktopWindowRootView); +}; + +} // namespace desktop +} // namespace views + +#endif // VIEWS_DESKTOP_DESKTOP_WINDOW_ROOT_VIEW_H_ diff --git a/views/views.gyp b/views/views.gyp index fe4ccbd..ecac0e2b 100644 --- a/views/views.gyp +++ b/views/views.gyp @@ -647,13 +647,15 @@ '..', ], 'sources': [ + 'desktop/desktop_background.cc', + 'desktop/desktop_background.h', 'desktop/desktop_main.cc', 'desktop/desktop_views_delegate.cc', 'desktop/desktop_views_delegate.h', 'desktop/desktop_window.cc', 'desktop/desktop_window.h', - 'desktop/desktop_background.cc', - 'desktop/desktop_background.h', + 'desktop/desktop_window_root_view.cc', + 'desktop/desktop_window_root_view.h', '<(SHARED_INTERMEDIATE_DIR)/app/app_resources/app_resources.rc', '<(SHARED_INTERMEDIATE_DIR)/ui/gfx/gfx_resources.rc', ], diff --git a/views/widget/native_widget_view.cc b/views/widget/native_widget_view.cc index 525de8e..daaf2cc 100644 --- a/views/widget/native_widget_view.cc +++ b/views/widget/native_widget_view.cc @@ -12,6 +12,9 @@ namespace internal { //////////////////////////////////////////////////////////////////////////////// // NativeWidgetView, public: +// static +const char NativeWidgetView::kViewClassName[] = "views/NativeWidgetView"; + NativeWidgetView::NativeWidgetView(NativeWidgetViews* native_widget) : native_widget_(native_widget) { } @@ -19,6 +22,10 @@ NativeWidgetView::NativeWidgetView(NativeWidgetViews* native_widget) NativeWidgetView::~NativeWidgetView() { } +Widget* NativeWidgetView::GetAssociatedWidget() { + return native_widget_->delegate()->AsWidget(); +} + //////////////////////////////////////////////////////////////////////////////// // NativeWidgetView, View overrides: @@ -103,6 +110,11 @@ void NativeWidgetView::OnBlur() { //delegate()->OnNativeBlur(NULL); } +std::string NativeWidgetView::GetClassName() const { + return kViewClassName; +} + + } // namespace internal } // namespace views diff --git a/views/widget/native_widget_view.h b/views/widget/native_widget_view.h index 75084cd..84dcdca 100644 --- a/views/widget/native_widget_view.h +++ b/views/widget/native_widget_view.h @@ -25,9 +25,13 @@ namespace internal { // class NativeWidgetView : public View { public: + static const char kViewClassName[]; + explicit NativeWidgetView(NativeWidgetViews* native_widget); virtual ~NativeWidgetView(); + Widget* GetAssociatedWidget(); + private: // Overridden from View: virtual void ViewHierarchyChanged(bool is_add, @@ -50,6 +54,7 @@ class NativeWidgetView : public View { virtual bool OnMouseWheel(const MouseWheelEvent& event) OVERRIDE; virtual void OnFocus() OVERRIDE; virtual void OnBlur() OVERRIDE; + virtual std::string GetClassName() const OVERRIDE; internal::NativeWidgetDelegate* delegate() { return native_widget_->delegate(); diff --git a/views/widget/native_widget_views.cc b/views/widget/native_widget_views.cc index bff9bde..d1bc2d5 100644 --- a/views/widget/native_widget_views.cc +++ b/views/widget/native_widget_views.cc @@ -17,6 +17,7 @@ NativeWidgetViews::NativeWidgetViews(View* host, : delegate_(delegate), view_(NULL), host_view_(host), + active_(false), ALLOW_THIS_IN_INITIALIZER_LIST(close_widget_factory_(this)) { } @@ -31,6 +32,11 @@ const View* NativeWidgetViews::GetView() const { return view_; } +void NativeWidgetViews::OnActivate(bool active) { + active_ = active; + view_->SchedulePaint(); +} + //////////////////////////////////////////////////////////////////////////////// // NativeWidgetViews, NativeWidget implementation: @@ -184,7 +190,7 @@ bool NativeWidgetViews::IsVisible() const { } bool NativeWidgetViews::IsActive() const { - return view_->HasFocus(); + return active_; } bool NativeWidgetViews::IsAccessibleWidget() const { diff --git a/views/widget/native_widget_views.h b/views/widget/native_widget_views.h index 5089d59..63a5908 100644 --- a/views/widget/native_widget_views.h +++ b/views/widget/native_widget_views.h @@ -28,9 +28,11 @@ class NativeWidgetViews : public NativeWidget { View* GetView(); const View* GetView() const; + void OnActivate(bool active); + internal::NativeWidgetDelegate* delegate() { return delegate_; } - private: + protected: // Overridden from NativeWidget: virtual void InitNativeWidget(const Widget::InitParams& params) OVERRIDE; virtual Widget* GetWidget() OVERRIDE; @@ -76,6 +78,7 @@ class NativeWidgetViews : public NativeWidget { virtual void SchedulePaintInRect(const gfx::Rect& rect) OVERRIDE; virtual void SetCursor(gfx::NativeCursor cursor) OVERRIDE; + private: NativeWidget* GetParentNativeWidget(); const NativeWidget* GetParentNativeWidget() const; @@ -85,6 +88,8 @@ class NativeWidgetViews : public NativeWidget { View* host_view_; + bool active_; + // The following factory is used for calls to close the NativeWidgetViews // instance. ScopedRunnableMethodFactory<NativeWidgetViews> close_widget_factory_; diff --git a/views/widget/widget.cc b/views/widget/widget.cc index ad537f1..8b4e793 100644 --- a/views/widget/widget.cc +++ b/views/widget/widget.cc @@ -213,6 +213,10 @@ void Widget::Hide() { native_widget_->Hide(); } +bool Widget::IsActive() const { + return native_widget_->IsActive(); +} + void Widget::SetOpacity(unsigned char opacity) { native_widget_->SetOpacity(opacity); } @@ -233,10 +237,6 @@ bool Widget::IsVisible() const { return native_widget_->IsVisible(); } -bool Widget::IsActive() const { - return native_widget_->IsActive(); -} - bool Widget::IsAccessibleWidget() const { return native_widget_->IsAccessibleWidget(); } diff --git a/views/window/native_window_views.cc b/views/window/native_window_views.cc index 3957835..156338b 100644 --- a/views/window/native_window_views.cc +++ b/views/window/native_window_views.cc @@ -117,8 +117,7 @@ void NativeWindowViews::Restore() { } bool NativeWindowViews::IsActive() const { - NOTIMPLEMENTED(); - return false; + return NativeWidgetViews::IsActive(); } bool NativeWindowViews::IsVisible() const { |