diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-21 16:12:34 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-21 16:12:34 +0000 |
commit | 3aa90ad5278b3e021dd4477bd0199dce6b2272ea (patch) | |
tree | b4f5f778cb60fe18f88e0491e988a2c1ec6d08ad | |
parent | b0ea7a8229abf2401cdfd75024ceeed829038883 (diff) | |
download | chromium_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.cc | 19 | ||||
-rw-r--r-- | chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc | 19 | ||||
-rw-r--r-- | chrome/browser/ui/views/chrome_views_delegate.cc | 4 | ||||
-rw-r--r-- | chrome/browser/ui/views/chrome_views_delegate.h | 1 | ||||
-rw-r--r-- | views/desktop/desktop_views_delegate.cc | 5 | ||||
-rw-r--r-- | views/desktop/desktop_views_delegate.h | 1 | ||||
-rw-r--r-- | views/desktop/desktop_window.cc | 31 | ||||
-rw-r--r-- | views/desktop/desktop_window.h | 2 | ||||
-rw-r--r-- | views/examples/native_widget_views_example.cc | 3 | ||||
-rw-r--r-- | views/test/test_views_delegate.h | 11 | ||||
-rw-r--r-- | views/views_delegate.h | 6 | ||||
-rw-r--r-- | views/widget/native_widget_gtk.cc | 3 | ||||
-rw-r--r-- | views/widget/native_widget_views.cc | 10 | ||||
-rw-r--r-- | views/widget/native_widget_views.h | 4 | ||||
-rw-r--r-- | views/widget/native_widget_win.cc | 3 | ||||
-rw-r--r-- | views/widget/widget.h | 10 |
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(); |