Sophie

Sophie

distrib > CentOS > 5 > x86_64 > by-pkgid > 73e6c38676b8c23d937908e678ddd00b > files > 4

wacomexpresskeys-0.4.1-2.el5.x86_64.rpm


_Known bugs marked with FIXME in the code_

! Return errors are not caught from the system(3) call, only straight errors
(e.g. fork() failed). So we never actually know if xsetwacom did its job
properly when changing stylus PressCurve or doing tablet Rotate.

_Known bugs, unmarked_

! Pressing a pad button with one program window in focus, moving the focus to
another program window and then releasing the button, probably leaves the first
program in a confused mind regarding the keyboard state. Returning the focus and
pressing the button again (or another that has an effect) restores the sanity.

_NOTABUG_

[NOTE: The story below was written when I only owned an Intuos3 tablet. Having
bought a Graphire4, I was pleased/shocked to see the stylus behaving _perfectly_
even with Qt-based programs! Both ButtonPress and ProximityIn/Out were
propagated through the Xlib environment exactly as they should. Could there be
a bug in the linuxwacom drivers instead of one in Qt? Had I judged too quickly?

Asking a Volito2 owner (who also happens to be a skilled programmer) about the
stylus-issue did not clear the waters... ButtonPress was swallowed in KDE,
just like it was for my Intuos3. Furthermore, _ProximityOut_ never became
visible on his system.

Comparing debug output from the linuxwacom X driver, for Volito2/Graphire4
/Intuos3, showed them to be almost identical when it came to events. The driver
correctly hands X everything it should get.

I must admit to being totally confused at this point in time. Why the striking
differences between tablet models? Why Qt and not GTK+? Why, for heavens sake,
even a ProximityIn/Out discrepancy?

So, take what you read below with a grain of salt. Blame-wise I could be
barking up the wrong alley. In that case, Mea Culpa. Pardon etc etc :END NOTE]

--Begin Original Text--

Any program built with the Qt3 toolkit (like eg the KDE desktop...)
completely swallows the 'stylus' DeviceButtonPress event that we've
registered to be notified of, through the Xlib XSelectExtensionEvent
call. The same event coming from the 'pad' device is all OK, though.

This is a (deliberate?) Qt pattern where only other Qt programs,
with difficulty, can get deliverance of these low-level events. At
least that's my impression after a first round of bug-report emails
between here and there --> Qt producer company Trolltech.

Why they let 'pad' button events pass through is probably due to lack
of knowledge. They recognize an oldtimer like the 'stylus', so BAM,
grab it. But this strange 'pad' thing... better stay out of contact...

Programs based on the GTK+ toolkit like the Gnome desktop (with the
notable exception being the Gimp canvas - more about that below) do
behave appropriate vis-a-vis both the 'stylus' and 'pad' button events.

This situation has led to one design compromise (performance slippage)
in expresskeys 0.3.0, and a not wholly ideal usability pattern when
dealing with Qt3 programs.

Performance wise we take a hit by also registering for and acting on
a 'stylus' ProximityIn event. These events are not blocked by Qt3.

Execution of the "automatic change of stylus pressure sensitivity"
in a Qt3 program is achieved by first lifting the pen slightly (until
it goes out of proximity - the cursor stops being effected by pen
movement) and then lowering the pen again on the target window.

If we happen to be in Gnome, it is enough to touch the Qt3 program on
the titlebar or on its other borders (since they are GTK+ derived).

GTK+ based programs suffer no such limitation. In those we just press
the pen tip in the window, and by that action the pressure sensitivity
change is performed. Unless the target is the Gimp canvas (at least as
high as version 2.2.13)...

The Gimp canvas is even _more_ broken (in regards to our expectations)
than the Qt3 programs. Here both the 'stylus' DeviceButtonPress AND
the ProximityIn events are filtered away from interested parties.

So in order to get the automatic change of stylus pressure sensitivity
when coming in from another program window, the pen tip or side button
rocker first must engage _somwhere else_ than the canvas. Just touching
the Gimp titlebar or touching an area outside of the canvas will work.

If we happen to be in KDE while using Gimp, then a simple titlebar
touch won't work (all the borders are Qt3 derived). Here we must do the
proximity out/in trick on a part not being the canvas, or touch
somewhere else than the window borders/Gimp canvas.

[A paragraph with faulty logic was deleted. Ed.]

--End Original Text--