summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-21 16:12:34 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-21 16:12:34 +0000
commit3aa90ad5278b3e021dd4477bd0199dce6b2272ea (patch)
treeb4f5f778cb60fe18f88e0491e988a2c1ec6d08ad
parentb0ea7a8229abf2401cdfd75024ceeed829038883 (diff)
downloadchromium_src-3aa90ad5278b3e021dd4477bd0199dce6b2272ea.zip
chromium_src-3aa90ad5278b3e021dd4477bd0199dce6b2272ea.tar.gz
chromium_src-3aa90ad5278b3e021dd4477bd0199dce6b2272ea.tar.bz2
Change NativeWidgetViews' constructor to not take a parent View. The embedding environment provides this instead via a new ViewsDelegate method: GetDefaultParentView().
This makes the constructors of NativeWidgetViews compatible with the other platforms and allows all of the existing construction patterns to be preserved (there is not a clear way to wire a desktop view through to all of them). BUG=none TEST=none Review URL: http://codereview.chromium.org/7204041 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@89832 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/ui/views/accessibility_event_router_views_unittest.cc19
-rw-r--r--chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc19
-rw-r--r--chrome/browser/ui/views/chrome_views_delegate.cc4
-rw-r--r--chrome/browser/ui/views/chrome_views_delegate.h1
-rw-r--r--views/desktop/desktop_views_delegate.cc5
-rw-r--r--views/desktop/desktop_views_delegate.h1
-rw-r--r--views/desktop/desktop_window.cc31
-rw-r--r--views/desktop/desktop_window.h2
-rw-r--r--views/examples/native_widget_views_example.cc3
-rw-r--r--views/test/test_views_delegate.h11
-rw-r--r--views/views_delegate.h6
-rw-r--r--views/widget/native_widget_gtk.cc3
-rw-r--r--views/widget/native_widget_views.cc10
-rw-r--r--views/widget/native_widget_views.h4
-rw-r--r--views/widget/native_widget_win.cc3
-rw-r--r--views/widget/widget.h10
16 files changed, 75 insertions, 57 deletions
diff --git a/chrome/browser/ui/views/accessibility_event_router_views_unittest.cc b/chrome/browser/ui/views/accessibility_event_router_views_unittest.cc
index d46c658..e984655 100644
--- a/chrome/browser/ui/views/accessibility_event_router_views_unittest.cc
+++ b/chrome/browser/ui/views/accessibility_event_router_views_unittest.cc
@@ -29,24 +29,25 @@ class AccessibilityViewsDelegate : public views::ViewsDelegate {
virtual ~AccessibilityViewsDelegate() {}
// Overridden from views::ViewsDelegate:
- virtual ui::Clipboard* GetClipboard() const { return NULL; }
+ virtual ui::Clipboard* GetClipboard() const OVERRIDE { return NULL; }
+ virtual views::View* GetDefaultParentView() OVERRIDE { return NULL; }
virtual void SaveWindowPlacement(const views::Widget* window,
const std::wstring& window_name,
const gfx::Rect& bounds,
- bool maximized) {
+ bool maximized) OVERRIDE {
}
virtual bool GetSavedWindowBounds(const views::Widget* window,
const std::wstring& window_name,
- gfx::Rect* bounds) const {
+ gfx::Rect* bounds) const OVERRIDE {
return false;
}
virtual bool GetSavedMaximizedState(const views::Widget* window,
const std::wstring& window_name,
- bool* maximized) const {
+ bool* maximized) const OVERRIDE {
return false;
}
virtual void NotifyAccessibilityEvent(
- views::View* view, ui::AccessibilityTypes::Event event_type) {
+ views::View* view, ui::AccessibilityTypes::Event event_type) OVERRIDE {
AccessibilityEventRouterViews::GetInstance()->HandleAccessibilityEvent(
view, event_type);
}
@@ -55,14 +56,14 @@ class AccessibilityViewsDelegate : public views::ViewsDelegate {
const std::wstring& menu_item_name,
int item_index,
int item_count,
- bool has_submenu) {}
+ bool has_submenu) OVERRIDE {}
#if defined(OS_WIN)
- virtual HICON GetDefaultWindowIcon() const {
+ virtual HICON GetDefaultWindowIcon() const OVERRIDE {
return NULL;
}
#endif
- virtual void AddRef() {}
- virtual void ReleaseRef() {}
+ virtual void AddRef() OVERRIDE {}
+ virtual void ReleaseRef() OVERRIDE {}
virtual int GetDispositionForEvent(int event_flags) OVERRIDE {
return 0;
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc
index fc01da5..997da22 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc
@@ -65,39 +65,40 @@ namespace {
class ViewsDelegateImpl : public views::ViewsDelegate {
public:
ViewsDelegateImpl() {}
- virtual ui::Clipboard* GetClipboard() const { return NULL; }
+ virtual ui::Clipboard* GetClipboard() const OVERRIDE { return NULL; }
+ virtual views::View* GetDefaultParentView() OVERRIDE { return NULL; }
virtual void SaveWindowPlacement(const views::Widget* window,
const std::wstring& window_name,
const gfx::Rect& bounds,
- bool maximized) {}
+ bool maximized) OVERRIDE {}
virtual bool GetSavedWindowBounds(const views::Widget* window,
const std::wstring& window_name,
- gfx::Rect* bounds) const {
+ gfx::Rect* bounds) const OVERRIDE {
return false;
}
virtual bool GetSavedMaximizedState(const views::Widget* window,
const std::wstring& window_name,
- bool* maximized) const {
+ bool* maximized) const OVERRIDE {
return false;
}
virtual void NotifyAccessibilityEvent(
- views::View* view, ui::AccessibilityTypes::Event event_type) {}
+ views::View* view, ui::AccessibilityTypes::Event event_type) OVERRIDE {}
virtual void NotifyMenuItemFocused(
const std::wstring& menu_name,
const std::wstring& menu_item_name,
int item_index,
int item_count,
- bool has_submenu) {}
+ bool has_submenu) OVERRIDE {}
#if defined(OS_WIN)
- virtual HICON GetDefaultWindowIcon() const { return 0; }
+ virtual HICON GetDefaultWindowIcon() const OVERRIDE { return 0; }
#endif
- virtual void AddRef() {
+ virtual void AddRef() OVERRIDE {
}
- virtual void ReleaseRef() {
+ virtual void ReleaseRef() OVERRIDE {
MessageLoopForUI::current()->Quit();
}
diff --git a/chrome/browser/ui/views/chrome_views_delegate.cc b/chrome/browser/ui/views/chrome_views_delegate.cc
index 59a2e80..c1d6b4d 100644
--- a/chrome/browser/ui/views/chrome_views_delegate.cc
+++ b/chrome/browser/ui/views/chrome_views_delegate.cc
@@ -51,6 +51,10 @@ ui::Clipboard* ChromeViewsDelegate::GetClipboard() const {
return g_browser_process->clipboard();
}
+views::View* ChromeViewsDelegate::GetDefaultParentView() {
+ return NULL;
+}
+
void ChromeViewsDelegate::SaveWindowPlacement(const views::Widget* window,
const std::wstring& window_name,
const gfx::Rect& bounds,
diff --git a/chrome/browser/ui/views/chrome_views_delegate.h b/chrome/browser/ui/views/chrome_views_delegate.h
index 210ee06..2e67236 100644
--- a/chrome/browser/ui/views/chrome_views_delegate.h
+++ b/chrome/browser/ui/views/chrome_views_delegate.h
@@ -19,6 +19,7 @@ class ChromeViewsDelegate : public views::ViewsDelegate {
// Overridden from views::ViewsDelegate:
virtual ui::Clipboard* GetClipboard() const OVERRIDE;
+ virtual views::View* GetDefaultParentView() OVERRIDE;
virtual void SaveWindowPlacement(const views::Widget* window,
const std::wstring& window_name,
const gfx::Rect& bounds,
diff --git a/views/desktop/desktop_views_delegate.cc b/views/desktop/desktop_views_delegate.cc
index 98adee5..371ace8 100644
--- a/views/desktop/desktop_views_delegate.cc
+++ b/views/desktop/desktop_views_delegate.cc
@@ -5,6 +5,7 @@
#include "views/desktop/desktop_views_delegate.h"
#include "base/logging.h"
+#include "views/desktop/desktop_window.h"
namespace views {
namespace desktop {
@@ -27,6 +28,10 @@ ui::Clipboard* DesktopViewsDelegate::GetClipboard() const {
return NULL;
}
+View* DesktopViewsDelegate::GetDefaultParentView() {
+ return DesktopWindow::desktop_window;
+}
+
void DesktopViewsDelegate::SaveWindowPlacement(const Widget* widget,
const std::wstring& window_name,
const gfx::Rect& bounds,
diff --git a/views/desktop/desktop_views_delegate.h b/views/desktop/desktop_views_delegate.h
index cf7fa3d..59aac67 100644
--- a/views/desktop/desktop_views_delegate.h
+++ b/views/desktop/desktop_views_delegate.h
@@ -19,6 +19,7 @@ class DesktopViewsDelegate : public ViewsDelegate {
private:
// Overridden from ViewsDelegate:
virtual ui::Clipboard* GetClipboard() const OVERRIDE;
+ virtual View* GetDefaultParentView() OVERRIDE;
virtual void SaveWindowPlacement(const Widget* widget,
const std::wstring& window_name,
const gfx::Rect& bounds,
diff --git a/views/desktop/desktop_window.cc b/views/desktop/desktop_window.cc
index 773d34c..e26788a 100644
--- a/views/desktop/desktop_window.cc
+++ b/views/desktop/desktop_window.cc
@@ -70,6 +70,9 @@ class TestWindowContentView : public WidgetDelegateView {
////////////////////////////////////////////////////////////////////////////////
// DesktopWindow, public:
+// static
+DesktopWindow* DesktopWindow::desktop_window = NULL;
+
DesktopWindow::DesktopWindow() : active_widget_(NULL) {
set_background(new DesktopBackground);
}
@@ -79,10 +82,11 @@ DesktopWindow::~DesktopWindow() {
// static
void DesktopWindow::CreateDesktopWindow() {
- DesktopWindow* desktop = new DesktopWindow;
- views::Widget* window = new DesktopWindowWindow(desktop);
+ DCHECK(!desktop_window);
+ desktop_window = new DesktopWindow;
+ views::Widget* window = new DesktopWindowWindow(desktop_window);
views::Widget::InitParams params;
- params.delegate = desktop;
+ params.delegate = desktop_window;
// In this environment, CreateChromeWindow will default to creating a views-
// window, so we need to construct a NativeWidgetWin by hand.
// TODO(beng): Replace this with NativeWindow::CreateNativeRootWindow().
@@ -95,10 +99,10 @@ void DesktopWindow::CreateDesktopWindow() {
window->Init(params);
window->Show();
- desktop->CreateTestWindow(L"Sample Window 1", SK_ColorWHITE,
- gfx::Rect(500, 200, 400, 400), true);
- desktop->CreateTestWindow(L"Sample Window 2", SK_ColorRED,
- gfx::Rect(600, 450, 450, 300), false);
+ desktop_window->CreateTestWindow(L"Sample Window 1", SK_ColorWHITE,
+ gfx::Rect(500, 200, 400, 400), true);
+ desktop_window->CreateTestWindow(L"Sample Window 2", SK_ColorRED,
+ gfx::Rect(600, 450, 450, 300), false);
}
void DesktopWindow::ActivateWidget(Widget* widget) {
@@ -162,20 +166,17 @@ void DesktopWindow::CreateTestWindow(const std::wstring& title,
SkColor color,
gfx::Rect initial_bounds,
bool rotate) {
- views::Widget* window = new views::Widget;
- views::NativeWidgetViews* nwv = new views::NativeWidgetViews(this, window);
- views::Widget::InitParams params;
- params.delegate = new TestWindowContentView(title, color);
- params.native_widget = nwv;
- params.bounds = initial_bounds;
- window->Init(params);
+ views::Widget* window = views::Widget::CreateWindowWithBounds(
+ new TestWindowContentView(title, color),
+ initial_bounds);
window->Show();
if (rotate) {
ui::Transform transform;
transform.SetRotate(90.0f);
transform.SetTranslateX(window->GetWindowScreenBounds().width());
- nwv->GetView()->SetTransform(transform);
+ static_cast<NativeWidgetViews*>(window->native_widget())->GetView()->
+ SetTransform(transform);
}
}
diff --git a/views/desktop/desktop_window.h b/views/desktop/desktop_window.h
index eb49f44..9012939 100644
--- a/views/desktop/desktop_window.h
+++ b/views/desktop/desktop_window.h
@@ -15,6 +15,8 @@ namespace desktop {
class DesktopWindow : public WidgetDelegateView {
public:
+ static DesktopWindow* desktop_window;
+
DesktopWindow();
virtual ~DesktopWindow();
diff --git a/views/examples/native_widget_views_example.cc b/views/examples/native_widget_views_example.cc
index 8aaf68f..067cf01 100644
--- a/views/examples/native_widget_views_example.cc
+++ b/views/examples/native_widget_views_example.cc
@@ -66,8 +66,7 @@ std::wstring NativeWidgetViewsExample::GetExampleTitle() {
void NativeWidgetViewsExample::CreateExampleView(views::View* container) {
views::Widget* widget = new views::Widget;
- views::NativeWidgetViews* nwv =
- new views::NativeWidgetViews(container, widget);
+ views::NativeWidgetViews* nwv = new views::NativeWidgetViews(widget);
views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL);
params.native_widget = nwv;
widget->Init(params);
diff --git a/views/test/test_views_delegate.h b/views/test/test_views_delegate.h
index 45a2341..7f54967 100644
--- a/views/test/test_views_delegate.h
+++ b/views/test/test_views_delegate.h
@@ -10,7 +10,9 @@
#include "ui/base/clipboard/clipboard.h"
#include "views/views_delegate.h"
+// TODO(beng): this whole file should be in the views namespace.
namespace views {
+class View;
class Widget;
}
@@ -20,18 +22,19 @@ class TestViewsDelegate : public views::ViewsDelegate {
virtual ~TestViewsDelegate();
// Overridden from views::ViewsDelegate:
- virtual ui::Clipboard* GetClipboard() const;
+ virtual ui::Clipboard* GetClipboard() const OVERRIDE;
+ virtual views::View* GetDefaultParentView() OVERRIDE { return NULL; }
virtual void SaveWindowPlacement(const views::Widget* window,
const std::wstring& window_name,
const gfx::Rect& bounds,
bool maximized) OVERRIDE { }
virtual bool GetSavedWindowBounds(const views::Widget* window,
const std::wstring& window_name,
- gfx::Rect* bounds) const;
+ gfx::Rect* bounds) const OVERRIDE;
virtual bool GetSavedMaximizedState(const views::Widget* window,
const std::wstring& window_name,
- bool* maximized) const;
+ bool* maximized) const OVERRIDE;
virtual void NotifyAccessibilityEvent(
views::View* view, ui::AccessibilityTypes::Event event_type) OVERRIDE {}
@@ -41,7 +44,7 @@ class TestViewsDelegate : public views::ViewsDelegate {
const std::wstring& menu_item_name,
int item_index,
int item_count,
- bool has_submenu) {}
+ bool has_submenu) OVERRIDE {}
#if defined(OS_WIN)
virtual HICON GetDefaultWindowIcon() const OVERRIDE {
return NULL;
diff --git a/views/views_delegate.h b/views/views_delegate.h
index e9f9113..112f3b8 100644
--- a/views/views_delegate.h
+++ b/views/views_delegate.h
@@ -39,6 +39,12 @@ class ViewsDelegate {
// Gets the clipboard.
virtual ui::Clipboard* GetClipboard() const = 0;
+ // Returns the View that all synthetic widgets created without a specified
+ // parent will be parented to if they do not specify a parent in their
+ // InitParams, or NULL if they should have no parent.
+ // TODO(beng): perhaps this should be a Widget.
+ virtual View* GetDefaultParentView() = 0;
+
// Saves the position, size and maximized state for the window with the
// specified name.
virtual void SaveWindowPlacement(const Widget* widget,
diff --git a/views/widget/native_widget_gtk.cc b/views/widget/native_widget_gtk.cc
index 6fc908f..a73708a 100644
--- a/views/widget/native_widget_gtk.cc
+++ b/views/widget/native_widget_gtk.cc
@@ -35,6 +35,7 @@
#include "views/widget/drop_target_gtk.h"
#include "views/widget/gtk_views_fixed.h"
#include "views/widget/gtk_views_window.h"
+#include "views/widget/native_widget_views.h"
#include "views/widget/tooltip_manager_gtk.h"
#include "views/widget/widget_delegate.h"
#include "views/window/hit_test.h"
@@ -2011,6 +2012,8 @@ namespace internal {
// static
NativeWidgetPrivate* NativeWidgetPrivate::CreateNativeWidget(
NativeWidgetDelegate* delegate) {
+ if (Widget::IsPureViews() && delegate->GetDefaultParentView())
+ return new NativeWidgetViews(delegate);
return new NativeWidgetGtk(delegate);
}
diff --git a/views/widget/native_widget_views.cc b/views/widget/native_widget_views.cc
index aaefa1a..dede2f5 100644
--- a/views/widget/native_widget_views.cc
+++ b/views/widget/native_widget_views.cc
@@ -5,6 +5,7 @@
#include "views/widget/native_widget_views.h"
#include "views/view.h"
+#include "views/views_delegate.h"
#include "views/widget/native_widget_view.h"
namespace views {
@@ -12,11 +13,9 @@ namespace views {
////////////////////////////////////////////////////////////////////////////////
// NativeWidgetViews, public:
-NativeWidgetViews::NativeWidgetViews(View* host,
- internal::NativeWidgetDelegate* delegate)
+NativeWidgetViews::NativeWidgetViews(internal::NativeWidgetDelegate* delegate)
: delegate_(delegate),
view_(NULL),
- host_view_(host),
active_(false),
ALLOW_THIS_IN_INITIALIZER_LIST(close_widget_factory_(this)) {
}
@@ -43,7 +42,8 @@ void NativeWidgetViews::OnActivate(bool active) {
void NativeWidgetViews::InitNativeWidget(const Widget::InitParams& params) {
view_ = new internal::NativeWidgetView(this);
view_->SetPaintToTexture(true);
- host_view_->AddChildView(view_);
+ View* desktop_view = ViewsDelegate::views_delegate->GetDefaultParentView();
+ desktop_view->AddChildView(view_);
// TODO(beng): handle parenting.
// TODO(beng): SetInitParams().
@@ -204,7 +204,7 @@ void NativeWidgetViews::MoveAbove(gfx::NativeView native_view) {
}
void NativeWidgetViews::MoveToTop() {
- host_view_->ReorderChildView(view_, -1);
+ view_->parent()->ReorderChildView(view_, -1);
}
void NativeWidgetViews::SetShape(gfx::NativeRegion region) {
diff --git a/views/widget/native_widget_views.h b/views/widget/native_widget_views.h
index 34809a3..533a96a 100644
--- a/views/widget/native_widget_views.h
+++ b/views/widget/native_widget_views.h
@@ -21,7 +21,7 @@ class NativeWidgetView;
//
class NativeWidgetViews : public internal::NativeWidgetPrivate {
public:
- NativeWidgetViews(View* host, internal::NativeWidgetDelegate* delegate);
+ explicit NativeWidgetViews(internal::NativeWidgetDelegate* delegate);
virtual ~NativeWidgetViews();
// TODO(beng): remove.
@@ -114,8 +114,6 @@ class NativeWidgetViews : public internal::NativeWidgetPrivate {
internal::NativeWidgetView* view_;
- View* host_view_;
-
bool active_;
// The following factory is used for calls to close the NativeWidgetViews
diff --git a/views/widget/native_widget_win.cc b/views/widget/native_widget_win.cc
index 588a172..113200f 100644
--- a/views/widget/native_widget_win.cc
+++ b/views/widget/native_widget_win.cc
@@ -39,6 +39,7 @@
#include "views/widget/child_window_message_processor.h"
#include "views/widget/drop_target_win.h"
#include "views/widget/native_widget_delegate.h"
+#include "views/widget/native_widget_views.h"
#include "views/widget/root_view.h"
#include "views/widget/widget_delegate.h"
#include "views/window/native_frame_view.h"
@@ -2412,6 +2413,8 @@ namespace internal {
// static
NativeWidgetPrivate* NativeWidgetPrivate::CreateNativeWidget(
internal::NativeWidgetDelegate* delegate) {
+ if (Widget::IsPureViews() && delegate->GetDefaultParentView())
+ return new NativeWidgetViews(delegate);
return new NativeWidgetWin(delegate);
}
diff --git a/views/widget/widget.h b/views/widget/widget.h
index a320a07..9af8da2 100644
--- a/views/widget/widget.h
+++ b/views/widget/widget.h
@@ -215,10 +215,6 @@ class Widget : public internal::NativeWidgetDelegate,
void Init(const InitParams& params);
- // Unconverted methods -------------------------------------------------------
-
- // TODO(beng): reorder, they've been converted now.
-
// Returns the gfx::NativeView associated with this Widget.
gfx::NativeView GetNativeView() const;
@@ -238,12 +234,6 @@ class Widget : public internal::NativeWidgetDelegate,
void NotifyNativeViewHierarchyChanged(bool attached,
gfx::NativeView native_view);
- // Converted methods ---------------------------------------------------------
-
- // TODO(beng):
- // Widget subclasses are implementing these methods by implementing
- // NativeWidget. Remove this comment once complete.
-
// Returns the topmost Widget in a hierarchy. Will return NULL if called
// before the underlying Native Widget has been initialized.
Widget* GetTopLevelWidget();