| 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..66fbc0e4d26c0adb3616d9c18047c99267316cfe 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,11 @@
|
| #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
|
| +
|
| +using ash::WorkspaceCyclerConfiguration;
|
| using ui::GestureConfiguration;
|
|
|
| namespace {
|
| @@ -29,15 +36,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 +51,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 +124,7 @@ class GesturePrefsObserver : public ProfileKeyedService {
|
| // Notification helper to push overscroll preferences into
|
| // content.
|
| void UpdateOverscrollPrefs();
|
| + void UpdateWorkspaceCyclerPrefs();
|
|
|
| PrefChangeRegistrar registrar_;
|
| PrefService* prefs_;
|
| @@ -109,14 +163,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 +187,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 +285,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 +344,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 +369,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 +510,7 @@ void GesturePrefsObserverFactoryAura::DeprecatedRegisterUserPrefs(
|
|
|
| RegisterOverscrollPrefs(registry);
|
| RegisterFlingCurveParameters(registry);
|
| + RegisterWorkspaceCyclerPrefs(registry);
|
| }
|
|
|
| bool GesturePrefsObserverFactoryAura::ServiceIsCreatedWithProfile() const {
|
|
|