meta-input-settings-x11: Don't try setting unavailable scroll methods

Since doing so causes BadValue X errors.

https://bugzilla.gnome.org/show_bug.cgi?id=771744
This commit is contained in:
Rui Matos 2016-11-14 17:33:11 +01:00
parent be5c2ebcb5
commit 925b1aec64

View File

@ -232,19 +232,27 @@ meta_input_settings_x11_set_edge_scroll (MetaInputSettings *settings,
gboolean edge_scroll_enabled) gboolean edge_scroll_enabled)
{ {
guchar values[SCROLL_METHOD_NUM_FIELDS] = { 0 }; /* 2fg, edge, button. The last value is unused */ guchar values[SCROLL_METHOD_NUM_FIELDS] = { 0 }; /* 2fg, edge, button. The last value is unused */
guchar *current; guchar *current = NULL;
guchar *available = NULL;
available = get_property (device, "libinput Scroll Methods Available",
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
if (!available || !available[SCROLL_METHOD_FIELD_EDGE])
goto out;
current = get_property (device, "libinput Scroll Method Enabled", current = get_property (device, "libinput Scroll Method Enabled",
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS); XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
if (!current) if (!current)
return; goto out;
memcpy (values, current, SCROLL_METHOD_NUM_FIELDS); memcpy (values, current, SCROLL_METHOD_NUM_FIELDS);
values[SCROLL_METHOD_FIELD_EDGE] = !!edge_scroll_enabled; values[SCROLL_METHOD_FIELD_EDGE] = !!edge_scroll_enabled;
change_property (device, "libinput Scroll Method Enabled", change_property (device, "libinput Scroll Method Enabled",
XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS); XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS);
out:
meta_XFree (current); meta_XFree (current);
meta_XFree (available);
} }
static void static void
@ -253,19 +261,27 @@ meta_input_settings_x11_set_two_finger_scroll (MetaInputSettings *set
gboolean two_finger_scroll_enabled) gboolean two_finger_scroll_enabled)
{ {
guchar values[SCROLL_METHOD_NUM_FIELDS] = { 0 }; /* 2fg, edge, button. The last value is unused */ guchar values[SCROLL_METHOD_NUM_FIELDS] = { 0 }; /* 2fg, edge, button. The last value is unused */
guchar *current; guchar *current = NULL;
guchar *available = NULL;
available = get_property (device, "libinput Scroll Methods Available",
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
if (!available || !available[SCROLL_METHOD_FIELD_2FG])
goto out;
current = get_property (device, "libinput Scroll Method Enabled", current = get_property (device, "libinput Scroll Method Enabled",
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS); XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
if (!current) if (!current)
return; goto out;
memcpy (values, current, SCROLL_METHOD_NUM_FIELDS); memcpy (values, current, SCROLL_METHOD_NUM_FIELDS);
values[SCROLL_METHOD_FIELD_2FG] = !!two_finger_scroll_enabled; values[SCROLL_METHOD_FIELD_2FG] = !!two_finger_scroll_enabled;
change_property (device, "libinput Scroll Method Enabled", change_property (device, "libinput Scroll Method Enabled",
XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS); XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS);
out:
meta_XFree (current); meta_XFree (current);
meta_XFree (available);
} }
static void static void