diff options
author | achuith@chromium.org <achuith@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-17 09:13:32 +0000 |
---|---|---|
committer | achuith@chromium.org <achuith@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-17 09:13:32 +0000 |
commit | dd7e33ec3ac74ef2313f0b81cdb2a2750eae5a04 (patch) | |
tree | 17f961a8298efac75fcccba47837f4d870122222 | |
parent | 482a0b54a4edbc389446d393a0362071704b3256 (diff) | |
download | chromium_src-dd7e33ec3ac74ef2313f0b81cdb2a2750eae5a04.zip chromium_src-dd7e33ec3ac74ef2313f0b81cdb2a2750eae5a04.tar.gz chromium_src-dd7e33ec3ac74ef2313f0b81cdb2a2750eae5a04.tar.bz2 |
Disable touchpad settings for non-touchpad devices in 912
BUG=chromium-os:21361
TEST=System options on non-touchpad device should not show touchpad settings.
Review URL: http://codereview.chromium.org/8564023
git-svn-id: svn://svn.chromium.org/chrome/branches/912/src@110474 0039d316-1c4b-4281-b951-d872f2087c98
6 files changed, 65 insertions, 13 deletions
diff --git a/chrome/browser/chromeos/system/touchpad_settings.cc b/chrome/browser/chromeos/system/touchpad_settings.cc index 0257cc1..449bdc5 100644 --- a/chrome/browser/chromeos/system/touchpad_settings.cc +++ b/chrome/browser/chromeos/system/touchpad_settings.cc @@ -19,24 +19,40 @@ namespace system { namespace touchpad_settings { namespace { const char* kTpControl = "/opt/google/touchpad/tpcontrol"; -} // namespace + +bool TPCtrlExists() { + return file_util::PathExists(FilePath(kTpControl)); +} // Launches the tpcontrol command asynchronously, if it exists. void LaunchTpControl(const std::vector<std::string>& argv) { - if (!system::runtime_environment::IsRunningOnChromeOS()) { - // Do nothing on Linux desktop, as the command does not exist. + if (!TPCtrlExists()) return; - } - if (!file_util::PathExists(FilePath(argv[0]))) { - LOG(ERROR) << argv[0] << " not found"; - return; - } + base::LaunchProcess(CommandLine(argv), base::LaunchOptions(), NULL); +} - base::LaunchOptions options; - options.wait = false; // Launch asynchronously. +} // namespace + +bool TouchpadExists() { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); + static bool init = false; + static bool exists = false; + + if (init) + return exists; - base::LaunchProcess(CommandLine(argv), options, NULL); + init = true; + if (!TPCtrlExists()) + return exists; + + std::vector<std::string> argv; + argv.push_back(kTpControl); + argv.push_back("status"); + std::string output; + // On devices with no touchpad, output is empty. + exists = base::GetAppOutput(CommandLine(argv), &output) && !output.empty(); + return exists; } void SetSensitivity(int value) { diff --git a/chrome/browser/chromeos/system/touchpad_settings.h b/chrome/browser/chromeos/system/touchpad_settings.h index acb940d..ed8b310 100644 --- a/chrome/browser/chromeos/system/touchpad_settings.h +++ b/chrome/browser/chromeos/system/touchpad_settings.h @@ -10,6 +10,8 @@ namespace chromeos { namespace system { namespace touchpad_settings { +bool TouchpadExists(); + // Sets the touchpad sensitivity in range from 1 to 5. void SetSensitivity(int value); diff --git a/chrome/browser/resources/options/chromeos/system_options.html b/chrome/browser/resources/options/chromeos/system_options.html index b870812..a6c2563 100644 --- a/chrome/browser/resources/options/chromeos/system_options.html +++ b/chrome/browser/resources/options/chromeos/system_options.html @@ -33,7 +33,7 @@ </div> </section> </if> - <section> + <section id="touchpad-controls" hidden> <h3 i18n-content="touchpad"></h3> <div class="option-control-table"> <span class="option-name" i18n-content="sensitivity"></span> diff --git a/chrome/browser/resources/options/chromeos/system_options.js b/chrome/browser/resources/options/chromeos/system_options.js index 75c8777..0b4e9dd 100644 --- a/chrome/browser/resources/options/chromeos/system_options.js +++ b/chrome/browser/resources/options/chromeos/system_options.js @@ -163,6 +163,13 @@ cr.define('options', function() { }, 2000); } + /** + * Displays the Touchpad Controls section when we detect a touchpad. + */ + SystemOptions.showTouchpadControls = function() { + $('touchpad-controls').hidden = false; + }; + // Export return { SystemOptions: SystemOptions diff --git a/chrome/browser/ui/webui/options/chromeos/system_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/system_options_handler.cc index d465645..89f3e0f 100644 --- a/chrome/browser/ui/webui/options/chromeos/system_options_handler.cc +++ b/chrome/browser/ui/webui/options/chromeos/system_options_handler.cc @@ -20,6 +20,7 @@ #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" #include "chrome/browser/chromeos/dbus/power_manager_client.h" #include "chrome/browser/chromeos/language_preferences.h" +#include "chrome/browser/chromeos/system/touchpad_settings.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/profiles/profile.h" @@ -35,6 +36,14 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" +namespace { + +void TouchpadExistsFileThread(bool* exists) { + *exists = chromeos::system::touchpad_settings::TouchpadExists(); +} + +} + SystemOptionsHandler::SystemOptionsHandler() : chromeos::CrosOptionsPageUIHandler( new chromeos::SystemSettingsProvider()) { @@ -128,6 +137,18 @@ void SystemOptionsHandler::Initialize() { web_ui_->CallJavascriptFunction( "options.SystemOptions.showBluetoothSettings"); } + + bool* exists = new bool; + BrowserThread::PostTaskAndReply(BrowserThread::FILE, FROM_HERE, + base::Bind(&TouchpadExistsFileThread, exists), + base::Bind(&SystemOptionsHandler::TouchpadExists, AsWeakPtr(), exists)); +} + +void SystemOptionsHandler::TouchpadExists(bool* exists) { + if (*exists) + web_ui_->CallJavascriptFunction( + "options.SystemOptions.showTouchpadControls"); + delete exists; } void SystemOptionsHandler::RegisterMessages() { diff --git a/chrome/browser/ui/webui/options/chromeos/system_options_handler.h b/chrome/browser/ui/webui/options/chromeos/system_options_handler.h index 082e6df..ff2a76c 100644 --- a/chrome/browser/ui/webui/options/chromeos/system_options_handler.h +++ b/chrome/browser/ui/webui/options/chromeos/system_options_handler.h @@ -6,6 +6,7 @@ #define CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_SYSTEM_OPTIONS_HANDLER_H_ #pragma once +#include "base/memory/weak_ptr.h" #include "chrome/browser/ui/webui/options/chromeos/cros_options_page_ui_handler.h" namespace base { @@ -13,7 +14,9 @@ class DictionaryValue; } // ChromeOS system options page UI handler. -class SystemOptionsHandler : public chromeos::CrosOptionsPageUIHandler { +class SystemOptionsHandler + : public chromeos::CrosOptionsPageUIHandler, + public base::SupportsWeakPtr<SystemOptionsHandler> { public: SystemOptionsHandler(); virtual ~SystemOptionsHandler(); @@ -56,6 +59,9 @@ class SystemOptionsHandler : public chromeos::CrosOptionsPageUIHandler { // Called when emulating ChromeOS from a desktop environment. void GenerateFakeDeviceList(); + // Callback for TouchpadHelper. + void TouchpadExists(bool* exists); + DISALLOW_COPY_AND_ASSIGN(SystemOptionsHandler); }; |