diff options
Diffstat (limited to 'views/desktop')
-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 |
4 files changed, 116 insertions, 2 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_ |