summaryrefslogtreecommitdiffstats
path: root/views/widget/widget.cc
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-03 20:15:03 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-03 20:15:03 +0000
commit9861ae9e58cee87e1780ba00e2887a5f855a8ddf (patch)
treeaad2eea2e0b5c9ab8395d50c75eab2dc256daf10 /views/widget/widget.cc
parent44b871fde45eacd5e843740a6c74e7cf6948da23 (diff)
downloadchromium_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.cc88
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