clutter: Move virtual device management to ClutterSeat

A11y in general may be considered a per-seat feature.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/852
This commit is contained in:
Carlos Garnacho
2019-10-02 14:40:40 +02:00
parent 8d0527f674
commit 1c689b83f9
15 changed files with 134 additions and 158 deletions

View File

@ -2262,11 +2262,15 @@ meta_input_settings_emulate_keybinding (MetaInputSettings *input_settings,
if (!priv->virtual_pad_keyboard)
{
ClutterDeviceManager *manager = clutter_device_manager_get_default ();
ClutterBackend *backend;
ClutterSeat *seat;
backend = clutter_get_default_backend ();
seat = clutter_backend_get_default_seat (backend);
priv->virtual_pad_keyboard =
clutter_device_manager_create_virtual_device (manager,
CLUTTER_KEYBOARD_DEVICE);
clutter_seat_create_virtual_device (seat,
CLUTTER_KEYBOARD_DEVICE);
}
state = is_press ? CLUTTER_KEY_STATE_PRESSED : CLUTTER_KEY_STATE_RELEASED;

View File

@ -116,8 +116,8 @@ static gboolean
meta_remote_desktop_session_start (MetaRemoteDesktopSession *session,
GError **error)
{
ClutterDeviceManager *device_manager =
clutter_device_manager_get_default ();
ClutterBackend *backend = clutter_get_default_backend ();
ClutterSeat *seat = clutter_backend_get_default_seat (backend);
g_assert (!session->virtual_pointer && !session->virtual_keyboard);
@ -128,15 +128,11 @@ meta_remote_desktop_session_start (MetaRemoteDesktopSession *session,
}
session->virtual_pointer =
clutter_device_manager_create_virtual_device (device_manager,
CLUTTER_POINTER_DEVICE);
clutter_seat_create_virtual_device (seat, CLUTTER_POINTER_DEVICE);
session->virtual_keyboard =
clutter_device_manager_create_virtual_device (device_manager,
CLUTTER_KEYBOARD_DEVICE);
clutter_seat_create_virtual_device (seat, CLUTTER_KEYBOARD_DEVICE);
session->virtual_touchscreen =
clutter_device_manager_create_virtual_device (device_manager,
CLUTTER_TOUCHSCREEN_DEVICE);
clutter_seat_create_virtual_device (seat, CLUTTER_TOUCHSCREEN_DEVICE);
init_remote_access_handle (session);

View File

@ -234,14 +234,14 @@ meta_remote_desktop_new (MetaDbusSessionWatcher *session_watcher)
static MetaRemoteDesktopDeviceTypes
calculate_supported_device_types (void)
{
ClutterDeviceManager *device_manager =
clutter_device_manager_get_default ();
ClutterBackend *backend = clutter_get_default_backend ();
ClutterSeat *seat = clutter_backend_get_default_seat (backend);
ClutterVirtualDeviceType device_types;
MetaRemoteDesktopDeviceTypes supported_devices =
META_REMOTE_DESKTOP_DEVICE_TYPE_NONE;
device_types =
clutter_device_manager_get_supported_virtual_device_types (device_manager);
clutter_seat_get_supported_virtual_device_types (seat);
if (device_types & CLUTTER_VIRTUAL_DEVICE_TYPE_KEYBOARD)
supported_devices |= META_REMOTE_DESKTOP_DEVICE_TYPE_KEYBOARD;

View File

@ -127,29 +127,6 @@ meta_device_manager_native_get_device (ClutterDeviceManager *manager,
return NULL;
}
static ClutterVirtualInputDevice *
meta_device_manager_native_create_virtual_device (ClutterDeviceManager *manager,
ClutterInputDeviceType device_type)
{
MetaDeviceManagerNative *manager_evdev =
META_DEVICE_MANAGER_NATIVE (manager);
MetaDeviceManagerNativePrivate *priv = manager_evdev->priv;
return g_object_new (META_TYPE_VIRTUAL_INPUT_DEVICE_NATIVE,
"device-manager", manager,
"seat", priv->main_seat,
"device-type", device_type,
NULL);
}
static ClutterVirtualDeviceType
meta_device_manager_native_get_supported_virtual_device_types (ClutterDeviceManager *device_manager)
{
return (CLUTTER_VIRTUAL_DEVICE_TYPE_KEYBOARD |
CLUTTER_VIRTUAL_DEVICE_TYPE_POINTER |
CLUTTER_VIRTUAL_DEVICE_TYPE_TOUCHSCREEN);
}
static void
meta_device_manager_native_compress_motion (ClutterDeviceManager *device_manger,
ClutterEvent *event,
@ -236,8 +213,6 @@ meta_device_manager_native_class_init (MetaDeviceManagerNativeClass *klass)
manager_class->get_devices = meta_device_manager_native_get_devices;
manager_class->get_core_device = meta_device_manager_native_get_core_device;
manager_class->get_device = meta_device_manager_native_get_device;
manager_class->create_virtual_device = meta_device_manager_native_create_virtual_device;
manager_class->get_supported_virtual_device_types = meta_device_manager_native_get_supported_virtual_device_types;
manager_class->compress_motion = meta_device_manager_native_compress_motion;
}

View File

@ -851,7 +851,6 @@ static void
enable_mousekeys (MetaInputDeviceNative *device_evdev)
{
ClutterInputDevice *device = CLUTTER_INPUT_DEVICE (device_evdev);
ClutterDeviceManager *manager = device->device_manager;
device_evdev->mousekeys_btn = CLUTTER_BUTTON_PRIMARY;
device_evdev->move_mousekeys_timer = 0;
@ -863,8 +862,8 @@ enable_mousekeys (MetaInputDeviceNative *device_evdev)
return;
device->accessibility_virtual_device =
clutter_device_manager_create_virtual_device (manager,
CLUTTER_POINTER_DEVICE);
clutter_seat_create_virtual_device (CLUTTER_SEAT (device_evdev->seat),
CLUTTER_POINTER_DEVICE);
}
static void

View File

@ -37,6 +37,7 @@
#include "backends/native/meta-input-device-native.h"
#include "backends/native/meta-input-device-tool-native.h"
#include "backends/native/meta-keymap-native.h"
#include "backends/native/meta-virtual-input-device-native.h"
#include "clutter/clutter-mutter.h"
#include "core/bell.h"
@ -2568,6 +2569,24 @@ meta_seat_native_apply_kbd_a11y_settings (ClutterSeat *seat,
settings);
}
static ClutterVirtualInputDevice *
meta_seat_native_create_virtual_device (ClutterSeat *seat,
ClutterInputDeviceType device_type)
{
return g_object_new (META_TYPE_VIRTUAL_INPUT_DEVICE_NATIVE,
"seat", seat,
"device-type", device_type,
NULL);
}
static ClutterVirtualDeviceType
meta_seat_native_get_supported_virtual_device_types (ClutterSeat *seat)
{
return (CLUTTER_VIRTUAL_DEVICE_TYPE_KEYBOARD |
CLUTTER_VIRTUAL_DEVICE_TYPE_POINTER |
CLUTTER_VIRTUAL_DEVICE_TYPE_TOUCHSCREEN);
}
static void
meta_seat_native_class_init (MetaSeatNativeClass *klass)
{
@ -2588,6 +2607,8 @@ meta_seat_native_class_init (MetaSeatNativeClass *klass)
seat_class->copy_event_data = meta_seat_native_copy_event_data;
seat_class->free_event_data = meta_seat_native_free_event_data;
seat_class->apply_kbd_a11y_settings = meta_seat_native_apply_kbd_a11y_settings;
seat_class->create_virtual_device = meta_seat_native_create_virtual_device;
seat_class->get_supported_virtual_device_types = meta_seat_native_get_supported_virtual_device_types;
props[PROP_SEAT_ID] =
g_param_spec_string ("seat-id",

View File

@ -228,23 +228,6 @@ meta_device_manager_x11_set_property (GObject *object,
}
}
static ClutterVirtualInputDevice *
meta_device_manager_x11_create_virtual_device (ClutterDeviceManager *manager,
ClutterInputDeviceType device_type)
{
return g_object_new (META_TYPE_VIRTUAL_INPUT_DEVICE_X11,
"device-manager", manager,
"device-type", device_type,
NULL);
}
static ClutterVirtualDeviceType
meta_device_manager_x11_get_supported_virtual_device_types (ClutterDeviceManager *device_manager)
{
return (CLUTTER_VIRTUAL_DEVICE_TYPE_KEYBOARD |
CLUTTER_VIRTUAL_DEVICE_TYPE_POINTER);
}
static void
meta_device_manager_x11_class_init (MetaDeviceManagerX11Class *klass)
{
@ -271,8 +254,6 @@ meta_device_manager_x11_class_init (MetaDeviceManagerX11Class *klass)
manager_class->get_core_device = meta_device_manager_x11_get_core_device;
manager_class->get_device = meta_device_manager_x11_get_device;
manager_class->select_stage_events = meta_device_manager_x11_select_stage_events;
manager_class->create_virtual_device = meta_device_manager_x11_create_virtual_device;
manager_class->get_supported_virtual_device_types = meta_device_manager_x11_get_supported_virtual_device_types;
}
static void

View File

@ -25,6 +25,7 @@
#include "backends/x11/meta-input-device-x11.h"
#include "backends/x11/meta-keymap-x11.h"
#include "backends/x11/meta-stage-x11.h"
#include "backends/x11/meta-virtual-input-device-x11.h"
#include "backends/x11/meta-xkb-a11y-x11.h"
#include "clutter/clutter-mutter.h"
#include "clutter/x11/clutter-x11.h"
@ -1482,6 +1483,23 @@ meta_seat_x11_free_event_data (ClutterSeat *seat,
meta_event_x11_free (event_x11);
}
static ClutterVirtualInputDevice *
meta_seat_x11_create_virtual_device (ClutterSeat *seat,
ClutterInputDeviceType device_type)
{
return g_object_new (META_TYPE_VIRTUAL_INPUT_DEVICE_X11,
"seat", seat,
"device-type", device_type,
NULL);
}
static ClutterVirtualDeviceType
meta_seat_x11_get_supported_virtual_device_types (ClutterSeat *seat)
{
return (CLUTTER_VIRTUAL_DEVICE_TYPE_KEYBOARD |
CLUTTER_VIRTUAL_DEVICE_TYPE_POINTER);
}
static void
meta_seat_x11_class_init (MetaSeatX11Class *klass)
{
@ -1501,6 +1519,8 @@ meta_seat_x11_class_init (MetaSeatX11Class *klass)
seat_class->copy_event_data = meta_seat_x11_copy_event_data;
seat_class->free_event_data = meta_seat_x11_free_event_data;
seat_class->apply_kbd_a11y_settings = meta_seat_x11_apply_kbd_a11y_settings;
seat_class->create_virtual_device = meta_seat_x11_create_virtual_device;
seat_class->get_supported_virtual_device_types = meta_seat_x11_get_supported_virtual_device_types;
props[PROP_OPCODE] =
g_param_spec_int ("opcode",