diff -Nur -x '*.orig' -x '*~' gnome-control-center-2.24.0.1/capplets/mouse/gnome-mouse-properties.c gnome-control-center-2.24.0.1.new/capplets/mouse/gnome-mouse-properties.c --- gnome-control-center-2.24.0.1/capplets/mouse/gnome-mouse-properties.c 2008-10-10 09:50:11.000000000 +1100 +++ gnome-control-center-2.24.0.1.new/capplets/mouse/gnome-mouse-properties.c 2008-10-10 09:50:58.000000000 +1100 @@ -41,7 +41,9 @@ #include #include #include +#include #include +#include #ifdef HAVE_XCURSOR #include @@ -319,9 +321,31 @@ int numdevices, i; gboolean ret = FALSE; XDeviceInfo *devicelist = XListInputDevices (GDK_DISPLAY(), &numdevices); + Atom realtype, prop; + int realformat; + unsigned long nitems, bytes_after; + unsigned char *data; + + prop = XInternAtom(GDK_DISPLAY(), "Synaptics Off", False); + for (i = 0; i < numdevices; i++) { - if (strcmp (devicelist[i].name, "Synaptics Touchpad") == 0) - ret = TRUE; + gdk_error_trap_push(); + XDevice *device = XOpenDevice (GDK_DISPLAY(), + devicelist[i].id); + if (gdk_error_trap_pop()) + continue; + + gdk_error_trap_push(); + if ((XGetDeviceProperty(GDK_DISPLAY(), device, prop, 0, 1, False, + XA_INTEGER, &realtype, &realformat, &nitems, + &bytes_after, &data) == Success) && (realtype != None)) + { + XFree(data); + ret = TRUE; + } + gdk_error_trap_pop(); + + XCloseDevice (GDK_DISPLAY(), device); } XFreeDeviceList(devicelist);