Index: ash/system/tray/system_tray.h |
diff --git a/ash/system/tray/system_tray.h b/ash/system/tray/system_tray.h |
index fa16c53f74067aaee8e1eacaccff91add8d1d17d..1fc641c8fac1b69a4753ddac4fdf291d081eb399 100644 |
--- a/ash/system/tray/system_tray.h |
+++ b/ash/system/tray/system_tray.h |
@@ -10,6 +10,7 @@ |
#include <vector> |
#include "ash/ash_export.h" |
+#include "ash/shell_observer.h" |
#include "ash/system/tray/system_tray_bubble.h" |
#include "ash/system/tray/tray_background_view.h" |
#include "base/macros.h" |
@@ -45,7 +46,8 @@ enum BubbleCreationType { |
}; |
class ASH_EXPORT SystemTray : public TrayBackgroundView, |
- public views::TrayBubbleView::Delegate { |
+ public views::TrayBubbleView::Delegate, |
+ public ShellObserver { |
public: |
explicit SystemTray(Shelf* shelf); |
~SystemTray() override; |
@@ -136,12 +138,20 @@ class ASH_EXPORT SystemTray : public TrayBackgroundView, |
base::string16 GetAccessibleNameForBubble() override; |
void HideBubble(const views::TrayBubbleView* bubble_view) override; |
+ // ShellObserver: |
+ void OnMaximizeModeStarted() override; |
+ void OnMaximizeModeEnded() override; |
+ |
ScreenTrayItem* GetScreenShareItem() { return screen_share_tray_item_; } |
ScreenTrayItem* GetScreenCaptureItem() { return screen_capture_tray_item_; } |
// Activates the system tray bubble. |
void ActivateBubble(); |
+ gfx::Rect GetWorkAreaBoundsInScreen() const; |
+ |
+ bool on_maximize_mode() { return on_maximize_mode_; } |
+ |
private: |
friend class SystemTrayTestApi; |
class ActivationObserver; |
@@ -193,6 +203,39 @@ class ASH_EXPORT SystemTray : public TrayBackgroundView, |
// Overridden from ActionableView. |
bool PerformAction(const ui::Event& event) override; |
+ // Overridden from ui::EventHandler: |
+ void OnGestureEvent(ui::GestureEvent* event) override; |
+ |
+ // Gesture related functions: |
+ bool ProcessGestureEvent(const ui::GestureEvent& event); |
+ bool StartGestureDrag(const ui::GestureEvent& gesture); |
+ void UpdateGestureDrag(const ui::GestureEvent& gesture); |
+ void CompleteGestureDrag(const ui::GestureEvent& gesture); |
+ |
+ // Returns true if swiping down triggered on the system tray area on the |
+ // shelf. |
+ bool IsSwipingDownOnShelf(const ui::GestureEvent& gesture); |
+ |
+ // Rules for showing / closing the system bubble for swiping. |
+ // |ET_GESTURE_SCROLL_END| considers only the position of the dragging. |
+ // |ET_SCROLL_FLING_START| should consider both position and velocity of the |
+ // dragging. |
+ bool ShouldShowSystemBubbleBasedOnPosition(); |
+ bool ShouldShowSystemBubbleForSwiping(const ui::GestureEvent& gesture); |
+ |
+ Shelf* shelf_; |
+ // Swiping of the system tray bubble is only for maximize mode. |
+ bool on_maximize_mode_ = false; |
+ |
+ // The original bounds of the system tray bubble. |
+ gfx::Rect system_tray_bubble_bounds_; |
+ |
+ // Tracks the amount of the drag. |
+ float gesture_drag_amount_; |
+ |
+ // Tracks the final scroll delta of the gesture event. |
+ float final_scroll_y_; |
+ |
// The web notification tray view that appears adjacent to this view. |
WebNotificationTray* web_notification_tray_ = nullptr; |