version 0.4.0 v0.4.0
authorMats Johannesson <devel@bredband.net>
Thu, 26 Jun 2008 18:52:03 +0000 (14:52 -0400)
committerAristeu Rozanski <arozansk@redhat.com>
Thu, 26 Jun 2008 18:52:03 +0000 (14:52 -0400)
commit644688e2932bd34a096b9c21d526537cfec530a8
tree6ebf5ec1f74708ab8b524e6827028fae0f5a4d47
parent959bd3029ada7a07f4002584af5f1abfc8551fde
version 0.4.0
OBSERVE: linuxwacom-0.7.5-2 or greater is now required for ALL tablets!

I would most prominently like to thank Magnus Vigerlof. His initial code
review of expresskeys 0.3.0 sparked an interest in refactoring. When Graphire4
was tacked on in 0.3.1 it became obvious that the code needed a total rewrite.
Since then I've forced myself on Magnus whenever a bit of guidance has been
sought. His suggestions, always technically sound and never patronizing, have
influenced my decisions to quite a degree. The resulting code however, can not
be blamed on anyone but me. The Sorcerer's Apprentice from Fantasia conveys a
proper guilt dispersion...

* A maximum of fifteen tablets (three of each model), and two styli per tablet,
are now handled concurrently.

'Models': nopad, Graphire4 BlueTooth, Graphire4, Intuos3 small, Intuos3/Cintiq

Corresponding configuration files, for each connected tablet, are differentiated
through their suffixes (.conf1 .conf2 .conf3): padless.conf1/2/3,
graphire4bt.conf1/2/3, graphire4.conf1/2/3, intuos3s.conf1/2/3 and
intuos3.conf1/2/3.

Observe that the files _not_ are locked to specific tablets. On program start
the first found tablet of a certain model gets to use the .conf1 file, etc.

To aid in configuration/debugging and possibly help external programs to
make an educated guess about the current connections, we print out easily
parsed lines in the status.log (and to the screen in -v[erbose] mode) Eg:

/home/loke/.expresskeys/status.log

[...]
OUR CNFFILE = /home/loke/.expresskeys/intuos3.conf1
ConfigVersion-user = 4
ConfigVersion-ours = 4
CurrentPad  = pad1i3
CurrentSty1 = stylus1i3
CurrentSty2 = LACKING

[...]
OUR CNFFILE = /home/loke/.expresskeys/graphire4.conf1
ConfigVersion-user = 4
ConfigVersion-ours = 4
CurrentPad  = pad1g4
CurrentSty1 = stylus1g4
CurrentSty2 = LACKING

* A maximum of 32 keycodes can now be sent with each tablet button press
(Touch Strip movement/Scroll Wheel up-down). Because of this, all the "Plus"
fields from prior configuration file versions have been eliminated in
ConfigVersion 4.

Since a ConfigVersion 3 only will be correctly parsed on the first read,
not on re-reads, we do not support that version at all. Sorry, it became too
convoluted a code to retain backwards compatibility.

* Control of button auto-repeat has been implemented. No longer is X in charge,
wildly spewing out keycodes at the merest hint of a lingering button press.
Henceforth each and every button can have auto-repeat turned off or on,
depending on taste and target window (program). Also, as a sanity measure, the
auto-repeat will teminate on a focus-window change:

RepeatButton9/etc (I3), RepeatLeft/RepeatRight (G4) - Switch 1/0

Furthermore, we now have configurable delays:

ButtonRepeatAfter (wait before starting auto-repeat) - 0.01 to 10 seconds
DelayButtonRepeat (wait between each repetition) - 0.01 to 10 seconds

* Touch Strip auto-repeat has been implemented for the top and bottom positions:

RepeatLeftUp/RepeatLeftDown/etc - Switch 1/0
TouchRepeatAfter (wait before starting auto-repeat) - 0.01 to 10 seconds
DelayTouchRepeat (wait between each repetition) - 0.01 to 10 seconds

* To finalize the control aspect, a delay between each keycode sent can be
added. While reading a Wacom support forum (Windows/Mac only) I saw a
user asking for this feature. A target program of his would choke on the
keys coming in, since they came too fast. He had tried delaying by the use of
'dummy' keys like Escape and Space, but that could not rectify the problem.

So here we have a feature not (yet) available in the Win/Mac experience:

DelayEachKeycode (wait between sending of each keycode) - 0.01 to 10 seconds

