Index: chrome/browser/ui/gesture_prefs_observer_factory_aura.cc |
diff --git a/chrome/browser/ui/gesture_prefs_observer_factory_aura.cc b/chrome/browser/ui/gesture_prefs_observer_factory_aura.cc |
index 4d79c02de5656f45b5837398e479b2c13e9ced41..7f256b82c789a991cdc3fbc59291e72f72a18ea1 100644 |
--- a/chrome/browser/ui/gesture_prefs_observer_factory_aura.cc |
+++ b/chrome/browser/ui/gesture_prefs_observer_factory_aura.cc |
@@ -4,6 +4,8 @@ |
#include "chrome/browser/ui/gesture_prefs_observer_factory_aura.h" |
+#include <vector> |
+ |
#include "base/bind.h" |
#include "base/bind_helpers.h" |
#include "base/compiler_specific.h" |
@@ -20,6 +22,14 @@ |
#include "content/public/common/renderer_preferences.h" |
#include "ui/base/gestures/gesture_configuration.h" |
+#if defined(USE_ASH) |
+#include "ash/wm/workspace/workspace_cycler_configuration.h" |
+#endif // USE_ASH |
+ |
+#if defined(USE_ASH) |
+using ash::WorkspaceCyclerConfiguration; |
+#endif // USE_ASH |
+ |
using ui::GestureConfiguration; |
namespace { |
@@ -29,15 +39,11 @@ struct OverscrollPref { |
content::OverscrollConfig config; |
}; |
-// This class manages gesture configuration preferences. |
-class GesturePrefsObserver : public ProfileKeyedService { |
- public: |
- explicit GesturePrefsObserver(PrefService* prefs); |
- virtual ~GesturePrefsObserver(); |
- |
- static const OverscrollPref* GetOverscrollPrefs() { |
+const std::vector<OverscrollPref>& GetOverscrollPrefs() { |
+ CR_DEFINE_STATIC_LOCAL(std::vector<OverscrollPref>, overscroll_prefs, ()); |
+ if (overscroll_prefs.empty()) { |
using namespace content; |
- static OverscrollPref overscroll_prefs[] = { |
+ const OverscrollPref kOverscrollPrefs[] = { |
{ prefs::kOverscrollHorizontalThresholdComplete, |
OVERSCROLL_CONFIG_HORIZ_THRESHOLD_COMPLETE }, |
{ prefs::kOverscrollVerticalThresholdComplete, |
@@ -48,12 +54,62 @@ class GesturePrefsObserver : public ProfileKeyedService { |
OVERSCROLL_CONFIG_HORIZ_RESIST_AFTER }, |
{ prefs::kOverscrollVerticalResistThreshold, |
OVERSCROLL_CONFIG_VERT_RESIST_AFTER }, |
- { NULL, |
- OVERSCROLL_CONFIG_NONE }, |
}; |
+ overscroll_prefs.assign(kOverscrollPrefs, |
+ kOverscrollPrefs + arraysize(kOverscrollPrefs)); |
+ } |
+ return overscroll_prefs; |
+} |
+ |
+#if defined(USE_ASH) |
+struct WorkspaceCyclerPref { |
+ const char* pref_name; |
+ WorkspaceCyclerConfiguration::Property property; |
+}; |
- return overscroll_prefs; |
+const std::vector<WorkspaceCyclerPref>& GetWorkspaceCyclerPrefs() { |
+ CR_DEFINE_STATIC_LOCAL(std::vector<WorkspaceCyclerPref>, cycler_prefs, ()); |
+ if (cycler_prefs.empty() && WorkspaceCyclerConfiguration::IsCyclerEnabled()) { |
+ const WorkspaceCyclerPref kCyclerPrefs[] = { |
+ { prefs::kWorkspaceCyclerShallowerThanSelectedYOffsets, |
+ WorkspaceCyclerConfiguration::SHALLOWER_THAN_SELECTED_Y_OFFSETS }, |
+ { prefs::kWorkspaceCyclerDeeperThanSelectedYOffsets, |
+ WorkspaceCyclerConfiguration::DEEPER_THAN_SELECTED_Y_OFFSETS }, |
+ { prefs::kWorkspaceCyclerSelectedYOffset, |
+ WorkspaceCyclerConfiguration::SELECTED_Y_OFFSET }, |
+ { prefs::kWorkspaceCyclerSelectedScale, |
+ WorkspaceCyclerConfiguration::SELECTED_SCALE }, |
+ { prefs::kWorkspaceCyclerMinScale, |
+ WorkspaceCyclerConfiguration::MIN_SCALE }, |
+ { prefs::kWorkspaceCyclerMaxScale, |
+ WorkspaceCyclerConfiguration::MAX_SCALE }, |
+ { prefs::kWorkspaceCyclerMinBrightness, |
+ WorkspaceCyclerConfiguration::MIN_BRIGHTNESS }, |
+ { prefs::kWorkspaceCyclerBackgroundOpacity, |
+ WorkspaceCyclerConfiguration::BACKGROUND_OPACITY }, |
+ { prefs::kWorkspaceCyclerDistanceToInitiateCycling, |
+ WorkspaceCyclerConfiguration::DISTANCE_TO_INITIATE_CYCLING }, |
+ { prefs::kWorkspaceCyclerScrollDistanceToCycleToNextWorkspace, |
+ WorkspaceCyclerConfiguration:: |
+ SCROLL_DISTANCE_TO_CYCLE_TO_NEXT_WORKSPACE }, |
+ { prefs::kWorkspaceCyclerCyclerStepAnimationDurationRatio, |
+ WorkspaceCyclerConfiguration::CYCLER_STEP_ANIMATION_DURATION_RATIO }, |
+ { prefs::kWorkspaceCyclerStartCyclerAnimationDuration, |
+ WorkspaceCyclerConfiguration::START_CYCLER_ANIMATION_DURATION }, |
+ { prefs::kWorkspaceCyclerStopCyclerAnimationDuration, |
+ WorkspaceCyclerConfiguration::STOP_CYCLER_ANIMATION_DURATION }, |
+ }; |
+ cycler_prefs.assign(kCyclerPrefs, kCyclerPrefs + arraysize(kCyclerPrefs)); |
} |
+ return cycler_prefs; |
+} |
+#endif // USE_ASH |
+ |
+// This class manages gesture configuration preferences. |
+class GesturePrefsObserver : public ProfileKeyedService { |
+ public: |
+ explicit GesturePrefsObserver(PrefService* prefs); |
+ virtual ~GesturePrefsObserver(); |
// ProfileKeyedService implementation. |
virtual void Shutdown() OVERRIDE; |
@@ -71,6 +127,7 @@ class GesturePrefsObserver : public ProfileKeyedService { |
// Notification helper to push overscroll preferences into |
// content. |
void UpdateOverscrollPrefs(); |
+ void UpdateWorkspaceCyclerPrefs(); |
PrefChangeRegistrar registrar_; |
PrefService* prefs_; |
@@ -109,14 +166,6 @@ const char* kPrefsToObserve[] = { |
prefs::kSemiLongPressTimeInSeconds, |
}; |
-const char* kOverscrollPrefs[] = { |
- prefs::kOverscrollHorizontalThresholdComplete, |
- prefs::kOverscrollVerticalThresholdComplete, |
- prefs::kOverscrollMinimumThresholdStart, |
- prefs::kOverscrollHorizontalResistThreshold, |
- prefs::kOverscrollVerticalResistThreshold, |
-}; |
- |
const char* kFlingTouchpadPrefs[] = { |
prefs::kFlingCurveTouchpadAlpha, |
prefs::kFlingCurveTouchpadBeta, |
@@ -141,13 +190,22 @@ GesturePrefsObserver::GesturePrefsObserver(PrefService* prefs) |
for (size_t i = 0; i < arraysize(kPrefsToObserve); ++i) |
registrar_.Add(kPrefsToObserve[i], callback); |
- for (size_t i = 0; i < arraysize(kOverscrollPrefs); ++i) |
- registrar_.Add(kOverscrollPrefs[i], callback); |
+ |
+ const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs(); |
+ for (size_t i = 0; i < overscroll_prefs.size(); ++i) |
+ registrar_.Add(overscroll_prefs[i].pref_name, callback); |
for (size_t i = 0; i < arraysize(kFlingTouchpadPrefs); ++i) |
registrar_.Add(kFlingTouchpadPrefs[i], notify_callback); |
for (size_t i = 0; i < arraysize(kFlingTouchscreenPrefs); ++i) |
registrar_.Add(kFlingTouchscreenPrefs[i], notify_callback); |
+ |
+#if defined(USE_ASH) |
+ const std::vector<WorkspaceCyclerPref>& cycler_prefs = |
+ GetWorkspaceCyclerPrefs(); |
+ for (size_t i = 0; i < cycler_prefs.size(); ++i) |
+ registrar_.Add(cycler_prefs[i].pref_name, callback); |
+#endif // USE_ASH |
} |
GesturePrefsObserver::~GesturePrefsObserver() {} |
@@ -230,17 +288,35 @@ void GesturePrefsObserver::Update() { |
prefs::kRailStartProportion)); |
UpdateOverscrollPrefs(); |
+ UpdateWorkspaceCyclerPrefs(); |
} |
void GesturePrefsObserver::UpdateOverscrollPrefs() { |
- const OverscrollPref* overscroll_prefs = |
- GesturePrefsObserver::GetOverscrollPrefs(); |
- for (int i = 0; overscroll_prefs[i].pref_name; ++i) { |
+ const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs(); |
+ for (size_t i = 0; i < overscroll_prefs.size(); ++i) { |
content::SetOverscrollConfig(overscroll_prefs[i].config, |
static_cast<float>(prefs_->GetDouble(overscroll_prefs[i].pref_name))); |
} |
} |
+void GesturePrefsObserver::UpdateWorkspaceCyclerPrefs() { |
+#if defined(USE_ASH) |
+ const std::vector<WorkspaceCyclerPref>& cycler_prefs = |
+ GetWorkspaceCyclerPrefs(); |
+ for (size_t i = 0; i < cycler_prefs.size(); ++i) { |
+ WorkspaceCyclerConfiguration::Property property = |
+ cycler_prefs[i].property; |
+ if (WorkspaceCyclerConfiguration::IsListProperty(property)) { |
+ WorkspaceCyclerConfiguration::SetListValue(property, |
+ *prefs_->GetList(cycler_prefs[i].pref_name)); |
+ } else { |
+ WorkspaceCyclerConfiguration::SetDouble(property, |
+ prefs_->GetDouble(cycler_prefs[i].pref_name)); |
+ } |
+ } |
+#endif // USE_ASH |
+} |
+ |
void GesturePrefsObserver::Notify() { |
// Must do a notify to distribute the changes to all renderers. |
content::NotificationService* service = |
@@ -271,10 +347,9 @@ ProfileKeyedService* GesturePrefsObserverFactoryAura::BuildServiceInstanceFor( |
void GesturePrefsObserverFactoryAura::RegisterOverscrollPrefs( |
PrefRegistrySyncable* registry) { |
- const OverscrollPref* overscroll_prefs = |
- GesturePrefsObserver::GetOverscrollPrefs(); |
+ const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs(); |
- for (int i = 0; overscroll_prefs[i].pref_name; ++i) { |
+ for (size_t i = 0; i < overscroll_prefs.size(); ++i) { |
registry->RegisterDoublePref( |
overscroll_prefs[i].pref_name, |
content::GetOverscrollConfig(overscroll_prefs[i].config), |
@@ -297,6 +372,29 @@ void GesturePrefsObserverFactoryAura::RegisterFlingCurveParameters( |
PrefRegistrySyncable::UNSYNCABLE_PREF); |
} |
+void GesturePrefsObserverFactoryAura::RegisterWorkspaceCyclerPrefs( |
+ PrefRegistrySyncable* registry) { |
+#if defined(USE_ASH) |
+ const std::vector<WorkspaceCyclerPref>& cycler_prefs = |
+ GetWorkspaceCyclerPrefs(); |
+ for (size_t i = 0; i < cycler_prefs.size(); ++i) { |
+ WorkspaceCyclerConfiguration::Property property = |
+ cycler_prefs[i].property; |
+ if (WorkspaceCyclerConfiguration::IsListProperty(property)) { |
+ registry->RegisterListPref( |
+ cycler_prefs[i].pref_name, |
+ WorkspaceCyclerConfiguration::GetListValue(property).DeepCopy(), |
+ PrefRegistrySyncable::UNSYNCABLE_PREF); |
+ } else { |
+ registry->RegisterDoublePref( |
+ cycler_prefs[i].pref_name, |
+ WorkspaceCyclerConfiguration::GetDouble(property), |
+ PrefRegistrySyncable::UNSYNCABLE_PREF); |
+ } |
+ } |
+#endif // USE_ASH |
+} |
+ |
void GesturePrefsObserverFactoryAura::DeprecatedRegisterUserPrefs( |
PrefService* prefs, |
PrefRegistrySyncable* registry) { |
@@ -415,6 +513,7 @@ void GesturePrefsObserverFactoryAura::DeprecatedRegisterUserPrefs( |
RegisterOverscrollPrefs(registry); |
RegisterFlingCurveParameters(registry); |
+ RegisterWorkspaceCyclerPrefs(registry); |
} |
bool GesturePrefsObserverFactoryAura::ServiceIsCreatedWithProfile() const { |