Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: ui/views/widget/widget.cc

Issue 12529012: Context menu on views must show on mouse down for non-WIN. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: patch Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/views/widget/root_view.cc ('k') | ui/views/widget/widget_deletion_observer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/views/widget/widget.h" 5 #include "ui/views/widget/widget.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
11 #include "ui/base/events/event.h" 11 #include "ui/base/events/event.h"
12 #include "ui/base/hit_test.h" 12 #include "ui/base/hit_test.h"
13 #include "ui/base/l10n/l10n_font_util.h" 13 #include "ui/base/l10n/l10n_font_util.h"
14 #include "ui/base/resource/resource_bundle.h" 14 #include "ui/base/resource/resource_bundle.h"
15 #include "ui/compositor/compositor.h" 15 #include "ui/compositor/compositor.h"
16 #include "ui/compositor/layer.h" 16 #include "ui/compositor/layer.h"
17 #include "ui/gfx/screen.h" 17 #include "ui/gfx/screen.h"
18 #include "ui/views/focus/focus_manager.h" 18 #include "ui/views/focus/focus_manager.h"
19 #include "ui/views/focus/focus_manager_factory.h" 19 #include "ui/views/focus/focus_manager_factory.h"
20 #include "ui/views/focus/view_storage.h" 20 #include "ui/views/focus/view_storage.h"
21 #include "ui/views/focus/widget_focus_manager.h" 21 #include "ui/views/focus/widget_focus_manager.h"
22 #include "ui/views/ime/input_method.h" 22 #include "ui/views/ime/input_method.h"
23 #include "ui/views/views_delegate.h" 23 #include "ui/views/views_delegate.h"
24 #include "ui/views/widget/default_theme_provider.h" 24 #include "ui/views/widget/default_theme_provider.h"
25 #include "ui/views/widget/native_widget_private.h" 25 #include "ui/views/widget/native_widget_private.h"
26 #include "ui/views/widget/root_view.h" 26 #include "ui/views/widget/root_view.h"
27 #include "ui/views/widget/tooltip_manager.h" 27 #include "ui/views/widget/tooltip_manager.h"
28 #include "ui/views/widget/widget_delegate.h" 28 #include "ui/views/widget/widget_delegate.h"
29 #include "ui/views/widget/widget_deletion_observer.h"
29 #include "ui/views/widget/widget_observer.h" 30 #include "ui/views/widget/widget_observer.h"
30 #include "ui/views/window/custom_frame_view.h" 31 #include "ui/views/window/custom_frame_view.h"
31 32
32 #if !defined(OS_MACOSX) 33 #if !defined(OS_MACOSX)
33 #include "ui/views/controls/menu/menu_controller.h" 34 #include "ui/views/controls/menu/menu_controller.h"
34 #endif 35 #endif
35 36
36 namespace views { 37 namespace views {
37 38
38 namespace { 39 namespace {
(...skipping 1105 matching lines...) Expand 10 before | Expand all | Expand 10 after
1144 void Widget::OnKeyEvent(ui::KeyEvent* event) { 1145 void Widget::OnKeyEvent(ui::KeyEvent* event) {
1145 ScopedEvent scoped(this, *event); 1146 ScopedEvent scoped(this, *event);
1146 static_cast<internal::RootView*>(GetRootView())-> 1147 static_cast<internal::RootView*>(GetRootView())->
1147 DispatchKeyEvent(event); 1148 DispatchKeyEvent(event);
1148 } 1149 }
1149 1150
1150 void Widget::OnMouseEvent(ui::MouseEvent* event) { 1151 void Widget::OnMouseEvent(ui::MouseEvent* event) {
1151 ScopedEvent scoped(this, *event); 1152 ScopedEvent scoped(this, *event);
1152 View* root_view = GetRootView(); 1153 View* root_view = GetRootView();
1153 switch (event->type()) { 1154 switch (event->type()) {
1154 case ui::ET_MOUSE_PRESSED: 1155 case ui::ET_MOUSE_PRESSED: {
1155 last_mouse_event_was_move_ = false; 1156 last_mouse_event_was_move_ = false;
1157
1158 // We may get deleted by the time we return from OnMousePressed. So we
1159 // use an observer to make sure we are still alive.
1160 WidgetDeletionObserver widget_deletion_observer(this);
1156 // Make sure we're still visible before we attempt capture as the mouse 1161 // Make sure we're still visible before we attempt capture as the mouse
1157 // press processing may have made the window hide (as happens with menus). 1162 // press processing may have made the window hide (as happens with menus).
1158 if (root_view && root_view->OnMousePressed(*event) && IsVisible()) { 1163 if (root_view && root_view->OnMousePressed(*event) &&
1164 widget_deletion_observer.IsWidgetAlive() && IsVisible()) {
1159 is_mouse_button_pressed_ = true; 1165 is_mouse_button_pressed_ = true;
1160 if (!native_widget_->HasCapture()) 1166 if (!native_widget_->HasCapture())
1161 native_widget_->SetCapture(); 1167 native_widget_->SetCapture();
1162 event->SetHandled(); 1168 event->SetHandled();
1163 } 1169 }
1164 return; 1170 return;
1171 }
1165 case ui::ET_MOUSE_RELEASED: 1172 case ui::ET_MOUSE_RELEASED:
1166 last_mouse_event_was_move_ = false; 1173 last_mouse_event_was_move_ = false;
1167 is_mouse_button_pressed_ = false; 1174 is_mouse_button_pressed_ = false;
1168 // Release capture first, to avoid confusion if OnMouseReleased blocks. 1175 // Release capture first, to avoid confusion if OnMouseReleased blocks.
1169 if (native_widget_->HasCapture() && 1176 if (native_widget_->HasCapture() &&
1170 ShouldReleaseCaptureOnMouseReleased()) { 1177 ShouldReleaseCaptureOnMouseReleased()) {
1171 native_widget_->ReleaseCapture(); 1178 native_widget_->ReleaseCapture();
1172 } 1179 }
1173 if (root_view) 1180 if (root_view)
1174 root_view->OnMouseReleased(*event); 1181 root_view->OnMouseReleased(*event);
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
1429 1436
1430 //////////////////////////////////////////////////////////////////////////////// 1437 ////////////////////////////////////////////////////////////////////////////////
1431 // internal::NativeWidgetPrivate, NativeWidget implementation: 1438 // internal::NativeWidgetPrivate, NativeWidget implementation:
1432 1439
1433 internal::NativeWidgetPrivate* NativeWidgetPrivate::AsNativeWidgetPrivate() { 1440 internal::NativeWidgetPrivate* NativeWidgetPrivate::AsNativeWidgetPrivate() {
1434 return this; 1441 return this;
1435 } 1442 }
1436 1443
1437 } // namespace internal 1444 } // namespace internal
1438 } // namespace views 1445 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/widget/root_view.cc ('k') | ui/views/widget/widget_deletion_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698