summaryrefslogtreecommitdiffstats
path: root/views/widget/widget.cc
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-13 19:03:31 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-13 19:03:31 +0000
commit9a56a0d8a1304ce392580319a066c0c1857a210e (patch)
tree188158d67d2446f7969f2dff588a6cfa02968974 /views/widget/widget.cc
parent1357ae79b9d474da177632a85227efb676c6d98e (diff)
downloadchromium_src-9a56a0d8a1304ce392580319a066c0c1857a210e.zip
chromium_src-9a56a0d8a1304ce392580319a066c0c1857a210e.tar.gz
chromium_src-9a56a0d8a1304ce392580319a066c0c1857a210e.tar.bz2
Re-land:
Split the hierarchy. Now with AutocompletePopup implementing SupportsWeakPtr as before. This fixes the Windows XP crashes in browser_tests. BUG=72040 TEST=none Review URL: http://codereview.chromium.org/7015051 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85298 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/widget/widget.cc')
-rw-r--r--views/widget/widget.cc59
1 files changed, 48 insertions, 11 deletions
diff --git a/views/widget/widget.cc b/views/widget/widget.cc
index a7c03d9..e02f8f9d 100644
--- a/views/widget/widget.cc
+++ b/views/widget/widget.cc
@@ -9,6 +9,7 @@
#include "ui/gfx/compositor/compositor.h"
#include "views/focus/view_storage.h"
#include "views/ime/input_method.h"
+#include "views/views_delegate.h"
#include "views/widget/default_theme_provider.h"
#include "views/widget/root_view.h"
#include "views/widget/native_widget.h"
@@ -21,6 +22,7 @@ namespace views {
Widget::InitParams::InitParams()
: type(TYPE_WINDOW),
child(false),
+ transient(false),
transparent(false),
accept_events(true),
can_activate(true),
@@ -37,6 +39,7 @@ Widget::InitParams::InitParams()
Widget::InitParams::InitParams(Type type)
: type(type),
child(type == TYPE_CONTROL),
+ transient(type == TYPE_POPUP || type == TYPE_MENU),
transparent(false),
accept_events(true),
can_activate(type != TYPE_POPUP && type != TYPE_MENU),
@@ -63,41 +66,50 @@ Widget::Widget()
last_mouse_event_was_move_(false),
native_widget_(NULL),
widget_delegate_(NULL),
- dragged_view_(NULL) {
+ dragged_view_(NULL),
+ delete_on_destroy_(false),
+ is_secondary_widget_(true) {
}
Widget::~Widget() {
+ DestroyRootView();
+
+ if (!delete_on_destroy_)
+ delete native_widget_;
}
void Widget::Init(const InitParams& params) {
+ delete_on_destroy_ = params.delete_on_destroy;
+ native_widget_ =
+ params.native_widget ? params.native_widget
+ : NativeWidget::CreateNativeWidget(this);
GetRootView();
default_theme_provider_.reset(new DefaultThemeProvider);
+ if (params.type == InitParams::TYPE_MENU)
+ is_mouse_button_pressed_ = native_widget_->IsMouseButtonDown();
native_widget_->InitNativeWidget(params);
}
// Unconverted methods (see header) --------------------------------------------
gfx::NativeView Widget::GetNativeView() const {
- return NULL;
+ return native_widget_->GetNativeView();
}
gfx::NativeWindow Widget::GetNativeWindow() const {
- return NULL;
-}
-
-void Widget::GenerateMousePressedForView(View* view, const gfx::Point& point) {
+ return native_widget_->GetNativeWindow();
}
bool Widget::GetAccelerator(int cmd_id, ui::Accelerator* accelerator) {
return false;
}
-Window* Widget::GetWindow() {
- return NULL;
+Window* Widget::GetContainingWindow() {
+ return native_widget_->GetContainingWindow();
}
-const Window* Widget::GetWindow() const {
- return NULL;
+const Window* Widget::GetContainingWindow() const {
+ return native_widget_->GetContainingWindow();
}
void Widget::ViewHierarchyChanged(bool is_add, View* parent, View* child) {
@@ -108,7 +120,8 @@ void Widget::ViewHierarchyChanged(bool is_add, View* parent, View* child) {
FocusManager* focus_manager = GetFocusManager();
if (focus_manager)
focus_manager->ViewRemoved(child);
- ViewStorage::GetInstance()->ViewRemoved(parent, child);
+ ViewStorage::GetInstance()->ViewRemoved(child);
+ native_widget_->ViewRemoved(child);
}
}
@@ -273,6 +286,10 @@ void Widget::SetCursor(gfx::NativeCursor cursor) {
native_widget_->SetCursor(cursor);
}
+void Widget::ResetLastMouseMoveFlag() {
+ last_mouse_event_was_move_ = false;
+}
+
FocusTraversable* Widget::GetFocusTraversable() {
return root_view_.get();
}
@@ -293,6 +310,18 @@ void Widget::SetFocusTraversableParentView(View* parent_view) {
root_view_->SetFocusTraversableParentView(parent_view);
}
+void Widget::NotifyAccessibilityEvent(
+ View* view,
+ ui::AccessibilityTypes::Event event_type,
+ bool send_native_event) {
+ // Send the notification to the delegate.
+ if (ViewsDelegate::views_delegate)
+ ViewsDelegate::views_delegate->NotifyAccessibilityEvent(view, event_type);
+
+ if (send_native_event)
+ native_widget_->SendNativeAccessibilityEvent(view, event_type);
+}
+
////////////////////////////////////////////////////////////////////////////////
// Widget, NativeWidgetDelegate implementation:
@@ -407,6 +436,14 @@ void Widget::OnMouseCaptureLost() {
is_mouse_button_pressed_ = false;
}
+Widget* Widget::AsWidget() {
+ return this;
+}
+
+const Widget* Widget::AsWidget() const {
+ return this;
+}
+
////////////////////////////////////////////////////////////////////////////////
// Widget, FocusTraversable implementation: