backends: Force 2-finger scroll by default if available
When the touchpad is two-finger scrolling capable, always enable it. When the touchpad only supports edge scrolling (usually older devices, and usually smaller devices), allow disabling the edge scrolling. This requires a newer gsettings-desktop-schemas as the scroll-method key was removed, and the edge-scroll-enabled key added. https://bugzilla.gnome.org/show_bug.cgi?id=759304
This commit is contained in:
parent
0e8ca1a042
commit
a27b2597b9
@ -63,7 +63,7 @@ MUTTER_PC_MODULES="
|
|||||||
gio-unix-2.0 >= 2.35.1
|
gio-unix-2.0 >= 2.35.1
|
||||||
pango >= 1.2.0
|
pango >= 1.2.0
|
||||||
cairo >= 1.10.0
|
cairo >= 1.10.0
|
||||||
gsettings-desktop-schemas >= 3.15.92
|
gsettings-desktop-schemas >= 3.19.3
|
||||||
$CLUTTER_PACKAGE >= 1.25.1
|
$CLUTTER_PACKAGE >= 1.25.1
|
||||||
cogl-1.0 >= 1.17.1
|
cogl-1.0 >= 1.17.1
|
||||||
upower-glib >= 0.99.0
|
upower-glib >= 0.99.0
|
||||||
|
@ -63,9 +63,9 @@ struct _MetaInputSettingsClass
|
|||||||
void (* set_invert_scroll) (MetaInputSettings *settings,
|
void (* set_invert_scroll) (MetaInputSettings *settings,
|
||||||
ClutterInputDevice *device,
|
ClutterInputDevice *device,
|
||||||
gboolean inverted);
|
gboolean inverted);
|
||||||
void (* set_scroll_method) (MetaInputSettings *settings,
|
void (* set_edge_scroll) (MetaInputSettings *settings,
|
||||||
ClutterInputDevice *device,
|
ClutterInputDevice *device,
|
||||||
GDesktopTouchpadScrollMethod mode);
|
gboolean enabled);
|
||||||
void (* set_scroll_button) (MetaInputSettings *settings,
|
void (* set_scroll_button) (MetaInputSettings *settings,
|
||||||
ClutterInputDevice *device,
|
ClutterInputDevice *device,
|
||||||
guint button);
|
guint button);
|
||||||
|
@ -395,11 +395,11 @@ update_touchpad_tap_enabled (MetaInputSettings *input_settings,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
update_touchpad_scroll_method (MetaInputSettings *input_settings,
|
update_touchpad_edge_scroll (MetaInputSettings *input_settings,
|
||||||
ClutterInputDevice *device)
|
ClutterInputDevice *device)
|
||||||
{
|
{
|
||||||
MetaInputSettingsClass *input_settings_class;
|
MetaInputSettingsClass *input_settings_class;
|
||||||
GDesktopTouchpadScrollMethod method;
|
gboolean edge_scroll_enabled;
|
||||||
MetaInputSettingsPrivate *priv;
|
MetaInputSettingsPrivate *priv;
|
||||||
|
|
||||||
if (device &&
|
if (device &&
|
||||||
@ -408,19 +408,19 @@ update_touchpad_scroll_method (MetaInputSettings *input_settings,
|
|||||||
|
|
||||||
priv = meta_input_settings_get_instance_private (input_settings);
|
priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
||||||
method = g_settings_get_enum (priv->touchpad_settings, "scroll-method");
|
edge_scroll_enabled = g_settings_get_boolean (priv->touchpad_settings, "edge-scrolling-enabled");
|
||||||
|
|
||||||
if (device)
|
if (device)
|
||||||
{
|
{
|
||||||
settings_device_set_uint_setting (input_settings, device,
|
settings_device_set_bool_setting (input_settings, device,
|
||||||
input_settings_class->set_scroll_method,
|
input_settings_class->set_edge_scroll,
|
||||||
method);
|
edge_scroll_enabled);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
settings_set_uint_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE,
|
settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE,
|
||||||
(ConfigUintFunc) input_settings_class->set_scroll_method,
|
(ConfigBoolFunc) input_settings_class->set_edge_scroll,
|
||||||
method);
|
edge_scroll_enabled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -645,8 +645,8 @@ meta_input_settings_changed_cb (GSettings *settings,
|
|||||||
update_touchpad_tap_enabled (input_settings, NULL);
|
update_touchpad_tap_enabled (input_settings, NULL);
|
||||||
else if (strcmp (key, "send-events") == 0)
|
else if (strcmp (key, "send-events") == 0)
|
||||||
update_touchpad_send_events (input_settings, NULL);
|
update_touchpad_send_events (input_settings, NULL);
|
||||||
else if (strcmp (key, "scroll-method") == 0)
|
else if (strcmp (key, "edge-scrolling-enabled") == 0)
|
||||||
update_touchpad_scroll_method (input_settings, NULL);
|
update_touchpad_edge_scroll (input_settings, NULL);
|
||||||
else if (strcmp (key, "click-method") == 0)
|
else if (strcmp (key, "click-method") == 0)
|
||||||
update_touchpad_click_method (input_settings, NULL);
|
update_touchpad_click_method (input_settings, NULL);
|
||||||
}
|
}
|
||||||
@ -771,7 +771,7 @@ apply_device_settings (MetaInputSettings *input_settings,
|
|||||||
update_device_natural_scroll (input_settings, device);
|
update_device_natural_scroll (input_settings, device);
|
||||||
update_touchpad_tap_enabled (input_settings, device);
|
update_touchpad_tap_enabled (input_settings, device);
|
||||||
update_touchpad_send_events (input_settings, device);
|
update_touchpad_send_events (input_settings, device);
|
||||||
update_touchpad_scroll_method (input_settings, device);
|
update_touchpad_edge_scroll (input_settings, device);
|
||||||
update_touchpad_click_method (input_settings, device);
|
update_touchpad_click_method (input_settings, device);
|
||||||
|
|
||||||
update_trackball_scroll_button (input_settings, device);
|
update_trackball_scroll_button (input_settings, device);
|
||||||
|
@ -154,30 +154,30 @@ device_set_click_method (struct libinput_device *libinput_device,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_input_settings_native_set_scroll_method (MetaInputSettings *settings,
|
meta_input_settings_native_set_edge_scroll (MetaInputSettings *settings,
|
||||||
ClutterInputDevice *device,
|
ClutterInputDevice *device,
|
||||||
GDesktopTouchpadScrollMethod mode)
|
gboolean edge_scrolling_enabled)
|
||||||
{
|
{
|
||||||
enum libinput_config_scroll_method scroll_method = 0;
|
enum libinput_config_scroll_method scroll_method = 0;
|
||||||
struct libinput_device *libinput_device;
|
struct libinput_device *libinput_device;
|
||||||
|
enum libinput_config_scroll_method supported;
|
||||||
|
|
||||||
libinput_device = clutter_evdev_input_device_get_libinput_device (device);
|
libinput_device = clutter_evdev_input_device_get_libinput_device (device);
|
||||||
|
supported = libinput_device_config_scroll_get_methods (libinput_device);
|
||||||
|
|
||||||
switch (mode)
|
if (supported & LIBINPUT_CONFIG_SCROLL_2FG)
|
||||||
{
|
{
|
||||||
case G_DESKTOP_TOUCHPAD_SCROLL_METHOD_DISABLED:
|
|
||||||
scroll_method = LIBINPUT_CONFIG_SCROLL_NO_SCROLL;
|
|
||||||
break;
|
|
||||||
case G_DESKTOP_TOUCHPAD_SCROLL_METHOD_EDGE_SCROLLING:
|
|
||||||
scroll_method = LIBINPUT_CONFIG_SCROLL_EDGE;
|
|
||||||
break;
|
|
||||||
case G_DESKTOP_TOUCHPAD_SCROLL_METHOD_TWO_FINGER_SCROLLING:
|
|
||||||
scroll_method = LIBINPUT_CONFIG_SCROLL_2FG;
|
scroll_method = LIBINPUT_CONFIG_SCROLL_2FG;
|
||||||
break;
|
}
|
||||||
default:
|
else if (supported & LIBINPUT_CONFIG_SCROLL_EDGE &&
|
||||||
g_assert_not_reached ();
|
edge_scrolling_enabled)
|
||||||
return;
|
{
|
||||||
}
|
scroll_method = LIBINPUT_CONFIG_SCROLL_EDGE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
scroll_method = LIBINPUT_CONFIG_SCROLL_NO_SCROLL;
|
||||||
|
}
|
||||||
|
|
||||||
device_set_scroll_method (libinput_device, scroll_method);
|
device_set_scroll_method (libinput_device, scroll_method);
|
||||||
}
|
}
|
||||||
@ -252,7 +252,7 @@ meta_input_settings_native_class_init (MetaInputSettingsNativeClass *klass)
|
|||||||
input_settings_class->set_left_handed = meta_input_settings_native_set_left_handed;
|
input_settings_class->set_left_handed = meta_input_settings_native_set_left_handed;
|
||||||
input_settings_class->set_tap_enabled = meta_input_settings_native_set_tap_enabled;
|
input_settings_class->set_tap_enabled = meta_input_settings_native_set_tap_enabled;
|
||||||
input_settings_class->set_invert_scroll = meta_input_settings_native_set_invert_scroll;
|
input_settings_class->set_invert_scroll = meta_input_settings_native_set_invert_scroll;
|
||||||
input_settings_class->set_scroll_method = meta_input_settings_native_set_scroll_method;
|
input_settings_class->set_edge_scroll = meta_input_settings_native_set_edge_scroll;
|
||||||
input_settings_class->set_scroll_button = meta_input_settings_native_set_scroll_button;
|
input_settings_class->set_scroll_button = meta_input_settings_native_set_scroll_button;
|
||||||
input_settings_class->set_click_method = meta_input_settings_native_set_click_method;
|
input_settings_class->set_click_method = meta_input_settings_native_set_click_method;
|
||||||
input_settings_class->set_keyboard_repeat = meta_input_settings_native_set_keyboard_repeat;
|
input_settings_class->set_keyboard_repeat = meta_input_settings_native_set_keyboard_repeat;
|
||||||
|
@ -199,9 +199,9 @@ meta_input_settings_x11_set_invert_scroll (MetaInputSettings *settings,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_input_settings_x11_set_scroll_method (MetaInputSettings *settings,
|
meta_input_settings_x11_set_edge_scroll (MetaInputSettings *settings,
|
||||||
ClutterInputDevice *device,
|
ClutterInputDevice *device,
|
||||||
GDesktopTouchpadScrollMethod mode)
|
gboolean edge_scroll_enabled)
|
||||||
{
|
{
|
||||||
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;
|
guchar *available;
|
||||||
@ -211,26 +211,21 @@ meta_input_settings_x11_set_scroll_method (MetaInputSettings *setting
|
|||||||
if (!available)
|
if (!available)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (mode)
|
if (available[0])
|
||||||
{
|
{
|
||||||
case G_DESKTOP_TOUCHPAD_SCROLL_METHOD_DISABLED:
|
|
||||||
break;
|
|
||||||
case G_DESKTOP_TOUCHPAD_SCROLL_METHOD_EDGE_SCROLLING:
|
|
||||||
values[1] = 1;
|
|
||||||
break;
|
|
||||||
case G_DESKTOP_TOUCHPAD_SCROLL_METHOD_TWO_FINGER_SCROLLING:
|
|
||||||
values[0] = 1;
|
values[0] = 1;
|
||||||
break;
|
}
|
||||||
default:
|
else if (available[1] && edge_scroll_enabled)
|
||||||
g_assert_not_reached ();
|
{
|
||||||
|
values[1] = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Disabled */
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((values[0] && !available[0]) || (values[1] && !available[1]))
|
change_property (device, "libinput Scroll Method Enabled",
|
||||||
g_warning ("Device '%s' does not support scroll mode %d\n",
|
XA_INTEGER, 8, &values, 3);
|
||||||
clutter_input_device_get_device_name (device), mode);
|
|
||||||
else
|
|
||||||
change_property (device, "libinput Scroll Method Enabled",
|
|
||||||
XA_INTEGER, 8, &values, 3);
|
|
||||||
|
|
||||||
meta_XFree (available);
|
meta_XFree (available);
|
||||||
}
|
}
|
||||||
@ -321,7 +316,7 @@ meta_input_settings_x11_class_init (MetaInputSettingsX11Class *klass)
|
|||||||
input_settings_class->set_left_handed = meta_input_settings_x11_set_left_handed;
|
input_settings_class->set_left_handed = meta_input_settings_x11_set_left_handed;
|
||||||
input_settings_class->set_tap_enabled = meta_input_settings_x11_set_tap_enabled;
|
input_settings_class->set_tap_enabled = meta_input_settings_x11_set_tap_enabled;
|
||||||
input_settings_class->set_invert_scroll = meta_input_settings_x11_set_invert_scroll;
|
input_settings_class->set_invert_scroll = meta_input_settings_x11_set_invert_scroll;
|
||||||
input_settings_class->set_scroll_method = meta_input_settings_x11_set_scroll_method;
|
input_settings_class->set_edge_scroll = meta_input_settings_x11_set_edge_scroll;
|
||||||
input_settings_class->set_scroll_button = meta_input_settings_x11_set_scroll_button;
|
input_settings_class->set_scroll_button = meta_input_settings_x11_set_scroll_button;
|
||||||
input_settings_class->set_click_method = meta_input_settings_x11_set_click_method;
|
input_settings_class->set_click_method = meta_input_settings_x11_set_click_method;
|
||||||
input_settings_class->set_keyboard_repeat = meta_input_settings_x11_set_keyboard_repeat;
|
input_settings_class->set_keyboard_repeat = meta_input_settings_x11_set_keyboard_repeat;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user