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

Side by Side Diff: ui/views/widget/root_view.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/views.gyp ('k') | ui/views/widget/widget.cc » ('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/root_view.h" 5 #include "ui/views/widget/root_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
11 #include "ui/base/accessibility/accessible_view_state.h" 11 #include "ui/base/accessibility/accessible_view_state.h"
12 #include "ui/base/dragdrop/drag_drop_types.h" 12 #include "ui/base/dragdrop/drag_drop_types.h"
13 #include "ui/base/events/event.h" 13 #include "ui/base/events/event.h"
14 #include "ui/base/keycodes/keyboard_codes.h" 14 #include "ui/base/keycodes/keyboard_codes.h"
15 #include "ui/compositor/layer.h" 15 #include "ui/compositor/layer.h"
16 #include "ui/gfx/canvas.h" 16 #include "ui/gfx/canvas.h"
17 #include "ui/views/focus/view_storage.h" 17 #include "ui/views/focus/view_storage.h"
18 #include "ui/views/layout/fill_layout.h" 18 #include "ui/views/layout/fill_layout.h"
19 #include "ui/views/widget/widget.h" 19 #include "ui/views/widget/widget.h"
20 #include "ui/views/widget/widget_delegate.h" 20 #include "ui/views/widget/widget_delegate.h"
21 #include "ui/views/widget/widget_deletion_observer.h"
21 22
22 namespace views { 23 namespace views {
23 namespace internal { 24 namespace internal {
24 25
25 namespace { 26 namespace {
26 27
27 enum EventType { 28 enum EventType {
28 EVENT_ENTER, 29 EVENT_ENTER,
29 EVENT_EXIT 30 EVENT_EXIT
30 }; 31 };
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 // See if this view wants to handle the mouse press. 427 // See if this view wants to handle the mouse press.
427 ui::MouseEvent mouse_pressed_event(event, static_cast<View*>(this), 428 ui::MouseEvent mouse_pressed_event(event, static_cast<View*>(this),
428 mouse_pressed_handler_); 429 mouse_pressed_handler_);
429 430
430 // Remove the double-click flag if the handler is different than the 431 // Remove the double-click flag if the handler is different than the
431 // one which got the first click part of the double-click. 432 // one which got the first click part of the double-click.
432 if (mouse_pressed_handler_ != last_click_handler_) 433 if (mouse_pressed_handler_ != last_click_handler_)
433 mouse_pressed_event.set_flags(event.flags() & ~ui::EF_IS_DOUBLE_CLICK); 434 mouse_pressed_event.set_flags(event.flags() & ~ui::EF_IS_DOUBLE_CLICK);
434 435
435 drag_info_.Reset(); 436 drag_info_.Reset();
436 DispatchEventToTarget(mouse_pressed_handler_, &mouse_pressed_event); 437 {
438 WidgetDeletionObserver widget_deletion_observer(widget_);
439 DispatchEventToTarget(mouse_pressed_handler_, &mouse_pressed_event);
440 if (!widget_deletion_observer.IsWidgetAlive())
441 return mouse_pressed_event.handled();
442 }
437 443
438 // The view could have removed itself from the tree when handling 444 // The view could have removed itself from the tree when handling
439 // OnMousePressed(). In this case, the removal notification will have 445 // OnMousePressed(). In this case, the removal notification will have
440 // reset mouse_pressed_handler_ to NULL out from under us. Detect this 446 // reset mouse_pressed_handler_ to NULL out from under us. Detect this
441 // case and stop. (See comments in view.h.) 447 // case and stop. (See comments in view.h.)
442 // 448 //
443 // NOTE: Don't return true here, because we don't want the frame to 449 // NOTE: Don't return true here, because we don't want the frame to
444 // forward future events to us when there's no handler. 450 // forward future events to us when there's no handler.
445 if (!mouse_pressed_handler_) 451 if (!mouse_pressed_handler_)
446 break; 452 break;
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 DispatchEventToTarget(p, &notify_event); 698 DispatchEventToTarget(p, &notify_event);
693 } 699 }
694 } 700 }
695 701
696 bool RootView::CanDispatchToTarget(ui::EventTarget* target) { 702 bool RootView::CanDispatchToTarget(ui::EventTarget* target) {
697 return event_dispatch_target_ == target; 703 return event_dispatch_target_ == target;
698 } 704 }
699 705
700 } // namespace internal 706 } // namespace internal
701 } // namespace views 707 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/views.gyp ('k') | ui/views/widget/widget.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698