input-settings-x11: Use xcb to change input settings

This way, we won't be hit with BadValue errors if we set it to a value
outside the X device's range. This can happen for touchpads without
two-finger scrolling, for instance.
This commit is contained in:
Jasper St. Pierre 2015-06-11 21:10:28 -04:00
parent daa15d94fd
commit 989f9630a4
2 changed files with 7 additions and 2 deletions

View File

@ -93,6 +93,7 @@ MUTTER_PC_MODULES="
xrender
x11-xcb
xcb-randr
xcb-xinput
"
GLIB_GSETTINGS

View File

@ -30,7 +30,9 @@
#include <gdk/gdkx.h>
#include <X11/Xatom.h>
#include <X11/extensions/XInput2.h>
#include <X11/Xlib-xcb.h>
#include <X11/XKBlib.h>
#include <xcb/xinput.h>
#include <meta/errors.h>
@ -78,6 +80,7 @@ change_property (ClutterInputDevice *device,
{
MetaBackend *backend = meta_get_backend ();
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
xcb_connection_t *xcb_conn = XGetXCBConnection (xdisplay);
int device_id;
Atom property_atom;
guchar *data_ret;
@ -89,8 +92,9 @@ change_property (ClutterInputDevice *device,
if (!data_ret)
return;
XIChangeProperty (xdisplay, device_id, property_atom, type,
format, XIPropModeReplace, data, nitems);
xcb_input_xi_change_property (xcb_conn, device_id, XCB_PROP_MODE_REPLACE,
format, property_atom, type,
nitems, data);
meta_XFree (data_ret);
}