diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-03 20:15:03 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-03 20:15:03 +0000 |
commit | 9861ae9e58cee87e1780ba00e2887a5f855a8ddf (patch) | |
tree | aad2eea2e0b5c9ab8395d50c75eab2dc256daf10 /views/widget/widget.cc | |
parent | 44b871fde45eacd5e843740a6c74e7cf6948da23 (diff) | |
download | chromium_src-9861ae9e58cee87e1780ba00e2887a5f855a8ddf.zip chromium_src-9861ae9e58cee87e1780ba00e2887a5f855a8ddf.tar.gz chromium_src-9861ae9e58cee87e1780ba00e2887a5f855a8ddf.tar.bz2 |
Clean up more of Widget.
- Move cross platform code to Widget.
- Move platform-specific code into focused Widget* implementations.
BUG=72040
TEST=existing
Review URL: http://codereview.chromium.org/6609023
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76790 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/widget/widget.cc')
-rw-r--r-- | views/widget/widget.cc | 88 |
1 files changed, 50 insertions, 38 deletions
diff --git a/views/widget/widget.cc b/views/widget/widget.cc index 1455d5f..18f39fb 100644 --- a/views/widget/widget.cc +++ b/views/widget/widget.cc @@ -14,7 +14,10 @@ namespace views { //////////////////////////////////////////////////////////////////////////////// // Widget, public: -Widget::Widget() : native_widget_(NULL), delegate_(NULL) { +Widget::Widget() + : native_widget_(NULL), + widget_delegate_(NULL), + dragged_view_(NULL) { } Widget::~Widget() { @@ -40,14 +43,6 @@ const Widget* Widget::GetTopLevelWidget() const { return native_widget ? native_widget->GetWidget() : NULL; } -WidgetDelegate* Widget::GetWidgetDelegate() { - return delegate_; -} - -void Widget::SetWidgetDelegate(WidgetDelegate* delegate) { - delegate_ = delegate; -} - void Widget::SetContentsView(View* view) { root_view_->SetContentsView(view); } @@ -114,10 +109,6 @@ bool Widget::IsAccessibleWidget() const { void Widget::GenerateMousePressedForView(View* view, const gfx::Point& point) { } -TooltipManager* Widget::GetTooltipManager() { - return NULL; -} - bool Widget::GetAccelerator(int cmd_id, ui::Accelerator* accelerator) { return false; } @@ -131,10 +122,18 @@ const Window* Widget::GetWindow() const { } ThemeProvider* Widget::GetThemeProvider() const { - return NULL; -} - -ThemeProvider* Widget::GetDefaultThemeProvider() const { + const Widget* root_widget = GetTopLevelWidget(); + if (root_widget && root_widget != this) { + // Attempt to get the theme provider, and fall back to the default theme + // provider if not found. + ThemeProvider* provider = root_widget->GetThemeProvider(); + if (provider) + return provider; + + provider = root_widget->default_theme_provider_.get(); + if (provider) + return provider; + } return default_theme_provider_.get(); } @@ -143,25 +142,38 @@ FocusManager* Widget::GetFocusManager() { } void Widget::ViewHierarchyChanged(bool is_add, View* parent, View* child) { + if (!is_add && child == dragged_view_) + dragged_view_ = NULL; } bool Widget::ContainsNativeView(gfx::NativeView native_view) { - return false; -} - -void Widget::StartDragForViewFromMouseEvent(View* view, - const ui::OSExchangeData& data, - int operation) { -} - -View* Widget::GetDraggedView() { - return NULL; + if (native_widget_->ContainsNativeView(native_view)) + return true; + + // A views::NativeViewHost may contain the given native view, without it being + // an ancestor of hwnd(), so traverse the views::View hierarchy looking for + // such views. + return GetRootView()->ContainsNativeView(native_view); +} + +void Widget::RunShellDrag(View* view, const ui::OSExchangeData& data, + int operation) { + dragged_view_ = view; + native_widget_->RunShellDrag(view, data, operation); + // If the view is removed during the drag operation, dragged_view_ is set to + // NULL. + if (view && dragged_view_ == view) { + dragged_view_ = NULL; + view->OnDragDone(); + } } void Widget::SchedulePaintInRect(const gfx::Rect& rect) { + native_widget_->SchedulePaintInRect(rect); } void Widget::SetCursor(gfx::NativeCursor cursor) { + native_widget_->SetCursor(cursor); } FocusTraversable* Widget::GetFocusTraversable() { @@ -185,17 +197,6 @@ void Widget::SetFocusTraversableParentView(View* parent_view) { } //////////////////////////////////////////////////////////////////////////////// -// Widget, protected: - -RootView* Widget::CreateRootView() { - return new RootView(this); -} - -void Widget::DestroyRootView() { - root_view_.reset(); -} - -//////////////////////////////////////////////////////////////////////////////// // Widget, FocusTraversable implementation: FocusSearch* Widget::GetFocusSearch() { @@ -216,4 +217,15 @@ View* Widget::GetFocusTraversableParentView() { return NULL; } +//////////////////////////////////////////////////////////////////////////////// +// Widget, protected: + +RootView* Widget::CreateRootView() { + return new RootView(this); +} + +void Widget::DestroyRootView() { + root_view_.reset(); +} + } // namespace views |