* More fake keycodes. This time to implement tablet rotation from a button.
And, as I've gradually have seen a benefit to changing the stylus PressCurve
interactively from a button, make the user aware of that option by writing
it out in a first-time created configuration file (and in the USAGE file).
The implementation has been available ever since version 0.2.2, but the
documentation only in that ChangeLog entry - which nobody reads...

Here is a verbatim quote from the USAGE file:

+ Fake keycodes: 1001, 1002, 1003 +
Instead of defining a fixed stylus PressCurve for different program blocks,
you can use three values as keycodes to alter the curve interactively. 1001
will decrease the PressCurve, while 1003 will increase it. 1002 restores the
curve to its default state: "0 0 100 100". Both the upward and downward curve
changes flip over in a carousel fashion at the top and bottom values.

+ Fake keycodes: 1004, 1005, 1006, 1007, 1008, 1009 +
Use the value 1004 to return from a tablet rotation (NONE), 1005 to flip a
tablet 180 degrees (HALF), 1006 to rotate 90 degrees clock-wise (CW) and
1007 to rotate 90 degrees counter-clock-wise (CCW). By using 1008 you can
rotate the tablet endlessly in a clock-wise manner (CW-HALF-CCW-NONE-CW-)
and 1009 does the same motion counter-clock-wise (CCW-HALF-CW-NONE-CCW-).
Looking down on the tablet and tilting the head '90' degrees to the right
would simulate a CW operation.

* The code refactoring has of course enhanced the quality in many ways not
immediately obvious to the user. For example: We now filter out any illegal
keycode already at the configuration read stage; there is a more accurate
detection of whether a PID-file is 'live' or not; tablets defined in xorg.conf
but not plugged in at program start will not cause a termination with
"BadDevice, invalid or uninitialized input device" (though at least ONE
tablet must be connected at program start, otherwise we exit).

If I've forgotten to mention anything new in 0.4.0 you can always read the
code. It is very easy nowadays since no line stretches beyond column 80 (with
a tab-size of 8), and a lot of other coding conventions are followed as well.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Important: If you use the linuxwacom-0.6.7-beta or in the future
released versions you must change the pad statement in X config
file to:

Section "ServerLayout"
[...]
InputDevice "pad" # Intuos3 or Cintiq 21UX. It must NOT send core event
[...]
EndSection

See: http://linuxwacom.sourceforge.net/index.php/howto/srvlayout

If you use the old pad statement, any pad button press will jump the
mouse cursor to the upper left corner (0,0) when another tool isn't
in proximity.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Run example: expresskeys pad &
Which will push it into the background. It is safe to close the terminal
afterwards. Oh, and X _must_ be running... The name, "pad" here, is
how it's called in xorg.conf (the "Identifier" option).

Update example 17 March 2005: Myself I've put it in the .xinitrc as
"exec /usr/local/bin/expresskeys pad &" (without quotes) right before
the window manager is started.

Key configuration is easy to change in the "user config area" below.
Use the "xev" program to find keycodes or look them up somewhere...
I've set the Wacom Intuos3 defaults on both sides, which is:
Shift, Alt, Control and Space. Touch strips are mildly supported.

Note 2 April 2005: Sometimes desktops or window managers "steal"
certain keypresses/combinations. If you experience that, look for
a way to change the keybindings of your environment.
37 files changed:
BUGS
COPYING
ChangeLog
ChangeLog.3 [new file with mode: 0644]
Copyright
INSTALL
Makefile.in
NEWS
README
TODO
USAGE
aclocal.m4
configure
configure.in
depcomp
install-sh
missing
src-expresskeys/Makefile.am
src-expresskeys/Makefile.in
src-expresskeys/command_line.c [new file with mode: 0644]
src-expresskeys/config_read.c
src-expresskeys/config_write.c
src-expresskeys/defines.h [new file with mode: 0644]
src-expresskeys/event_loop.c
src-expresskeys/exec_shell.c [deleted file]
src-expresskeys/get_device.c
src-expresskeys/globals.c [deleted file]
src-expresskeys/globals.h [deleted file]
src-expresskeys/main_setup.c
src-expresskeys/mark_info.c [new file with mode: 0644]
src-expresskeys/misc_func.c [new file with mode: 0644]
src-expresskeys/on_error.c
src-expresskeys/on_signal.c
src-expresskeys/pen_mode.c [deleted file]
src-expresskeys/reg_events.c [deleted file]
src-expresskeys/tablet.c [new file with mode: 0644]
src-expresskeys/tablet.h [new file with mode: 0644]