summaryrefslogtreecommitdiffstats
path: root/views/desktop
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-26 19:04:46 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-26 19:04:46 +0000
commitb6b19e26bb00c8e8bc4ab91b535520352fb009f9 (patch)
treecac19c6ed6138c8a3d80d90558a0f328b558101f /views/desktop
parent568f11038c851e25254b364c659504edc8a35d1d (diff)
downloadchromium_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/desktop')
-rw-r--r--views/desktop/desktop_window.cc36
-rw-r--r--views/desktop/desktop_window.h8
-rw-r--r--views/desktop/desktop_window_root_view.cc42
-rw-r--r--views/desktop/desktop_window_root_view.h32
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_