summaryrefslogtreecommitdiff
path: root/src/backends/native/meta-input-settings-native.c
diff options
context:
space:
mode:
authorFlorian Müllner <fmuellner@gnome.org>2021-07-19 00:01:24 +0200
committerFlorian Müllner <fmuellner@gnome.org>2021-07-19 00:03:33 +0200
commit952865a86ebb08f97263cfdbfe38b7adc20e4560 (patch)
tree1f9347628656210b03ceee4fae83beb21491d1eb /src/backends/native/meta-input-settings-native.c
parent7862f143937e43dca0513af3a24dabfb4d0db4fc (diff)
downloadmutter-master.tar.gz
Replace contents with redirect messagemaster
The default development branch is now `main`. This commit only exists on `master` to point people towards that. See https://gitlab.gnome.org/GNOME/glib/-/issues/2348 for details.
Diffstat (limited to 'src/backends/native/meta-input-settings-native.c')
-rw-r--r--src/backends/native/meta-input-settings-native.c876
1 files changed, 0 insertions, 876 deletions
diff --git a/src/backends/native/meta-input-settings-native.c b/src/backends/native/meta-input-settings-native.c
deleted file mode 100644
index 8f61b8bcc..000000000
--- a/src/backends/native/meta-input-settings-native.c
+++ /dev/null
@@ -1,876 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-
-/*
- * Copyright (C) 2014 Red Hat
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- *
- * Author: Carlos Garnacho <carlosg@gnome.org>
- */
-
-#include "config.h"
-
-#include <linux/input-event-codes.h>
-#include <libinput.h>
-
-#include "backends/native/meta-backend-native.h"
-#include "backends/native/meta-input-thread.h"
-#include "backends/native/meta-input-settings-native.h"
-
-G_DEFINE_TYPE (MetaInputSettingsNative, meta_input_settings_native, META_TYPE_INPUT_SETTINGS)
-
-enum
-{
- PROP_0,
- PROP_SEAT_IMPL,
- N_PROPS,
-};
-
-static GParamSpec *props[N_PROPS] = { 0 };
-
-static void
-meta_input_settings_native_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- MetaInputSettingsNative *input_settings_native =
- META_INPUT_SETTINGS_NATIVE (object);
-
- switch (prop_id)
- {
- case PROP_SEAT_IMPL:
- input_settings_native->seat_impl = g_value_get_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-meta_input_settings_native_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- MetaInputSettingsNative *input_settings_native =
- META_INPUT_SETTINGS_NATIVE (object);
-
- switch (prop_id)
- {
- case PROP_SEAT_IMPL:
- g_value_set_object (value, input_settings_native->seat_impl);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static gboolean
-set_send_events (GTask *task)
-{
- GDesktopDeviceSendEvents mode;
- ClutterInputDevice *device;
- enum libinput_config_send_events_mode libinput_mode;
- struct libinput_device *libinput_device;
-
- device = g_task_get_source_object (task);
- mode = GPOINTER_TO_UINT (g_task_get_task_data (task));
-
- switch (mode)
- {
- case G_DESKTOP_DEVICE_SEND_EVENTS_DISABLED:
- libinput_mode = LIBINPUT_CONFIG_SEND_EVENTS_DISABLED;
- break;
- case G_DESKTOP_DEVICE_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE:
- libinput_mode = LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE;
- break;
- case G_DESKTOP_DEVICE_SEND_EVENTS_ENABLED:
- libinput_mode = LIBINPUT_CONFIG_SEND_EVENTS_ENABLED;
- break;
- default:
- g_assert_not_reached ();
- }
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (libinput_device)
- libinput_device_config_send_events_set_mode (libinput_device, libinput_mode);
-
- return G_SOURCE_REMOVE;
-}
-
-static void
-meta_input_settings_native_set_send_events (MetaInputSettings *settings,
- ClutterInputDevice *device,
- GDesktopDeviceSendEvents mode)
-{
- MetaInputSettingsNative *input_settings_native;
- GTask *task;
-
- task = g_task_new (device, NULL, NULL, NULL);
- g_task_set_task_data (task, GUINT_TO_POINTER (mode), NULL);
-
- input_settings_native = META_INPUT_SETTINGS_NATIVE (settings);
- meta_seat_impl_run_input_task (input_settings_native->seat_impl,
- task, (GSourceFunc) set_send_events);
- g_object_unref (task);
-}
-
-static gboolean
-set_matrix (GTask *task)
-{
- ClutterInputDevice *device = g_task_get_source_object (task);
- float *matrix = g_task_get_task_data (task);
- cairo_matrix_t dev_matrix;
-
- if (clutter_input_device_get_device_type (device) ==
- CLUTTER_TOUCHSCREEN_DEVICE ||
- meta_input_device_native_get_mapping_mode_in_impl (device) ==
- META_INPUT_DEVICE_MAPPING_ABSOLUTE)
- {
- cairo_matrix_init (&dev_matrix,
- matrix[0], matrix[3], matrix[1],
- matrix[4], matrix[2], matrix[5]);
- }
- else
- {
- cairo_matrix_init_identity (&dev_matrix);
- }
-
- g_object_set (device, "device-matrix", &dev_matrix, NULL);
-
- return G_SOURCE_REMOVE;
-}
-
-static void
-meta_input_settings_native_set_matrix (MetaInputSettings *settings,
- ClutterInputDevice *device,
- const float matrix[6])
-{
- MetaInputSettingsNative *input_settings_native;
- GTask *task;
-
- task = g_task_new (device, NULL, NULL, NULL);
-
- g_task_set_task_data (task, g_memdup2 (matrix, sizeof (float) * 6), g_free);
-
- input_settings_native = META_INPUT_SETTINGS_NATIVE (settings);
- meta_seat_impl_run_input_task (input_settings_native->seat_impl,
- task, (GSourceFunc) set_matrix);
- g_object_unref (task);
-}
-
-static void
-meta_input_settings_native_set_speed (MetaInputSettings *settings,
- ClutterInputDevice *device,
- gdouble speed)
-{
- struct libinput_device *libinput_device;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (!libinput_device)
- return;
- libinput_device_config_accel_set_speed (libinput_device,
- CLAMP (speed, -1, 1));
-}
-
-static void
-meta_input_settings_native_set_left_handed (MetaInputSettings *settings,
- ClutterInputDevice *device,
- gboolean enabled)
-{
- struct libinput_device *libinput_device;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (!libinput_device)
- return;
-
- if (libinput_device_config_left_handed_is_available (libinput_device))
- libinput_device_config_left_handed_set (libinput_device, enabled);
-}
-
-static void
-meta_input_settings_native_set_tap_enabled (MetaInputSettings *settings,
- ClutterInputDevice *device,
- gboolean enabled)
-{
- struct libinput_device *libinput_device;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (!libinput_device)
- return;
-
- if (libinput_device_config_tap_get_finger_count (libinput_device) > 0)
- libinput_device_config_tap_set_enabled (libinput_device,
- enabled ?
- LIBINPUT_CONFIG_TAP_ENABLED :
- LIBINPUT_CONFIG_TAP_DISABLED);
-}
-
-static void
-meta_input_settings_native_set_tap_and_drag_enabled (MetaInputSettings *settings,
- ClutterInputDevice *device,
- gboolean enabled)
-{
- struct libinput_device *libinput_device;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (!libinput_device)
- return;
-
- if (libinput_device_config_tap_get_finger_count (libinput_device) > 0)
- libinput_device_config_tap_set_drag_enabled (libinput_device,
- enabled ?
- LIBINPUT_CONFIG_DRAG_ENABLED :
- LIBINPUT_CONFIG_DRAG_DISABLED);
-}
-
-static void
-meta_input_settings_native_set_tap_and_drag_lock_enabled (MetaInputSettings *settings,
- ClutterInputDevice *device,
- gboolean enabled)
-{
- struct libinput_device *libinput_device;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (!libinput_device)
- return;
-
- if (libinput_device_config_tap_get_finger_count (libinput_device) > 0)
- libinput_device_config_tap_set_drag_lock_enabled (libinput_device,
- enabled ?
- LIBINPUT_CONFIG_DRAG_LOCK_ENABLED :
- LIBINPUT_CONFIG_DRAG_LOCK_DISABLED);
-}
-
-static void
-meta_input_settings_native_set_disable_while_typing (MetaInputSettings *settings,
- ClutterInputDevice *device,
- gboolean enabled)
-{
- struct libinput_device *libinput_device;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
-
- if (!libinput_device)
- return;
-
- if (libinput_device_config_dwt_is_available (libinput_device))
- libinput_device_config_dwt_set_enabled (libinput_device,
- enabled ?
- LIBINPUT_CONFIG_DWT_ENABLED :
- LIBINPUT_CONFIG_DWT_DISABLED);
-}
-
-static void
-meta_input_settings_native_set_invert_scroll (MetaInputSettings *settings,
- ClutterInputDevice *device,
- gboolean inverted)
-{
- struct libinput_device *libinput_device;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (!libinput_device)
- return;
-
- if (libinput_device_config_scroll_has_natural_scroll (libinput_device))
- libinput_device_config_scroll_set_natural_scroll_enabled (libinput_device,
- inverted);
-}
-
-static gboolean
-device_set_scroll_method (struct libinput_device *libinput_device,
- enum libinput_config_scroll_method method)
-{
- enum libinput_config_status status =
- libinput_device_config_scroll_set_method (libinput_device, method);
- return status == LIBINPUT_CONFIG_STATUS_SUCCESS;
-}
-
-static gboolean
-device_set_click_method (struct libinput_device *libinput_device,
- enum libinput_config_click_method method)
-{
- enum libinput_config_status status =
- libinput_device_config_click_set_method (libinput_device, method);
- return status == LIBINPUT_CONFIG_STATUS_SUCCESS;
-}
-
-static gboolean
-device_set_tap_button_map (struct libinput_device *libinput_device,
- enum libinput_config_tap_button_map map)
-{
- enum libinput_config_status status =
- libinput_device_config_tap_set_button_map (libinput_device, map);
- return status == LIBINPUT_CONFIG_STATUS_SUCCESS;
-}
-
-static void
-meta_input_settings_native_set_edge_scroll (MetaInputSettings *settings,
- ClutterInputDevice *device,
- gboolean edge_scrolling_enabled)
-{
- struct libinput_device *libinput_device;
- enum libinput_config_scroll_method current, method;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
-
- method = edge_scrolling_enabled ? LIBINPUT_CONFIG_SCROLL_EDGE : LIBINPUT_CONFIG_SCROLL_NO_SCROLL;
- current = libinput_device_config_scroll_get_method (libinput_device);
- current &= ~LIBINPUT_CONFIG_SCROLL_EDGE;
-
- device_set_scroll_method (libinput_device, current | method);
-}
-
-static void
-meta_input_settings_native_set_two_finger_scroll (MetaInputSettings *settings,
- ClutterInputDevice *device,
- gboolean two_finger_scroll_enabled)
-{
- struct libinput_device *libinput_device;
- enum libinput_config_scroll_method current, method;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
-
- method = two_finger_scroll_enabled ? LIBINPUT_CONFIG_SCROLL_2FG : LIBINPUT_CONFIG_SCROLL_NO_SCROLL;
- current = libinput_device_config_scroll_get_method (libinput_device);
- current &= ~LIBINPUT_CONFIG_SCROLL_2FG;
-
- device_set_scroll_method (libinput_device, current | method);
-}
-
-static gboolean
-meta_input_settings_native_has_two_finger_scroll (MetaInputSettings *settings,
- ClutterInputDevice *device)
-{
- struct libinput_device *libinput_device;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (!libinput_device)
- return FALSE;
-
- return libinput_device_config_scroll_get_methods (libinput_device) & LIBINPUT_CONFIG_SCROLL_2FG;
-}
-
-static void
-meta_input_settings_native_set_scroll_button (MetaInputSettings *settings,
- ClutterInputDevice *device,
- guint button,
- gboolean button_lock)
-{
- struct libinput_device *libinput_device;
- enum libinput_config_scroll_method method;
- enum libinput_config_scroll_button_lock_state lock_state;
- guint evcode;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (!libinput_device)
- return;
-
- if (button == 0)
- {
- method = LIBINPUT_CONFIG_SCROLL_NO_SCROLL;
- evcode = 0;
- }
- else
- {
- switch (button)
- {
- case 1:
- evcode = BTN_LEFT;
- break;
- case 2:
- evcode = BTN_MIDDLE;
- break;
- case 3:
- evcode = BTN_RIGHT;
- break;
- default:
- /* Compensate for X11 scroll buttons */
- if (button > 7)
- button -= 4;
-
- /* Button is 1-indexed */
- evcode = (BTN_LEFT - 1) + button;
- }
-
- method = LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN;
- }
-
- if (!device_set_scroll_method (libinput_device, method))
- return;
-
- libinput_device_config_scroll_set_button (libinput_device, evcode);
-
- if (button_lock)
- lock_state = LIBINPUT_CONFIG_SCROLL_BUTTON_LOCK_ENABLED;
- else
- lock_state = LIBINPUT_CONFIG_SCROLL_BUTTON_LOCK_DISABLED;
-
- libinput_device_config_scroll_set_button_lock (libinput_device, lock_state);
-}
-
-static void
-meta_input_settings_native_set_click_method (MetaInputSettings *settings,
- ClutterInputDevice *device,
- GDesktopTouchpadClickMethod mode)
-{
- enum libinput_config_click_method click_method = 0;
- struct libinput_device *libinput_device;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (!libinput_device)
- return;
-
- switch (mode)
- {
- case G_DESKTOP_TOUCHPAD_CLICK_METHOD_DEFAULT:
- click_method = libinput_device_config_click_get_default_method (libinput_device);
- break;
- case G_DESKTOP_TOUCHPAD_CLICK_METHOD_NONE:
- click_method = LIBINPUT_CONFIG_CLICK_METHOD_NONE;
- break;
- case G_DESKTOP_TOUCHPAD_CLICK_METHOD_AREAS:
- click_method = LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS;
- break;
- case G_DESKTOP_TOUCHPAD_CLICK_METHOD_FINGERS:
- click_method = LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER;
- break;
- default:
- g_assert_not_reached ();
- return;
- }
-
- device_set_click_method (libinput_device, click_method);
-}
-
-static void
-meta_input_settings_native_set_tap_button_map (MetaInputSettings *settings,
- ClutterInputDevice *device,
- GDesktopTouchpadTapButtonMap mode)
-{
- enum libinput_config_tap_button_map button_map = 0;
- struct libinput_device *libinput_device;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (!libinput_device)
- return;
-
- if (libinput_device_config_tap_get_finger_count (libinput_device) == 0)
- return;
-
- switch (mode)
- {
- case G_DESKTOP_TOUCHPAD_BUTTON_TAP_MAP_DEFAULT:
- button_map = libinput_device_config_tap_get_default_button_map (libinput_device);
- break;
- case G_DESKTOP_TOUCHPAD_BUTTON_TAP_MAP_LRM:
- button_map = LIBINPUT_CONFIG_TAP_MAP_LRM;
- break;
- case G_DESKTOP_TOUCHPAD_BUTTON_TAP_MAP_LMR:
- button_map = LIBINPUT_CONFIG_TAP_MAP_LMR;
- break;
- default:
- g_assert_not_reached ();
- return;
- }
-
- device_set_tap_button_map (libinput_device, button_map);
-}
-
-static void
-meta_input_settings_native_set_keyboard_repeat (MetaInputSettings *settings,
- gboolean enabled,
- guint delay,
- guint interval)
-{
- MetaInputSettingsNative *input_settings_native;
-
- input_settings_native = META_INPUT_SETTINGS_NATIVE (settings);
- meta_seat_impl_set_keyboard_repeat_in_impl (input_settings_native->seat_impl,
- enabled, delay, interval);
-}
-
-static void
-set_device_accel_profile (ClutterInputDevice *device,
- GDesktopPointerAccelProfile profile)
-{
- struct libinput_device *libinput_device;
- enum libinput_config_accel_profile libinput_profile;
- uint32_t profiles;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
-
- switch (profile)
- {
- case G_DESKTOP_POINTER_ACCEL_PROFILE_FLAT:
- libinput_profile = LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT;
- break;
- case G_DESKTOP_POINTER_ACCEL_PROFILE_ADAPTIVE:
- libinput_profile = LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE;
- break;
- default:
- g_warn_if_reached ();
- case G_DESKTOP_POINTER_ACCEL_PROFILE_DEFAULT:
- libinput_profile =
- libinput_device_config_accel_get_default_profile (libinput_device);
- }
-
- profiles = libinput_device_config_accel_get_profiles (libinput_device);
- if ((profiles & libinput_profile) == 0)
- {
- libinput_profile =
- libinput_device_config_accel_get_default_profile (libinput_device);
- }
-
- libinput_device_config_accel_set_profile (libinput_device,
- libinput_profile);
-}
-
-static gboolean
-has_udev_property (ClutterInputDevice *device,
- const char *property)
-{
- struct libinput_device *libinput_device;
- struct udev_device *udev_device;
- struct udev_device *parent_udev_device;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (!libinput_device)
- return FALSE;
-
- udev_device = libinput_device_get_udev_device (libinput_device);
-
- if (!udev_device)
- return FALSE;
-
- if (NULL != udev_device_get_property_value (udev_device, property))
- {
- udev_device_unref (udev_device);
- return TRUE;
- }
-
- parent_udev_device = udev_device_get_parent (udev_device);
- udev_device_unref (udev_device);
-
- if (!parent_udev_device)
- return FALSE;
-
- if (NULL != udev_device_get_property_value (parent_udev_device, property))
- return TRUE;
-
- return FALSE;
-}
-
-static gboolean
-is_mouse_device (ClutterInputDevice *device)
-{
- return (has_udev_property (device, "ID_INPUT_MOUSE") &&
- !has_udev_property (device, "ID_INPUT_POINTINGSTICK"));
-}
-
-static gboolean
-meta_input_settings_native_is_touchpad_device (MetaInputSettings *settings,
- ClutterInputDevice *device)
-{
- return has_udev_property (device, "ID_INPUT_TOUCHPAD");
-}
-
-static gboolean
-meta_input_settings_native_is_trackball_device (MetaInputSettings *settings,
- ClutterInputDevice *device)
-{
- return has_udev_property (device, "ID_INPUT_TRACKBALL");
-}
-
-static void
-meta_input_settings_native_set_mouse_accel_profile (MetaInputSettings *settings,
- ClutterInputDevice *device,
- GDesktopPointerAccelProfile profile)
-{
- if (!is_mouse_device (device))
- return;
-
- set_device_accel_profile (device, profile);
-}
-
-static void
-meta_input_settings_native_set_trackball_accel_profile (MetaInputSettings *settings,
- ClutterInputDevice *device,
- GDesktopPointerAccelProfile profile)
-{
- if (!meta_input_settings_native_is_trackball_device (settings, device))
- return;
-
- set_device_accel_profile (device, profile);
-}
-
-static void
-meta_input_settings_native_set_tablet_mapping (MetaInputSettings *settings,
- ClutterInputDevice *device,
- GDesktopTabletMapping mapping)
-{
- MetaInputDeviceMapping dev_mapping;
-
- if (mapping == G_DESKTOP_TABLET_MAPPING_ABSOLUTE)
- dev_mapping = META_INPUT_DEVICE_MAPPING_ABSOLUTE;
- else if (mapping == G_DESKTOP_TABLET_MAPPING_RELATIVE)
- dev_mapping = META_INPUT_DEVICE_MAPPING_RELATIVE;
- else
- return;
-
- meta_input_device_native_set_mapping_mode_in_impl (device, dev_mapping);
-}
-
-static gboolean
-set_tablet_aspect_ratio (GTask *task)
-{
- ClutterInputDevice *device;
- double *aspect_ratio;
-
- device = g_task_get_source_object (task);
- aspect_ratio = g_task_get_task_data (task);
- g_object_set (device, "output-aspect-ratio", *aspect_ratio, NULL);
-
- return G_SOURCE_REMOVE;
-}
-
-static void
-meta_input_settings_native_set_tablet_aspect_ratio (MetaInputSettings *settings,
- ClutterInputDevice *device,
- gdouble aspect_ratio)
-{
- MetaInputSettingsNative *input_settings_native;
- GTask *task;
-
- if (meta_input_device_native_get_mapping_mode_in_impl (device) ==
- META_INPUT_DEVICE_MAPPING_RELATIVE)
- aspect_ratio = 0;
-
- task = g_task_new (device, NULL, NULL, NULL);
- g_task_set_task_data (task,
- g_memdup2 (&aspect_ratio, sizeof (double)),
- g_free);
-
- input_settings_native = META_INPUT_SETTINGS_NATIVE (settings);
- meta_seat_impl_run_input_task (input_settings_native->seat_impl,
- task, (GSourceFunc) set_tablet_aspect_ratio);
- g_object_unref (task);
-}
-
-static void
-meta_input_settings_native_set_tablet_area (MetaInputSettings *settings,
- ClutterInputDevice *device,
- gdouble padding_left,
- gdouble padding_right,
- gdouble padding_top,
- gdouble padding_bottom)
-{
- struct libinput_device *libinput_device;
- gfloat scale_x;
- gfloat scale_y;
- gfloat offset_x;
- gfloat offset_y;
-
- scale_x = 1. / (1. - (padding_left + padding_right));
- scale_y = 1. / (1. - (padding_top + padding_bottom));
- offset_x = -padding_left * scale_x;
- offset_y = -padding_top * scale_y;
-
- gfloat matrix[6] = { scale_x, 0., offset_x,
- 0., scale_y, offset_y };
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (!libinput_device ||
- !libinput_device_config_calibration_has_matrix (libinput_device))
- return;
-
- libinput_device_config_calibration_set_matrix (libinput_device, matrix);
-}
-
-static void
-meta_input_settings_native_set_stylus_pressure (MetaInputSettings *settings,
- ClutterInputDevice *device,
- ClutterInputDeviceTool *tool,
- const gint curve[4])
-{
- gdouble pressure_curve[4];
-
- pressure_curve[0] = (gdouble) curve[0] / 100;
- pressure_curve[1] = (gdouble) curve[1] / 100;
- pressure_curve[2] = (gdouble) curve[2] / 100;
- pressure_curve[3] = (gdouble) curve[3] / 100;
-
- meta_input_device_tool_native_set_pressure_curve_in_impl (tool, pressure_curve);
-}
-
-static guint
-action_to_evcode (GDesktopStylusButtonAction action)
-{
- switch (action)
- {
- case G_DESKTOP_STYLUS_BUTTON_ACTION_MIDDLE:
- return BTN_STYLUS;
- case G_DESKTOP_STYLUS_BUTTON_ACTION_RIGHT:
- return BTN_STYLUS2;
- case G_DESKTOP_STYLUS_BUTTON_ACTION_BACK:
- return BTN_BACK;
- case G_DESKTOP_STYLUS_BUTTON_ACTION_FORWARD:
- return BTN_FORWARD;
- case G_DESKTOP_STYLUS_BUTTON_ACTION_DEFAULT:
- default:
- return 0;
- }
-}
-
-static void
-meta_input_settings_native_set_stylus_button_map (MetaInputSettings *settings,
- ClutterInputDevice *device,
- ClutterInputDeviceTool *tool,
- GDesktopStylusButtonAction primary,
- GDesktopStylusButtonAction secondary,
- GDesktopStylusButtonAction tertiary)
-{
- meta_input_device_tool_native_set_button_code_in_impl (tool, CLUTTER_BUTTON_MIDDLE,
- action_to_evcode (primary));
- meta_input_device_tool_native_set_button_code_in_impl (tool, CLUTTER_BUTTON_SECONDARY,
- action_to_evcode (secondary));
- meta_input_device_tool_native_set_button_code_in_impl (tool, 8, /* Back */
- action_to_evcode (tertiary));
-}
-
-static void
-meta_input_settings_native_set_mouse_middle_click_emulation (MetaInputSettings *settings,
- ClutterInputDevice *device,
- gboolean enabled)
-{
- struct libinput_device *libinput_device;
-
- if (!is_mouse_device (device))
- return;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (!libinput_device)
- return;
-
- if (libinput_device_config_middle_emulation_is_available (libinput_device))
- libinput_device_config_middle_emulation_set_enabled (libinput_device, enabled);
-}
-
-static void
-meta_input_settings_native_set_touchpad_middle_click_emulation (MetaInputSettings *settings,
- ClutterInputDevice *device,
- gboolean enabled)
-{
- struct libinput_device *libinput_device;
-
- if (!meta_input_settings_native_is_touchpad_device (settings, device))
- return;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (!libinput_device)
- return;
-
- if (libinput_device_config_middle_emulation_is_available (libinput_device))
- libinput_device_config_middle_emulation_set_enabled (libinput_device, enabled);
-}
-
-static void
-meta_input_settings_native_set_trackball_middle_click_emulation (MetaInputSettings *settings,
- ClutterInputDevice *device,
- gboolean enabled)
-{
- struct libinput_device *libinput_device;
-
- if (!meta_input_settings_native_is_trackball_device (settings, device))
- return;
-
- libinput_device = meta_input_device_native_get_libinput_device (device);
- if (!libinput_device)
- return;
-
- if (libinput_device_config_middle_emulation_is_available (libinput_device))
- libinput_device_config_middle_emulation_set_enabled (libinput_device, enabled);
-}
-
-static void
-meta_input_settings_native_class_init (MetaInputSettingsNativeClass *klass)
-{
- MetaInputSettingsClass *input_settings_class = META_INPUT_SETTINGS_CLASS (klass);
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->set_property = meta_input_settings_native_set_property;
- object_class->get_property = meta_input_settings_native_get_property;
-
- input_settings_class->set_send_events = meta_input_settings_native_set_send_events;
- input_settings_class->set_matrix = meta_input_settings_native_set_matrix;
- input_settings_class->set_speed = meta_input_settings_native_set_speed;
- 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_button_map = meta_input_settings_native_set_tap_button_map;
- input_settings_class->set_tap_and_drag_enabled = meta_input_settings_native_set_tap_and_drag_enabled;
- input_settings_class->set_tap_and_drag_lock_enabled =
- meta_input_settings_native_set_tap_and_drag_lock_enabled;
- input_settings_class->set_invert_scroll = meta_input_settings_native_set_invert_scroll;
- input_settings_class->set_edge_scroll = meta_input_settings_native_set_edge_scroll;
- input_settings_class->set_two_finger_scroll = meta_input_settings_native_set_two_finger_scroll;
- 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_keyboard_repeat = meta_input_settings_native_set_keyboard_repeat;
- input_settings_class->set_disable_while_typing = meta_input_settings_native_set_disable_while_typing;
-
- input_settings_class->set_tablet_mapping = meta_input_settings_native_set_tablet_mapping;
- input_settings_class->set_tablet_aspect_ratio = meta_input_settings_native_set_tablet_aspect_ratio;
- input_settings_class->set_tablet_area = meta_input_settings_native_set_tablet_area;
-
- input_settings_class->set_mouse_accel_profile = meta_input_settings_native_set_mouse_accel_profile;
- input_settings_class->set_trackball_accel_profile = meta_input_settings_native_set_trackball_accel_profile;
-
- input_settings_class->set_stylus_pressure = meta_input_settings_native_set_stylus_pressure;
- input_settings_class->set_stylus_button_map = meta_input_settings_native_set_stylus_button_map;
-
- input_settings_class->set_mouse_middle_click_emulation = meta_input_settings_native_set_mouse_middle_click_emulation;
- input_settings_class->set_touchpad_middle_click_emulation = meta_input_settings_native_set_touchpad_middle_click_emulation;
- input_settings_class->set_trackball_middle_click_emulation = meta_input_settings_native_set_trackball_middle_click_emulation;
-
- input_settings_class->has_two_finger_scroll = meta_input_settings_native_has_two_finger_scroll;
- input_settings_class->is_trackball_device = meta_input_settings_native_is_trackball_device;
-
- props[PROP_SEAT_IMPL] =
- g_param_spec_object ("seat-impl",
- "Seat Impl",
- "Seat Impl",
- META_TYPE_SEAT_IMPL,
- CLUTTER_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY);
-
- g_object_class_install_properties (object_class, N_PROPS, props);
-}
-
-static void
-meta_input_settings_native_init (MetaInputSettingsNative *settings)
-{
-}
-
-MetaInputSettings *
-meta_input_settings_native_new_in_impl (MetaSeatImpl *seat_impl)
-{
- return g_object_new (META_TYPE_INPUT_SETTINGS_NATIVE,
- "seat-impl", seat_impl,
- NULL);
-}