From ccbdf91776656224d5dcb62c9a6a29ed953e011b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Wed, 10 Mar 2021 03:18:13 +0100 Subject: [PATCH] backends/x11: Add dummy input-settings implementation The nested backend may need to have an input setting implementation, while we don't want to change the host settings (re-using an X11 input settings) we can add a dummy implementation, until something more complex is needed. Part-of: --- src/backends/meta-input-settings-dummy.c | 295 ++++++++++++++++++ src/backends/meta-input-settings-dummy.h | 34 ++ .../x11/nested/meta-backend-x11-nested.c | 32 +- src/meson.build | 2 + 4 files changed, 362 insertions(+), 1 deletion(-) create mode 100644 src/backends/meta-input-settings-dummy.c create mode 100644 src/backends/meta-input-settings-dummy.h diff --git a/src/backends/meta-input-settings-dummy.c b/src/backends/meta-input-settings-dummy.c new file mode 100644 index 000000000..ff980423c --- /dev/null +++ b/src/backends/meta-input-settings-dummy.c @@ -0,0 +1,295 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ + +/* + * Copyright 2021 Canonical, Ltd. + * + * 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, see . + * + * Author: Marco Trevisan + */ + +#include "backends/meta-input-settings-dummy.h" + +G_DEFINE_TYPE (MetaInputSettingsDummy, + meta_input_settings_dummy, + META_TYPE_INPUT_SETTINGS) + +static void +meta_input_settings_dummy_set_send_events (MetaInputSettings *settings, + ClutterInputDevice *device, + GDesktopDeviceSendEvents mode) +{ +} + +static void +meta_input_settings_dummy_set_matrix (MetaInputSettings *settings, + ClutterInputDevice *device, + gfloat matrix[6]) +{ +} + +static void +meta_input_settings_dummy_set_speed (MetaInputSettings *settings, + ClutterInputDevice *device, + gdouble speed) +{ +} + +static void +meta_input_settings_dummy_set_left_handed (MetaInputSettings *settings, + ClutterInputDevice *device, + gboolean enabled) +{ +} + +static void +meta_input_settings_dummy_set_tap_enabled (MetaInputSettings *settings, + ClutterInputDevice *device, + gboolean enabled) +{ +} + +static void +meta_input_settings_dummy_set_tap_button_map (MetaInputSettings *settings, + ClutterInputDevice *device, + GDesktopTouchpadTapButtonMap mode) +{ +} + +static void +meta_input_settings_dummy_set_tap_and_drag_enabled (MetaInputSettings *settings, + ClutterInputDevice *device, + gboolean enabled) +{ +} + +static void +meta_input_settings_dummy_set_tap_and_drag_lock_enabled (MetaInputSettings *settings, + ClutterInputDevice *device, + gboolean enabled) +{ +} + +static void +meta_input_settings_dummy_set_disable_while_typing (MetaInputSettings *settings, + ClutterInputDevice *device, + gboolean enabled) +{ +} + +static void +meta_input_settings_dummy_set_invert_scroll (MetaInputSettings *settings, + ClutterInputDevice *device, + gboolean inverted) +{ +} + +static void +meta_input_settings_dummy_set_edge_scroll (MetaInputSettings *settings, + ClutterInputDevice *device, + gboolean enabled) +{ +} + +static void +meta_input_settings_dummy_set_two_finger_scroll (MetaInputSettings *settings, + ClutterInputDevice *device, + gboolean enabled) +{ +} + +static void +meta_input_settings_dummy_set_scroll_button (MetaInputSettings *settings, + ClutterInputDevice *device, + guint button, + gboolean button_lock) +{ +} + + +static void +meta_input_settings_dummy_set_click_method (MetaInputSettings *settings, + ClutterInputDevice *device, + GDesktopTouchpadClickMethod mode) +{ +} + + +static void +meta_input_settings_dummy_set_keyboard_repeat (MetaInputSettings *settings, + gboolean repeat, + guint delay, + guint interval) +{ +} + + +static void +meta_input_settings_dummy_set_tablet_mapping (MetaInputSettings *settings, + ClutterInputDevice *device, + GDesktopTabletMapping mapping) +{ +} + +static void +meta_input_settings_dummy_set_tablet_aspect_ratio (MetaInputSettings *settings, + ClutterInputDevice *device, + double ratio) +{ +} + +static void +meta_input_settings_dummy_set_tablet_area (MetaInputSettings *settings, + ClutterInputDevice *device, + gdouble padding_left, + gdouble padding_right, + gdouble padding_top, + gdouble padding_bottom) +{ +} + + +static void +meta_input_settings_dummy_set_mouse_accel_profile (MetaInputSettings *settings, + ClutterInputDevice *device, + GDesktopPointerAccelProfile profile) +{ +} + +static void +meta_input_settings_dummy_set_trackball_accel_profile (MetaInputSettings *settings, + ClutterInputDevice *device, + GDesktopPointerAccelProfile profile) +{ +} + + +static void +meta_input_settings_dummy_set_stylus_pressure (MetaInputSettings *settings, + ClutterInputDevice *device, + ClutterInputDeviceTool *tool, + const gint32 curve[4]) +{ +} + +static void +meta_input_settings_dummy_set_stylus_button_map (MetaInputSettings *settings, + ClutterInputDevice *device, + ClutterInputDeviceTool *tool, + GDesktopStylusButtonAction primary, + GDesktopStylusButtonAction secondary, + GDesktopStylusButtonAction tertiary) +{ +} + + +static void +meta_input_settings_dummy_set_mouse_middle_click_emulation (MetaInputSettings *settings, + ClutterInputDevice *device, + gboolean enabled) +{ +} + +static void +meta_input_settings_dummy_set_touchpad_middle_click_emulation (MetaInputSettings *settings, + ClutterInputDevice *device, + gboolean enabled) +{ +} + +static void +meta_input_settings_dummy_set_trackball_middle_click_emulation (MetaInputSettings *settings, + ClutterInputDevice *device, + gboolean enabled) +{ +} + +static gboolean +meta_input_settings_dummy_has_two_finger_scroll (MetaInputSettings *settings, + ClutterInputDevice *device) +{ + return FALSE; +} +static gboolean +meta_input_settings_dummy_is_trackball_device (MetaInputSettings *settings, + ClutterInputDevice *device) +{ + return FALSE; +} + +static void +meta_input_settings_dummy_init (MetaInputSettingsDummy *input_settings) +{ +} + +static void +meta_input_settings_dummy_class_init (MetaInputSettingsDummyClass *klass) +{ + MetaInputSettingsClass *input_settings_class = META_INPUT_SETTINGS_CLASS (klass); + + input_settings_class->set_send_events = + meta_input_settings_dummy_set_send_events; + input_settings_class->set_matrix = + meta_input_settings_dummy_set_matrix; + input_settings_class->set_speed = + meta_input_settings_dummy_set_speed; + input_settings_class->set_left_handed = + meta_input_settings_dummy_set_left_handed; + input_settings_class->set_tap_enabled = + meta_input_settings_dummy_set_tap_enabled; + input_settings_class->set_tap_button_map = + meta_input_settings_dummy_set_tap_button_map; + input_settings_class->set_tap_and_drag_enabled = + meta_input_settings_dummy_set_tap_and_drag_enabled; + input_settings_class->set_tap_and_drag_lock_enabled = + meta_input_settings_dummy_set_tap_and_drag_lock_enabled; + input_settings_class->set_disable_while_typing = + meta_input_settings_dummy_set_disable_while_typing; + input_settings_class->set_invert_scroll = + meta_input_settings_dummy_set_invert_scroll; + input_settings_class->set_edge_scroll = + meta_input_settings_dummy_set_edge_scroll; + input_settings_class->set_two_finger_scroll = + meta_input_settings_dummy_set_two_finger_scroll; + input_settings_class->set_scroll_button = + meta_input_settings_dummy_set_scroll_button; + input_settings_class->set_click_method = + meta_input_settings_dummy_set_click_method; + input_settings_class->set_keyboard_repeat = + meta_input_settings_dummy_set_keyboard_repeat; + input_settings_class->set_tablet_mapping = + meta_input_settings_dummy_set_tablet_mapping; + input_settings_class->set_tablet_aspect_ratio = + meta_input_settings_dummy_set_tablet_aspect_ratio; + input_settings_class->set_tablet_area = + meta_input_settings_dummy_set_tablet_area; + input_settings_class->set_mouse_accel_profile = + meta_input_settings_dummy_set_mouse_accel_profile; + input_settings_class->set_trackball_accel_profile = + meta_input_settings_dummy_set_trackball_accel_profile; + input_settings_class->set_stylus_pressure = + meta_input_settings_dummy_set_stylus_pressure; + input_settings_class->set_stylus_button_map = + meta_input_settings_dummy_set_stylus_button_map; + input_settings_class->set_mouse_middle_click_emulation = + meta_input_settings_dummy_set_mouse_middle_click_emulation; + input_settings_class->set_touchpad_middle_click_emulation = + meta_input_settings_dummy_set_touchpad_middle_click_emulation; + input_settings_class->set_trackball_middle_click_emulation = + meta_input_settings_dummy_set_trackball_middle_click_emulation; + input_settings_class->has_two_finger_scroll = + meta_input_settings_dummy_has_two_finger_scroll; + input_settings_class->is_trackball_device = + meta_input_settings_dummy_is_trackball_device; +} diff --git a/src/backends/meta-input-settings-dummy.h b/src/backends/meta-input-settings-dummy.h new file mode 100644 index 000000000..9d91dc15d --- /dev/null +++ b/src/backends/meta-input-settings-dummy.h @@ -0,0 +1,34 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ + +/* + * Copyright 2021 Canonical, Ltd. + * + * 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, see . + * + * Author: Marco Trevisan + */ + +#pragma once + +#include "backends/meta-input-settings-private.h" + +#define META_TYPE_INPUT_SETTINGS_DUMMY (meta_input_settings_dummy_get_type ()) + +G_DECLARE_DERIVABLE_TYPE (MetaInputSettingsDummy, meta_input_settings_dummy, + META, INPUT_SETTINGS_DUMMY, MetaInputSettings); + +struct _MetaInputSettingsDummyClass +{ + MetaInputSettingsClass parent_class; +}; diff --git a/src/backends/x11/nested/meta-backend-x11-nested.c b/src/backends/x11/nested/meta-backend-x11-nested.c index 425ddcb1a..0b8c3053a 100644 --- a/src/backends/x11/nested/meta-backend-x11-nested.c +++ b/src/backends/x11/nested/meta-backend-x11-nested.c @@ -21,6 +21,7 @@ #include "backends/x11/nested/meta-backend-x11-nested.h" +#include "backends/meta-input-settings-dummy.h" #include "backends/meta-monitor-manager-dummy.h" #include "backends/x11/nested/meta-backend-x11-nested.h" #include "backends/x11/nested/meta-cursor-renderer-x11-nested.h" @@ -32,6 +33,7 @@ typedef struct _MetaBackendX11NestedPrivate { MetaGpu *gpu; MetaCursorRenderer *cursor_renderer; + MetaInputSettings *input_settings; } MetaBackendX11NestedPrivate; static GInitableIface *initable_parent_iface; @@ -86,7 +88,22 @@ meta_backend_x11_nested_get_cursor_renderer (MetaBackend *backend, static MetaInputSettings * meta_backend_x11_nested_get_input_settings (MetaBackend *backend) { - return NULL; + MetaBackendX11Nested *backend_x11_nested = META_BACKEND_X11_NESTED (backend); + MetaBackendX11NestedPrivate *priv = + meta_backend_x11_nested_get_instance_private (backend_x11_nested); + + if (!priv->input_settings) + { + ClutterSeat *seat; + + seat = clutter_backend_get_default_seat (clutter_get_default_backend ()); + priv->input_settings = + g_object_new (META_TYPE_INPUT_SETTINGS_DUMMY, + "seat", seat, + NULL); + } + + return priv->input_settings; } static void @@ -271,6 +288,18 @@ meta_backend_x11_nested_constructed (GObject *object) backend_x11_nested_class->init_gpus (backend_x11_nested); } +static void +meta_backend_x11_nested_dispose (GObject *object) +{ + MetaBackendX11Nested *backend_x11_nested = META_BACKEND_X11_NESTED (object); + MetaBackendX11NestedPrivate *priv = + meta_backend_x11_nested_get_instance_private (backend_x11_nested); + + g_clear_object (&priv->input_settings); + + G_OBJECT_CLASS (meta_backend_x11_nested_parent_class)->dispose (object); +} + static void meta_backend_x11_nested_init (MetaBackendX11Nested *backend_x11_nested) { @@ -284,6 +313,7 @@ meta_backend_x11_nested_class_init (MetaBackendX11NestedClass *klass) MetaBackendX11Class *backend_x11_class = META_BACKEND_X11_CLASS (klass); object_class->constructed = meta_backend_x11_nested_constructed; + object_class->dispose = meta_backend_x11_nested_dispose; backend_class->post_init = meta_backend_x11_nested_post_init; backend_class->create_renderer = meta_backend_x11_nested_create_renderer; diff --git a/src/meson.build b/src/meson.build index 4b015e620..7ed0bfca0 100644 --- a/src/meson.build +++ b/src/meson.build @@ -196,6 +196,8 @@ mutter_sources = [ 'backends/meta-input-mapper-private.h', 'backends/meta-input-settings.c', 'backends/meta-input-settings-private.h', + 'backends/meta-input-settings-dummy.c', + 'backends/meta-input-settings-dummy.h', 'backends/meta-keymap-utils.c', 'backends/meta-keymap-utils.h', 'backends/meta-logical-monitor.c',