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
bindings dialog)

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.

kind regards,
Gimp-developer mailing list

Reply via email to