diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-22 04:00:41 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-22 04:00:41 +0000 |
commit | 881b8143a4c6613df97d35b5e0383bcdbfea2692 (patch) | |
tree | d79e69e679d058805137aa7c720fd00ed493f6a4 /ash | |
parent | 392754abb35886a246423278bdf0578efddee1a7 (diff) | |
download | chromium_src-881b8143a4c6613df97d35b5e0383bcdbfea2692.zip chromium_src-881b8143a4c6613df97d35b5e0383bcdbfea2692.tar.gz chromium_src-881b8143a4c6613df97d35b5e0383bcdbfea2692.tar.bz2 |
ash: Fix hiding the shelf after a gesture-drag to reveal it.
If an event is targetted at the shelf, then the shelf should not
hide, because that feels very awkward.
BUG=161352
Review URL: https://codereview.chromium.org/12314052
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@184013 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r-- | ash/wm/gestures/shelf_gesture_handler.cc | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/ash/wm/gestures/shelf_gesture_handler.cc b/ash/wm/gestures/shelf_gesture_handler.cc index aa2125d..7db6649 100644 --- a/ash/wm/gestures/shelf_gesture_handler.cc +++ b/ash/wm/gestures/shelf_gesture_handler.cc @@ -43,6 +43,17 @@ class ShelfResetHandler : public ui::EventHandler, delete this; } + bool ShelfIsEventTarget(const ui::Event& event) { + aura::Window* target = static_cast<aura::Window*>(event.target()); + views::Widget* widget = shelf_->launcher_widget(); + if (widget && widget->GetNativeWindow() == target) + return true; + widget = shelf_->status_area_widget(); + if (widget && widget->GetNativeWindow() == target) + return true; + return false; + } + void DecideShelfVisibility(const gfx::Point& location) { // For the rest of the mouse events, ignore if the event happens inside the // shelf. @@ -63,7 +74,8 @@ class ShelfResetHandler : public ui::EventHandler, // Overridden from ui::EventHandler: virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE { - ResetShelfState(); + if (!ShelfIsEventTarget(*event)) + ResetShelfState(); } virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE { @@ -75,11 +87,13 @@ class ShelfResetHandler : public ui::EventHandler, } virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE { - DecideShelfVisibility(event->root_location()); + if (!ShelfIsEventTarget(*event)) + DecideShelfVisibility(event->root_location()); } virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE { - DecideShelfVisibility(event->root_location()); + if (!ShelfIsEventTarget(*event)) + DecideShelfVisibility(event->root_location()); } // Overridden from ash::internal::ShelfLayoutManager::Observer: |