The current way input devices are setup and handled is flawed in thus
far that it does not allow for any soft of useful flexbility and is, for
a bigger part, not working either.
I suggest to do the following to everything input related on GIMP:
0) Add a "Pan" tool to the toolbox! Mandatory!
1) Remove everything. Mousebindings. Keyboard bindings. (For the sake of
explaining it from scratch - not necessarily techincally)
2) Add a generic "Configure Input Devices" options dialog/section, this
unifies Extended Input Devices, Mice and Keyboards and obsoletes the
possiblity of using the event-nodes directly (such things do not belong
in any X program!).
X-Input provides a generic layer for input, Gimp should use it and
align itself to it, not reinvent a broken wheel.
Every xinput device as shown by "xinput list" is represented, devided
into the pointer and keyboard classes. Example (from my xinput):
⎡ Virtual core pointer id=2 [master pointer
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer
⎜ ↳ Wacom ISDv4 E3 Finger touch id=10 [slave pointer
⎜ ↳ Wacom ISDv4 E3 Pen stylus id=11 [slave pointer
⎜ ↳ SynPS/2 Synaptics TouchPad id=13 [slave pointer
⎜ ↳ Wacom ISDv4 E3 Pen eraser id=15 [slave pointer
⎜ ↳ Genius 4D Scroll Mouse id=16 [slave pointer
⎣ Virtual core keyboard id=3 [master keyboard
↳ Virtual core XTEST keyboard id=5 [slave keyboard
↳ Power Button id=6 [slave keyboard
↳ Video Bus id=7 [slave keyboard
↳ Video Bus id=8 [slave keyboard
↳ Power Button id=9 [slave keyboard
↳ AT Translated Set 2 keyboard id=12 [slave keyboard
↳ HP WMI hotkeys id=14 [slave keyboard
↳ Chicony USB Keyboard id=17 [slave keyboard
3) Everything handled is generically, the only difference is made
between keyboards and pointers
4) Both, keyboards and pointers provide the following per-device
** Key/Button => GIMP Action (as currently exposed through the keyboard
5) In addition, pointer devices provide the following:
** Channel mappings (similar to what already exists): That is, every
available channel that is exposed through XInput can be mapped to either
...etc, you know the rest...
If a certain value is not mapped on a device (such as Pressure not being mapped
on #16), GIMP will optain the data from the CorePointer
** Associated toolset: If this option is enabled, a tool is associated with
the device and settings for that tool are associated with the device.
That tool is made the active tool, and the settings the active settings ,
when the device is used.
If the option is disabled for a device, the associated tool will be that
of the last-used device, so changing settings or the tool will change
the associated tool / associated settigns for the last used device. If
the last used device doesn't have an associated toolset either, this
recurses to the last used device with an associated toolset.
This option is necessarily enabled for the Corepointer.
** Dedicated Color
** Dedicated Gradient
** Dedicated Pattern
** Dedicated Brush: Similar to above.
Gimp-developer mailing list