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

Unified Diff: ash/shelf/shelf_layout_manager.cc

Issue 2224653002: mash: Remove ash::ShelfGestureHandler and ui::ET_GESTURE_WIN8_EDGE_SWIPE (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/shelf/shelf_layout_manager.h ('k') | ash/shelf/shelf_layout_manager_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/shelf/shelf_layout_manager.cc
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index 01cad5a08cec314d95be6cfe3db53d427327edd3..2dedc9437901816c28cb07c9860c9b2af6dddb73 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -28,7 +28,6 @@
#include "ash/shelf/shelf_bezel_event_filter.h"
#include "ash/shelf/shelf_layout_manager_observer.h"
#include "ash/shell.h"
-#include "ash/wm/gestures/shelf_gesture_handler.h"
#include "ash/wm/window_animations.h"
#include "ash/wm/workspace_controller.h"
#include "base/auto_reset.h"
@@ -302,10 +301,7 @@ void ShelfLayoutManager::UpdateVisibilityState() {
workspace_controller_->GetWindowState());
switch (window_state) {
case wm::WORKSPACE_WINDOW_STATE_FULL_SCREEN: {
- const WmWindow* fullscreen_window = wm::GetWindowForFullscreenMode(
- WmLookup::Get()->GetWindowForWidget(shelf_widget_));
- if (fullscreen_window &&
- fullscreen_window->GetWindowState()->hide_shelf_when_fullscreen()) {
+ if (IsShelfHiddenForFullscreen()) {
SetState(SHELF_HIDDEN);
} else {
// The shelf is sometimes not hidden when in immersive fullscreen.
@@ -370,10 +366,8 @@ void ShelfLayoutManager::UpdateAutoHideForGestureEvent(
return;
aura::Window* target_window = static_cast<aura::Window*>(event->target());
- if (IsShelfWindow(target_window)) {
- if (gesture_handler_.ProcessGestureEvent(*event, target_window))
- event->StopPropagation();
- }
+ if (IsShelfWindow(target_window) && ProcessGestureEvent(*event))
+ event->StopPropagation();
}
void ShelfLayoutManager::SetWindowOverlapsShelf(bool value) {
@@ -389,108 +383,37 @@ void ShelfLayoutManager::RemoveObserver(ShelfLayoutManagerObserver* observer) {
observers_.RemoveObserver(observer);
}
-////////////////////////////////////////////////////////////////////////////////
-// ShelfLayoutManager, Gesture functions:
+bool ShelfLayoutManager::ProcessGestureEvent(const ui::GestureEvent& event) {
+ // The gestures are disabled in the lock/login screen.
+ SessionStateDelegate* delegate = WmShell::Get()->GetSessionStateDelegate();
+ if (!delegate->NumberOfLoggedInUsers() || delegate->IsScreenLocked())
+ return false;
-void ShelfLayoutManager::OnGestureEdgeSwipe(const ui::GestureEvent& gesture) {
- if (visibility_state() == SHELF_AUTO_HIDE) {
- gesture_drag_auto_hide_state_ = SHELF_AUTO_HIDE_SHOWN;
- gesture_drag_status_ = GESTURE_DRAG_COMPLETE_IN_PROGRESS;
- UpdateVisibilityState();
- gesture_drag_status_ = GESTURE_DRAG_NONE;
- }
-}
+ if (IsShelfHiddenForFullscreen())
+ return false;
-void ShelfLayoutManager::StartGestureDrag(const ui::GestureEvent& gesture) {
- gesture_drag_status_ = GESTURE_DRAG_IN_PROGRESS;
- gesture_drag_amount_ = 0.f;
- gesture_drag_auto_hide_state_ = visibility_state() == SHELF_AUTO_HIDE
- ? auto_hide_state()
- : SHELF_AUTO_HIDE_SHOWN;
- UpdateShelfBackground(BACKGROUND_CHANGE_ANIMATE);
-}
+ if (event.type() == ui::ET_GESTURE_SCROLL_BEGIN) {
+ StartGestureDrag(event);
+ return true;
+ }
-void ShelfLayoutManager::UpdateGestureDrag(const ui::GestureEvent& gesture) {
- gesture_drag_amount_ += PrimaryAxisValue(gesture.details().scroll_y(),
- gesture.details().scroll_x());
- LayoutShelf();
-}
+ if (gesture_drag_status_ != GESTURE_DRAG_IN_PROGRESS)
+ return false;
-void ShelfLayoutManager::CompleteGestureDrag(const ui::GestureEvent& gesture) {
- bool horizontal = IsHorizontalAlignment();
- bool should_change = false;
- if (gesture.type() == ui::ET_GESTURE_SCROLL_END) {
- // The visibility of the shelf changes only if the shelf was dragged X%
- // along the correct axis. If the shelf was already visible, then the
- // direction of the drag does not matter.
- const float kDragHideThreshold = 0.4f;
- gfx::Rect bounds = GetIdealBounds();
- float drag_ratio = fabs(gesture_drag_amount_) /
- (horizontal ? bounds.height() : bounds.width());
- if (gesture_drag_auto_hide_state_ == SHELF_AUTO_HIDE_SHOWN) {
- should_change = drag_ratio > kDragHideThreshold;
- } else {
- bool correct_direction = false;
- switch (GetAlignment()) {
- case SHELF_ALIGNMENT_BOTTOM:
- case SHELF_ALIGNMENT_BOTTOM_LOCKED:
- case SHELF_ALIGNMENT_RIGHT:
- correct_direction = gesture_drag_amount_ < 0;
- break;
- case SHELF_ALIGNMENT_LEFT:
- correct_direction = gesture_drag_amount_ > 0;
- break;
- }
- should_change = correct_direction && drag_ratio > kDragHideThreshold;
- }
- } else if (gesture.type() == ui::ET_SCROLL_FLING_START) {
- if (gesture_drag_auto_hide_state_ == SHELF_AUTO_HIDE_SHOWN) {
- should_change = horizontal ? fabs(gesture.details().velocity_y()) > 0
- : fabs(gesture.details().velocity_x()) > 0;
- } else {
- should_change =
- SelectValueForShelfAlignment(gesture.details().velocity_y() < 0,
- gesture.details().velocity_x() > 0,
- gesture.details().velocity_x() < 0);
- }
- } else {
- NOTREACHED();
+ if (event.type() == ui::ET_GESTURE_SCROLL_UPDATE) {
+ UpdateGestureDrag(event);
+ return true;
}
- if (!should_change) {
- CancelGestureDrag();
- return;
- }
- if (shelf_widget_) {
- shelf_widget_->Deactivate();
- shelf_widget_->status_area_widget()->Deactivate();
+ if (event.type() == ui::ET_GESTURE_SCROLL_END ||
+ event.type() == ui::ET_SCROLL_FLING_START) {
+ CompleteGestureDrag(event);
+ return true;
}
- gesture_drag_auto_hide_state_ =
- gesture_drag_auto_hide_state_ == SHELF_AUTO_HIDE_SHOWN
- ? SHELF_AUTO_HIDE_HIDDEN
- : SHELF_AUTO_HIDE_SHOWN;
- ShelfAutoHideBehavior new_auto_hide_behavior =
- gesture_drag_auto_hide_state_ == SHELF_AUTO_HIDE_SHOWN
- ? SHELF_AUTO_HIDE_BEHAVIOR_NEVER
- : SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS;
-
- // When in fullscreen and the shelf is forced to be auto hidden, the auto hide
- // behavior affects neither the visibility state nor the auto hide state. Set
- // |gesture_drag_status_| to GESTURE_DRAG_COMPLETE_IN_PROGRESS to set the auto
- // hide state to |gesture_drag_auto_hide_state_|.
- gesture_drag_status_ = GESTURE_DRAG_COMPLETE_IN_PROGRESS;
- Shelf* shelf = shelf_widget_->shelf();
- if (shelf->auto_hide_behavior() != new_auto_hide_behavior)
- shelf->SetAutoHideBehavior(new_auto_hide_behavior);
- else
- UpdateVisibilityState();
- gesture_drag_status_ = GESTURE_DRAG_NONE;
-}
-void ShelfLayoutManager::CancelGestureDrag() {
- gesture_drag_status_ = GESTURE_DRAG_CANCEL_IN_PROGRESS;
- UpdateVisibilityState();
- gesture_drag_status_ = GESTURE_DRAG_NONE;
+ // Unexpected event. Reset the state and let the event fall through.
+ CancelGestureDrag();
+ return false;
}
void ShelfLayoutManager::SetAnimationDurationOverride(
@@ -1192,4 +1115,106 @@ float ShelfLayoutManager::ComputeTargetOpacity(const State& state) {
return (state.visibility_state == SHELF_AUTO_HIDE) ? 1.0f : 0.0f;
}
+bool ShelfLayoutManager::IsShelfHiddenForFullscreen() const {
+ const WmWindow* fullscreen_window = wm::GetWindowForFullscreenMode(
+ WmLookup::Get()->GetWindowForWidget(shelf_widget_));
+ return fullscreen_window &&
+ fullscreen_window->GetWindowState()->hide_shelf_when_fullscreen();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// ShelfLayoutManager, Gesture functions:
+
+void ShelfLayoutManager::StartGestureDrag(const ui::GestureEvent& gesture) {
+ gesture_drag_status_ = GESTURE_DRAG_IN_PROGRESS;
+ gesture_drag_amount_ = 0.f;
+ gesture_drag_auto_hide_state_ = visibility_state() == SHELF_AUTO_HIDE
+ ? auto_hide_state()
+ : SHELF_AUTO_HIDE_SHOWN;
+ UpdateShelfBackground(BACKGROUND_CHANGE_ANIMATE);
+}
+
+void ShelfLayoutManager::UpdateGestureDrag(const ui::GestureEvent& gesture) {
+ gesture_drag_amount_ += PrimaryAxisValue(gesture.details().scroll_y(),
+ gesture.details().scroll_x());
+ LayoutShelf();
+}
+
+void ShelfLayoutManager::CompleteGestureDrag(const ui::GestureEvent& gesture) {
+ bool horizontal = IsHorizontalAlignment();
+ bool should_change = false;
+ if (gesture.type() == ui::ET_GESTURE_SCROLL_END) {
+ // The visibility of the shelf changes only if the shelf was dragged X%
+ // along the correct axis. If the shelf was already visible, then the
+ // direction of the drag does not matter.
+ const float kDragHideThreshold = 0.4f;
+ gfx::Rect bounds = GetIdealBounds();
+ float drag_ratio = fabs(gesture_drag_amount_) /
+ (horizontal ? bounds.height() : bounds.width());
+ if (gesture_drag_auto_hide_state_ == SHELF_AUTO_HIDE_SHOWN) {
+ should_change = drag_ratio > kDragHideThreshold;
+ } else {
+ bool correct_direction = false;
+ switch (GetAlignment()) {
+ case SHELF_ALIGNMENT_BOTTOM:
+ case SHELF_ALIGNMENT_BOTTOM_LOCKED:
+ case SHELF_ALIGNMENT_RIGHT:
+ correct_direction = gesture_drag_amount_ < 0;
+ break;
+ case SHELF_ALIGNMENT_LEFT:
+ correct_direction = gesture_drag_amount_ > 0;
+ break;
+ }
+ should_change = correct_direction && drag_ratio > kDragHideThreshold;
+ }
+ } else if (gesture.type() == ui::ET_SCROLL_FLING_START) {
+ if (gesture_drag_auto_hide_state_ == SHELF_AUTO_HIDE_SHOWN) {
+ should_change = horizontal ? fabs(gesture.details().velocity_y()) > 0
+ : fabs(gesture.details().velocity_x()) > 0;
+ } else {
+ should_change =
+ SelectValueForShelfAlignment(gesture.details().velocity_y() < 0,
+ gesture.details().velocity_x() > 0,
+ gesture.details().velocity_x() < 0);
+ }
+ } else {
+ NOTREACHED();
+ }
+
+ if (!should_change) {
+ CancelGestureDrag();
+ return;
+ }
+ if (shelf_widget_) {
+ shelf_widget_->Deactivate();
+ shelf_widget_->status_area_widget()->Deactivate();
+ }
+ gesture_drag_auto_hide_state_ =
+ gesture_drag_auto_hide_state_ == SHELF_AUTO_HIDE_SHOWN
+ ? SHELF_AUTO_HIDE_HIDDEN
+ : SHELF_AUTO_HIDE_SHOWN;
+ ShelfAutoHideBehavior new_auto_hide_behavior =
+ gesture_drag_auto_hide_state_ == SHELF_AUTO_HIDE_SHOWN
+ ? SHELF_AUTO_HIDE_BEHAVIOR_NEVER
+ : SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS;
+
+ // When in fullscreen and the shelf is forced to be auto hidden, the auto hide
+ // behavior affects neither the visibility state nor the auto hide state. Set
+ // |gesture_drag_status_| to GESTURE_DRAG_COMPLETE_IN_PROGRESS to set the auto
+ // hide state to |gesture_drag_auto_hide_state_|.
+ gesture_drag_status_ = GESTURE_DRAG_COMPLETE_IN_PROGRESS;
+ Shelf* shelf = shelf_widget_->shelf();
+ if (shelf->auto_hide_behavior() != new_auto_hide_behavior)
+ shelf->SetAutoHideBehavior(new_auto_hide_behavior);
+ else
+ UpdateVisibilityState();
+ gesture_drag_status_ = GESTURE_DRAG_NONE;
+}
+
+void ShelfLayoutManager::CancelGestureDrag() {
+ gesture_drag_status_ = GESTURE_DRAG_CANCEL_IN_PROGRESS;
+ UpdateVisibilityState();
+ gesture_drag_status_ = GESTURE_DRAG_NONE;
+}
+
} // namespace ash
« no previous file with comments | « ash/shelf/shelf_layout_manager.h ('k') | ash/shelf/shelf_layout_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698