Hi everyone,
after having installed the debian distro. i noticed that there is no
right mouse button. so many "standard" applications aren't usable
because they depend on it(i tried to add an applet to my xfce panel..).
so i created a patch to the xorg tslib input driver. once installed you
can press the aux button on your openmoko and than tap on the screen and
i will be recognized as right button click. i attached the patch but i
hope that it will be included in the standard package so everyone have
not to compile is by them self.
Sebastian Ohl
--- xf86-input-tslib-0.0.4.orig/debian/patches/02_leftbutton-emulation.diff
+++ xf86-input-tslib-0.0.4/debian/patches/02_leftbutton-emulation.diff
@@ -0,0 +1,105 @@
+--- xf86-input-tslib-0.0.4/src/tslib.c 2007-10-19 10:59:29.000000000 +0000
++++ xf86-input-tslib-0.0.4.2bnt/src/tslib.c 2008-08-16 13:38:06.000000000 +0000
+@@ -55,9 +55,12 @@
+ #include <xf86Module.h>
+ #endif
+
++/* openmoko second mouse button emulation */
++#include <dbus/dbus.h>
++
+ #define TSLIB_DEV_DEFAULT "/dev/event0"
+
+-#define MAXBUTTONS 1
++#define MAXBUTTONS 2
+
+ #define DEFAULT_HEIGHT 240
+ #define DEFAULT_WIDTH 320
+@@ -72,6 +75,8 @@
+ int rotate;
+ int height;
+ int width;
++ DBusConnection *dbus;
++ unsigned char secondbutton;
+ };
+
+ static const char *DEFAULTS[] = {
+@@ -168,7 +173,7 @@
+ priv->lastp = samp.pressure;
+
+ xf86PostButtonEvent(local->dev, TRUE,
+- 1, !!samp.pressure, 0, 2,
++ (priv->secondbutton?3:1), !!samp.pressure, 0, 2,
+ priv->lastx,
+ priv->lasty);
+ }
+@@ -274,6 +279,44 @@
+ }
+
+ /*
++ * button_switch_filter --
++ *
++ * called when a dbus event occured. used for detection of aux button preasure
++ */
++static DBusHandlerResult
++button_switch_filter (DBusConnection *connection, DBusMessage *message, void *user_data)
++{
++ struct ts_priv *priv = (struct ts_priv *) (user_data);
++ /* A signal from the bus saying we are about to be disconnected */
++ if (dbus_message_is_signal(message, DBUS_INTERFACE_LOCAL, "Disconnected")) {
++ /* set to first button because getting stuck in the second is not so cool */
++ priv->secondbutton = 0;
++ /* We have handled this message, don't pass it on */
++ return DBUS_HANDLER_RESULT_HANDLED;
++ }
++ /* A signal from the bus saying an input event occured */
++ else if (dbus_message_is_signal(message, "org.freesmartphone.Device.Input", "Event")) {
++ DBusError error;
++ const char *key;
++ const char *state;
++ dbus_error_init (&error);
++ if (dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &key, DBUS_TYPE_STRING, &state, DBUS_TYPE_INVALID)) {
++ /* ErrorF("Input event received: %s=%s\n", key, state); */
++ if (strncmp(key,"AUX",3) == 0) {
++ // this is threadsafe because it is only a small basic type is set
++ priv->secondbutton = (strncmp(state,"pressed",7)==0) ||
++ (strncmp(state,"held",4)==0);
++ }
++ } else {
++ ErrorF("Input event received, but error getting message: %s\n", error.message);
++ dbus_error_free (&error);
++ }
++ return DBUS_HANDLER_RESULT_HANDLED;
++ }
++ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
++}
++
++/*
+ * xf86TslibInit --
+ *
+ * called when the module subsection is found in XF86Config
+@@ -284,6 +327,7 @@
+ struct ts_priv *priv;
+ char *s;
+ InputInfoPtr pInfo;
++ DBusError dberror;
+
+ priv = xcalloc (1, sizeof (struct ts_priv));
+ if (!priv)
+@@ -361,6 +405,17 @@
+
+ pInfo->fd = ts_fd(priv->ts);
+
++ dbus_error_init (&dberror);
++ priv->dbus = dbus_bus_get (DBUS_BUS_SYSTEM, &dberror);
++ if (!priv->dbus) {
++ ErrorF("Failed to connect to the D-BUS daemon: %s", dberror.message);
++ dbus_error_free (&dberror);
++ return NULL;
++ }
++ dbus_bus_add_match (priv->dbus, "interface='org.freesmartphone.Device.Input'", &dberror);
++ dbus_connection_add_filter (priv->dbus, button_switch_filter, priv, NULL);
++ priv->secondbutton = 0;
++
+ /* Mark the device configured */
+ pInfo->flags |= XI86_CONFIGURED;
+
_______________________________________________
Openmoko community mailing list
[email protected]
http://lists.openmoko.org/mailman/listinfo/community