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

Unified Diff: chrome/browser/chromeos/system/input_device_settings.cc

Issue 9250023: Support for mousecontrol script (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: nits Created 8 years, 11 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
« no previous file with comments | « chrome/browser/chromeos/system/input_device_settings.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/system/input_device_settings.cc
===================================================================
--- chrome/browser/chromeos/system/input_device_settings.cc (revision 118124)
+++ chrome/browser/chromeos/system/input_device_settings.cc (working copy)
@@ -4,6 +4,7 @@
#include "chrome/browser/chromeos/system/input_device_settings.h"
+#include <stdarg.h>
#include <string>
#include <vector>
@@ -22,17 +23,24 @@
namespace chromeos {
namespace system {
-namespace touchpad_settings {
namespace {
const char* kTpControl = "/opt/google/touchpad/tpcontrol";
+const char* kMouseControl = "/opt/google/mouse/mousecontrol";
xiyuan 2012/01/19 20:49:40 nit: think the preferred way to define string cons
achuithb 2012/01/19 22:19:04 Done.
-bool TPCtrlExists() {
- return file_util::PathExists(FilePath(kTpControl));
+bool ScriptExists(const std::string& script) {
+ return file_util::PathExists(FilePath(script));
}
-// Launches the tpcontrol command asynchronously, if it exists.
-void LaunchTpControl(const std::vector<std::string>& argv) {
- if (!TPCtrlExists())
+// Executes the input control script asynchronously, if it exists.
+void ExecuteScriptOnFileThread(const std::vector<std::string>& argv) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+ DCHECK(!argv.empty());
+ const std::string& script(argv[0]);
+
+ // Script must exist on device.
+ DCHECK(!runtime_environment::IsRunningOnChromeOS() || ScriptExists(script));
+
+ if (!ScriptExists(script))
return;
base::LaunchOptions options;
@@ -40,74 +48,79 @@
base::LaunchProcess(CommandLine(argv), options, NULL);
}
-} // namespace
+void ExecuteScript(int argc, ...) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ std::vector<std::string> argv;
+ va_list vl;
+ va_start(vl, argc);
+ for (int i = 0; i < argc; ++i) {
+ argv.push_back(va_arg(vl, const char*));
+ }
+ va_end(vl);
-bool TouchpadExists() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- static bool init = false;
- static bool exists = false;
+ BrowserThread::PostTask(
+ BrowserThread::FILE, FROM_HERE,
+ base::Bind(&ExecuteScriptOnFileThread, argv));
+}
- if (init)
- return exists;
+void SetPointerSensitivity(const char* script, int value) {
+ DCHECK(value > 0 && value < 6);
+ ExecuteScript(3, script, "sensitivity", StringPrintf("%d", value).c_str());
+}
- init = true;
- if (!TPCtrlExists())
- return exists;
+bool DeviceExists(const char* script) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+ if (!ScriptExists(script))
+ return false;
std::vector<std::string> argv;
- argv.push_back(kTpControl);
+ argv.push_back(script);
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;
+ // Output is empty if the device is not found.
+ return base::GetAppOutput(CommandLine(argv), &output) && !output.empty();
}
-void SetSensitivity(int value) {
- // Run this on the FILE thread.
- if (!BrowserThread::CurrentlyOn(BrowserThread::FILE)) {
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- base::Bind(&SetSensitivity, value));
- return;
- }
+} // namespace
- std::vector<std::string> argv;
- argv.push_back(kTpControl);
- argv.push_back("sensitivity");
- argv.push_back(StringPrintf("%d", value));
+namespace pointer_settings {
- LaunchTpControl(argv);
+void SetSensitivity(int value) {
+ SetPointerSensitivity(kTpControl, value);
+ SetPointerSensitivity(kMouseControl, value);
}
-void SetTapToClick(bool enabled) {
- // Run this on the FILE thread.
- if (!BrowserThread::CurrentlyOn(BrowserThread::FILE)) {
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- base::Bind(&SetTapToClick, enabled));
- return;
- }
+} // namespace pointer_settings
- std::vector<std::string> argv;
- argv.push_back(kTpControl);
- argv.push_back("taptoclick");
- argv.push_back(enabled ? "on" : "off");
+namespace touchpad_settings {
- LaunchTpControl(argv);
+bool TouchpadExists() {
+ // We only need to do this check once, assuming no pluggable touchpad devices.
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+ static bool init = false;
+ static bool exists = false;
+
+ if (!init) {
+ init = true;
+ exists = DeviceExists(kTpControl);
+ }
+ return exists;
}
+void SetTapToClick(bool enabled) {
+ ExecuteScript(3, kTpControl, "taptoclick", enabled ? "on" : "off");
+}
+
} // namespace touchpad_settings
namespace mouse_settings {
bool MouseExists() {
- // TODO(achuith, adlr): Call mouse_ctrl when it exists.
- return false;
+ return DeviceExists(kMouseControl);
}
void SetPrimaryButtonRight(bool right) {
- // TODO(achuith, adlr): Call mouse_ctrl when it exists.
+ ExecuteScript(3, kMouseControl, "swap_left_right", right ? "1" : "0");
}
} // namespace mouse_settings
« no previous file with comments | « chrome/browser/chromeos/system/input_device_settings.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698