Chromium Code Reviews| Index: ash/wm/gestures/border_gesture_handler.cc |
| diff --git a/ash/wm/gestures/border_gesture_handler.cc b/ash/wm/gestures/border_gesture_handler.cc |
| index 89c591660100748a3369263e21c598475dcfd87f..dc8dc85c26ad1d1c18e33d53a13774dada8f7120 100644 |
| --- a/ash/wm/gestures/border_gesture_handler.cc |
| +++ b/ash/wm/gestures/border_gesture_handler.cc |
| @@ -9,9 +9,11 @@ |
| #include "ash/shelf/shelf_types.h" |
| #include "ash/shelf/shelf_widget.h" |
| #include "ash/shell.h" |
| +#include "ash/wm/property_util.h" |
| #include "base/command_line.h" |
| #include "base/string_util.h" |
| #include "base/strings/string_number_conversions.h" |
| +#include "ui/aura/window.h" |
| #include "ui/base/events/event.h" |
| #include "ui/base/ui_base_switches.h" |
| #include "ui/gfx/screen.h" |
| @@ -63,6 +65,28 @@ bool BorderGestureHandler::ProcessGestureEvent(aura::Window* target, |
| return false; |
| } |
| +bool BorderGestureHandler::HandleImmersiveControl( |
| + aura::Window* target, |
| + const ui::GestureEvent& event) { |
| + // If not in immersive mode let the gesture pass through |
| + if (!GetRootWindowController(target->GetRootWindow())->IsImmersiveMode()) |
| + return false; |
| + |
| + switch (event.type()) { |
| + case ui::ET_GESTURE_SCROLL_BEGIN: |
| + return true; |
| + case ui::ET_GESTURE_SCROLL_UPDATE: |
| + GetRootWindowController( |
| + target->GetRootWindow())->SetPendingImmersiveGesture(true); |
|
sadrul
2013/04/19 01:41:20
I think you should do this in SCROLL_BEGIN
rharrison
2013/04/22 18:36:52
I agree, I suspect this is a typo
|
| + return true; |
| + case ui::ET_GESTURE_SCROLL_END: |
| + case ui::ET_SCROLL_FLING_START: |
| + return true; |
| + default: |
| + return false; |
| + } |
| +} |
| + |
| bool BorderGestureHandler::HandleLauncherControl( |
| const ui::GestureEvent& event) { |
| ShelfLayoutManager* shelf = |
| @@ -77,8 +101,7 @@ bool BorderGestureHandler::HandleLauncherControl( |
| return shelf_handler_.ProcessGestureEvent(event); |
| break; |
| case SHELF_ALIGNMENT_TOP: |
| - if (start_location_.test(BORDER_LOCATION_TOP)) |
| - return shelf_handler_.ProcessGestureEvent(event); |
| + NOTREACHED(); |
| break; |
| case SHELF_ALIGNMENT_RIGHT: |
| if (start_location_.test(BORDER_LOCATION_RIGHT)) |
| @@ -98,7 +121,11 @@ bool BorderGestureHandler::HandleBorderGestureStart( |
| Shell::GetScreen()->GetDisplayNearestWindow(target).bounds(); |
| GestureStartInTargetArea(screen, event); |
| - if (start_location_.any()) |
| + if (start_location_.test(BORDER_LOCATION_TOP)) |
| + return HandleImmersiveControl(target, event); |
| + if (start_location_.test(BORDER_LOCATION_BOTTOM) || |
| + start_location_.test(BORDER_LOCATION_LEFT) || |
| + start_location_.test(BORDER_LOCATION_RIGHT)) |
| return HandleLauncherControl(event); |
| return false; |
| } |
| @@ -106,6 +133,8 @@ bool BorderGestureHandler::HandleBorderGestureStart( |
| bool BorderGestureHandler::HandleBorderGestureUpdate( |
| aura::Window* target, |
| const ui::GestureEvent& event) { |
| + if (IsGestureInImmersiveOrientation(event)) |
| + return HandleImmersiveControl(target, event); |
| if (IsGestureInLauncherOrientation(event)) |
| return HandleLauncherControl(event); |
| return false; |
| @@ -114,7 +143,11 @@ bool BorderGestureHandler::HandleBorderGestureUpdate( |
| bool BorderGestureHandler::HandleBorderGestureEnd( |
| aura::Window* target, |
| const ui::GestureEvent& event) { |
| - bool ret_val = HandleLauncherControl(event); |
| + bool ret_val = false; |
| + if (IsGestureInImmersiveOrientation(event)) |
| + ret_val = HandleImmersiveControl(target, event); |
| + if (IsGestureInLauncherOrientation(event)) |
| + ret_val = HandleLauncherControl(event); |
| start_location_.reset(); |
| return ret_val; |
| } |
| @@ -145,13 +178,33 @@ bool BorderGestureHandler::DetermineGestureOrientation( |
| return true; |
| } |
| +bool BorderGestureHandler::IsGestureInImmersiveOrientation( |
| + const ui::GestureEvent& event) { |
| + if (ui::ET_GESTURE_SCROLL_UPDATE == event.type()) { |
| + BorderScrollOrientation new_orientation = abs(event.details().scroll_y()) > |
| + abs(event.details().scroll_x()) ? |
| + BORDER_SCROLL_ORIENTATION_VERTICAL : |
| + BORDER_SCROLL_ORIENTATION_HORIZONTAL; |
| + if (new_orientation != orientation_) |
| + return false; |
| + } |
| + |
| + if (start_location_.test(BORDER_LOCATION_TOP) && |
| + orientation_ == BORDER_SCROLL_ORIENTATION_VERTICAL) |
| + return true; |
| + return false; |
| +} |
| + |
| bool BorderGestureHandler::IsGestureInLauncherOrientation( |
| const ui::GestureEvent& event) { |
| - BorderScrollOrientation new_orientation = abs(event.details().scroll_y()) > |
| - abs(event.details().scroll_x()) ? |
| - BORDER_SCROLL_ORIENTATION_VERTICAL : BORDER_SCROLL_ORIENTATION_HORIZONTAL; |
| - if (new_orientation != orientation_) |
| - return false; |
| + if (ui::ET_GESTURE_SCROLL_UPDATE == event.type()) { |
| + BorderScrollOrientation new_orientation = abs(event.details().scroll_y()) > |
| + abs(event.details().scroll_x()) ? |
| + BORDER_SCROLL_ORIENTATION_VERTICAL : |
| + BORDER_SCROLL_ORIENTATION_HORIZONTAL; |
| + if (new_orientation != orientation_) |
| + return false; |
| + } |
| ShelfLayoutManager* shelf = |
| Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager(); |
| @@ -165,8 +218,7 @@ bool BorderGestureHandler::IsGestureInLauncherOrientation( |
| return true; |
| break; |
| case SHELF_ALIGNMENT_TOP: |
| - if (orientation_ == BORDER_SCROLL_ORIENTATION_VERTICAL) |
| - return true; |
| + NOTREACHED(); |
| break; |
| case SHELF_ALIGNMENT_RIGHT: |
| if (orientation_ == BORDER_SCROLL_ORIENTATION_HORIZONTAL) |