The directory libgstroke contains a work-in-progress GNOME stroke
implementation. The goal is to have a stroke library that integrates
nicely in GNOME.
This is a proof of concept implementation, it works quite well, but we
would like to get some feedback from knowledgeable GNOME/Gtk hackers
1. the API. Is it good enough? Anything else that should be added?
Any name change suggestions?
2. the implementation. Is the event handling correct? Is it
correct to call the stroke functions the way libgstroke does
it? (see how gstroke_execute is called)
A warning for potential libgstroke users: the API might (and probably
Being the first release of libgstroke, probably many thing
Suggestions for changes are more than welcome,
patches even more so.
To enable strokes for a widget the application needs to call:
gstroke_enable (GtkWidget* widget);
gstroke_signal_connect (widget, STROKE_STRING1, FUNCTION1, DATA1);
gstroke_signal_connect (widget, STROKE_STRING2, FUNCTION2, DATA2);
(gstroke_signal_connect is modelled after gtk_signal_connect)
STROKE_STRING* is a stroke string in the format described in
the README file (eg "456" for a horizontal left-to-right stroke).
FUNCTION* is a GtkSignalFunc type function.
DATA* is a gpointer to some private data (similar in usage to
if the STROKE_STRING1 stroke is recognized FUNCTION1 is called
like this: (*FUNCTION1)(widget, DATA1);
When the widget is destroyed the gstroke_cleanup (widget) function
should be called to free the allocated memory (is there a way to do
Look in tests/gnome_stroke_test.c for an example of how easy to use
the libgstroke library is!
The implementation contains an event loop that is run when the
GSTROKE_MOUSE_BUTTON (2 by default) mouse button is pressed. When the
stroke is finished, if it is recognized, the corresponding function
is executed and the event loop exits.
The files that are installed by make install are gstroke.h and the
The AC_CHECK_LIBGSTROKE autoconf macro is defined in
libgstroke.m4, use it in programs that need autoconf tests for
The file libgstroke/TODO contains the TODO items for libgstroke.