Creating a new specification
|Deletions are marked like this.||Additions are marked like this.|
|Line 8:||Line 8:|
|* '''Launchpad entry''': https://blueprints.launchpad.net/ubuntu/+spec/touchpad-configuration-gui||* '''Launchpad entry''': https://blueprints.launchpad.net/ubuntu/+spec/gnome-touchpad-manager|
Launchpad entry: https://blueprints.launchpad.net/ubuntu/+spec/gnome-touchpad-manager
Packages affected: gsynaptics
This spec describes how to implement a graphical touchpad preferences application, and other supporting applications (including a notification icon), to give users an easy out-of-the-box way to configure their touchpad device.
One of the problems many laptop users come across almost immediately after installing Ubuntu is that their touchpad does not work as they would like, and that there is no way to configure it.
1. Alex has just finish installing Ubuntu on his new mobile computer. At the first logon he finds the touchpad default preferences uncomfortable. He wants to tune the touchpad preferences.
2. From time to time Maria is sharing her laptop with her younger brother Tom. Tom has an unprivileged account on Maria's laptop and want to modify touchpad preferences just for his account.
3. John want to modify his touchpad behavior. While making intermediate changes he want to test the new behavior to see if he is comfortable with it.
The implementation will consist of the following applications:
- Preferences GUI application
- Notification Icon Application (shows status of device; heat map, button status, etc.)
Menu Entry: System > Preferences > Touchpad
The preferences application should:
- Support multiple devices
- Have an "advanced" button that opens a new window with all functionality of the windows driver for power users
- Auto-configure it's self to only show features supported by the current device, and it should be very easy to implement new features into the GUI (little or no code), to support new devices.
- Work without an Xorg.conf file
- Be written in Python
The preferences application should support the following basic preferences, which should be suitable for most users.
- Enable touchpad
- Sensitivity (slider)
- Edge Scrolling
- Two-finger scrolling
- Tapping sensitivity?
- Disable touchpad while typing
Here's how this is implemented on OSX:
Advanced users can click on an "Advanced" button which will give them access to every feature supported by their hardware.
synaptics(5) has a list of everything supported by the driver, we'll need to spec out how to display all these in the GUI, [http://eric.extremeboredom.net/images/screenshots/synaptics/ here's a set of screenshots] showing off how windows does this.
The primary purpose of the tray icon will be to let new users know that they can configure their touchpad right away without installing any additional software. For this reason, the tray icon should be enabled by default, but easily to disable in the preferences dialog.
Just like the tray icon included with the windows driver, the notification icon should visually display the current state of the touchpad.
- Heat map depicting where the user is pressing the pad
- Button status
<< Screenshots from windows >>
Right-clicking the tray icon should display a popup menu:
Double-clicking the tray icon should launch the preferences application.
A notification icon represents a single device, if multiple devices are present, multiple notification icons will be displayed.
- Everything here will be written in python.
TODO: Describe technical details of preferences application here.
Tray Icon Application
TODO: Describe technical details of tray icon application here.
It's important that nothing relies on the presence of an Xorg.conf file, since in the future distributions may just stop including one. Even if that doesn't ever happen, the formatting of Xorg.conf is not really designed to be parsed or written by software, and generally when software attempts to modify the file, it either breaks customizations from the user, or otherwise just pisses them off.
Instead, let's use GCONF!
Configuration will be stored at //desktop/gnome/peripherals/touchpad/DEVICEID, where DEVICEID is a unique ID from HAL. We give each device it's own sub section so we can support multiple devices with different configurations.
Under each device would be all the preferences supported by the preferences application.
Applying the configuration
We need to apply touchpad configuration upon login, which can easily be done by creating a script and a .desktop file in /usr/share/gnome/autostart/ that references it.
- Conflicts/replaces gsynaptics
- Provides "gnome-touchpad-support" or something?
Synaptics X Driver Changes
- Patch to enable SHMconfig by default so that no Xorg.conf is required.
Ubuntu Installer - We need some way for the Ubuntu installer to detect touchpad hardware (or perhaps simply that a laptop is present) and automatically install this package.
Hardware detection (post install) - It would be great if there was some way Ubuntu could prompt the user to install this software if a touchpad is added post-install, such as a USB touchpad device. It's probably not worth building right now if we don't have any other uses, but something like this could certainly benifit other devices, especially with the upcoming real input device hotplugging in Xorg 7.3. Could restricted-manager be refactored to support all hardware, including that with free (non-main) software?
Applying configuration - Are there any other places we need to apply configuration, such as in the case of fast user switching?
I'd like to suggest you put work into getting the default touchpad behaviour just right. I had to go back to windows purely because the touchpad feels so horrible, the click sensitivity is too high, etc. The windows defaults for synaptic drivers are perfect. Also see https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-input-synaptics/+bug/113278. Mike.