mirror of
https://github.com/brl/mutter.git
synced 2025-02-16 21:34:09 +00:00
input-settings-x11: check properties for correctness before changing them
Before submitting a new scroll mode, click method or sendevents mode check if the value is supported by the device. This avoids BadValue errors when setting two-finger scrolling on single-finger touchpad devices since we can't easily handle BadValue (see 9747277b) https://bugzilla.gnome.org/show_bug.cgi?id=750816 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
4d3419607a
commit
5f1bcc124f
@ -106,6 +106,12 @@ meta_input_settings_x11_set_send_events (MetaInputSettings *settings,
|
|||||||
GDesktopDeviceSendEvents mode)
|
GDesktopDeviceSendEvents mode)
|
||||||
{
|
{
|
||||||
guchar values[2] = { 0 }; /* disabled, disabled-on-external-mouse */
|
guchar values[2] = { 0 }; /* disabled, disabled-on-external-mouse */
|
||||||
|
guchar *available;
|
||||||
|
|
||||||
|
available = get_property (device, "libinput Send Events Modes Available",
|
||||||
|
XA_INTEGER, 8, 2);
|
||||||
|
if (!available)
|
||||||
|
return;
|
||||||
|
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
@ -119,8 +125,14 @@ meta_input_settings_x11_set_send_events (MetaInputSettings *settings,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
change_property (device, "libinput Send Events Mode Enabled",
|
if ((values[0] && !available[0]) || (values[1] && !available[1]))
|
||||||
XA_INTEGER, 8, &values, 2);
|
g_warning ("Device '%s' does not support sendevents mode %d\n",
|
||||||
|
clutter_input_device_get_device_name (device), mode);
|
||||||
|
else
|
||||||
|
change_property (device, "libinput Send Events Mode Enabled",
|
||||||
|
XA_INTEGER, 8, &values, 2);
|
||||||
|
|
||||||
|
meta_XFree (available);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -192,6 +204,12 @@ meta_input_settings_x11_set_scroll_method (MetaInputSettings *setting
|
|||||||
GDesktopTouchpadScrollMethod mode)
|
GDesktopTouchpadScrollMethod mode)
|
||||||
{
|
{
|
||||||
guchar values[3] = { 0 }; /* 2fg, edge, button. The last value is unused */
|
guchar values[3] = { 0 }; /* 2fg, edge, button. The last value is unused */
|
||||||
|
guchar *available;
|
||||||
|
|
||||||
|
available = get_property (device, "libinput Scroll Methods Available",
|
||||||
|
XA_INTEGER, 8, 3);
|
||||||
|
if (!available)
|
||||||
|
return;
|
||||||
|
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
@ -207,8 +225,14 @@ meta_input_settings_x11_set_scroll_method (MetaInputSettings *setting
|
|||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
}
|
}
|
||||||
|
|
||||||
change_property (device, "libinput Scroll Method Enabled",
|
if ((values[0] && !available[0]) || (values[1] && !available[1]))
|
||||||
XA_INTEGER, 8, &values, 3);
|
g_warning ("Device '%s' does not support scroll mode %d\n",
|
||||||
|
clutter_input_device_get_device_name (device), mode);
|
||||||
|
else
|
||||||
|
change_property (device, "libinput Scroll Method Enabled",
|
||||||
|
XA_INTEGER, 8, &values, 3);
|
||||||
|
|
||||||
|
meta_XFree (available);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -226,7 +250,12 @@ meta_input_settings_x11_set_click_method (MetaInputSettings *settings,
|
|||||||
GDesktopTouchpadClickMethod mode)
|
GDesktopTouchpadClickMethod mode)
|
||||||
{
|
{
|
||||||
guchar values[2] = { 0 }; /* buttonareas, clickfinger */
|
guchar values[2] = { 0 }; /* buttonareas, clickfinger */
|
||||||
guchar *defaults;
|
guchar *defaults, *available;
|
||||||
|
|
||||||
|
available = get_property (device, "libinput Click Methods Available",
|
||||||
|
XA_INTEGER, 8, 2);
|
||||||
|
if (!available)
|
||||||
|
return;
|
||||||
|
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
@ -251,8 +280,14 @@ meta_input_settings_x11_set_click_method (MetaInputSettings *settings,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
change_property (device, "libinput Click Method Enabled",
|
if ((values[0] && !available[0]) || (values[1] && !available[1]))
|
||||||
XA_INTEGER, 8, &values, 2);
|
g_warning ("Device '%s' does not support click method %d\n",
|
||||||
|
clutter_input_device_get_device_name (device), mode);
|
||||||
|
else
|
||||||
|
change_property (device, "libinput Click Method Enabled",
|
||||||
|
XA_INTEGER, 8, &values, 2);
|
||||||
|
|
||||||
|
meta_XFree(available);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user