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

Unified Diff: ash/system/tray/system_tray.cc

Issue 2961313003: Touch gestures for System Tray/ IME/ Stylus/ Notifications (Closed)
Patch Set: Add |is_on_bubble_| instead of. Created 3 years, 6 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
Index: ash/system/tray/system_tray.cc
diff --git a/ash/system/tray/system_tray.cc b/ash/system/tray/system_tray.cc
index 77cc0342a6314dd3407551084dad72d4ab6c3cc1..f2955e425327c7986a614747ab61042097b833c1 100644
--- a/ash/system/tray/system_tray.cc
+++ b/ash/system/tray/system_tray.cc
@@ -625,14 +625,10 @@ void SystemTray::ActivateBubble() {
}
void SystemTray::OnGestureEvent(ui::GestureEvent* event) {
- if (Shell::Get()
- ->maximize_mode_controller()
- ->IsMaximizeModeWindowManagerEnabled() &&
- shelf_->IsHorizontalAlignment() && ProcessGestureEvent(*event)) {
+ if (ProcessGestureEvent(*event, false))
xdai1 2017/06/30 22:27:08 nit: if(ProcessGestureEvent(*event, false /* is_on
minch1 2017/07/01 05:57:13 Done.
event->SetHandled();
- } else {
+ else
TrayBackgroundView::OnGestureEvent(event);
- }
}
gfx::Rect SystemTray::GetWorkAreaBoundsInScreen() const {
@@ -653,7 +649,17 @@ bool SystemTray::PerformAction(const ui::Event& event) {
return true;
}
-bool SystemTray::ProcessGestureEvent(const ui::GestureEvent& event) {
+bool SystemTray::ProcessGestureEvent(const ui::GestureEvent& event,
+ bool is_on_bubble) {
+ if (!Shell::Get()
+ ->maximize_mode_controller()
+ ->IsMaximizeModeWindowManagerEnabled() ||
+ !shelf_->IsHorizontalAlignment()) {
+ return false;
+ }
+
+ // Set |is_on_bubble_| before process the events.
+ is_on_bubble_ = is_on_bubble;
if (event.type() == ui::ET_GESTURE_SCROLL_BEGIN)
return StartGestureDrag(event);
@@ -678,29 +684,33 @@ bool SystemTray::ProcessGestureEvent(const ui::GestureEvent& event) {
}
bool SystemTray::StartGestureDrag(const ui::GestureEvent& gesture) {
- // Close the system bubble if there is already a full one opened. And return
- // false to let shelf handle the event.
- if (HasSystemBubble() && full_system_tray_menu_) {
- system_bubble_->bubble()->Close();
- return false;
- }
+ if (!is_on_bubble_) {
+ // Dragging happens on the system tray. Close the system bubble if there is
+ // already a full one opened. And return false to let shelf handle the
+ // event.
+ if (HasSystemBubble() && full_system_tray_menu_) {
+ system_bubble_->bubble()->Close();
+ return false;
+ }
- // If the scroll sequence begins to scroll downward, return false so that the
- // event will instead by handled by the shelf.
- if (gesture.details().scroll_y_hint() > 0)
- return false;
+ // If the scroll sequence begins to scroll downward, return false so that
+ // the event will instead by handled by the shelf.
+ if (gesture.details().scroll_y_hint() > 0)
+ return false;
+
+ ShowDefaultView(BUBBLE_CREATE_NEW);
+ }
is_in_drag_ = true;
gesture_drag_amount_ = 0.f;
- ShowDefaultView(BUBBLE_CREATE_NEW);
system_tray_bubble_bounds_ =
system_bubble_->bubble_view()->GetWidget()->GetWindowBoundsInScreen();
- SetBubbleBounds(gesture.location());
+ SetBubbleBounds();
return true;
}
void SystemTray::UpdateGestureDrag(const ui::GestureEvent& gesture) {
- SetBubbleBounds(gesture.location());
+ SetBubbleBounds();
gesture_drag_amount_ += gesture.details().scroll_y();
}
@@ -715,16 +725,13 @@ void SystemTray::CompleteGestureDrag(const ui::GestureEvent& gesture) {
is_in_drag_ = false;
}
-void SystemTray::SetBubbleBounds(const gfx::Point& location) {
- gfx::Point location_in_screen_coordinates(location);
- View::ConvertPointToScreen(this, &location_in_screen_coordinates);
-
- // System tray bubble should not be dragged higher than its original height.
- if (location_in_screen_coordinates.y() < system_tray_bubble_bounds_.y())
- location_in_screen_coordinates.set_y(system_tray_bubble_bounds_.y());
-
+void SystemTray::SetBubbleBounds() {
gfx::Rect bounds_on_location = system_tray_bubble_bounds_;
- bounds_on_location.set_y(location_in_screen_coordinates.y());
+ // System tray bubble should not be dragged higher than its original height.
+ int bounds_y = (is_on_bubble_ ? system_tray_bubble_bounds_.y()
+ : shelf_->GetIdealBounds().y()) +
+ gesture_drag_amount_;
+ bounds_on_location.set_y(std::max(bounds_y, system_tray_bubble_bounds_.y()));
system_bubble_->bubble_view()->GetWidget()->SetBounds(bounds_on_location);
}
@@ -739,7 +746,11 @@ bool SystemTray::ShouldShowSystemBubbleAfterScrollSequence(
DCHECK(sequence_end.type() == ui::ET_GESTURE_SCROLL_END ||
sequence_end.type() == ui::ET_SCROLL_FLING_START);
- // Show the system menu if it is already at least one-third visible.
+
+ // Keep the bubble's original state if the |gesture_drag_amount_| doesn't
+ // exceed one-third of the bubble's height.
+ if (is_on_bubble_)
+ return gesture_drag_amount_ < system_tray_bubble_bounds_.height() / 3.0;
return -gesture_drag_amount_ >= system_tray_bubble_bounds_.height() / 3.0;
}

Powered by Google App Engine
This is Rietveld 408576698