diff options
-rw-r--r-- | plugins/mouse/msd-mouse-manager.c | 50 |
1 files changed, 46 insertions, 4 deletions
diff --git a/plugins/mouse/msd-mouse-manager.c b/plugins/mouse/msd-mouse-manager.c index 71d691f..823c448 100644 --- a/plugins/mouse/msd-mouse-manager.c +++ b/plugins/mouse/msd-mouse-manager.c @@ -336,10 +336,10 @@ touchpad_set_bool (XDeviceInfo *device_info, } static void -set_left_handed (MsdMouseManager *manager, - XDeviceInfo *device_info, - gboolean mouse_left_handed, - gboolean touchpad_left_handed) +set_left_handed_legacy_driver (MsdMouseManager *manager, + XDeviceInfo *device_info, + gboolean mouse_left_handed, + gboolean touchpad_left_handed) { XDevice *device; guchar *buttons; @@ -409,6 +409,48 @@ set_left_handed (MsdMouseManager *manager, } static void +set_left_handed_libinput (XDeviceInfo *device_info, + gboolean mouse_left_handed, + gboolean touchpad_left_handed) +{ + XDevice *device; + gboolean want_lefthanded; + + device = device_is_touchpad (device_info); + if (device == NULL) { + gdk_error_trap_push (); + device = XOpenDevice (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), device_info->id); + if ((gdk_error_trap_pop () != 0) || (device == NULL)) + return; + + want_lefthanded = mouse_left_handed; + } else { + /* touchpad device is already open after + * return from device_is_touchpad function + */ + want_lefthanded = touchpad_left_handed; + } + + property_set_bool (device_info, device, "libinput Left Handed Enabled", 0, want_lefthanded); + + gdk_error_trap_push (); + XCloseDevice (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), device); + gdk_error_trap_pop_ignored (); +} + +static void +set_left_handed (MsdMouseManager *manager, + XDeviceInfo *device_info, + gboolean mouse_left_handed, + gboolean touchpad_left_handed) +{ + if (property_exists_on_device (device_info, "libinput Left Handed Enabled")) + set_left_handed_libinput (device_info, mouse_left_handed, touchpad_left_handed); + else + set_left_handed_legacy_driver (manager, device_info, mouse_left_handed, touchpad_left_handed); +} + +static void set_left_handed_all (MsdMouseManager *manager, gboolean mouse_left_handed, gboolean touchpad_left_handed) |