backend: Set up and use ownership chains

This means objects have an owner, where the chain eventually always
leads to a MetaContext. This also means that all objects can find their
way to other object instances via the chain, instead of scattered global
singletons.

This is a squashed commit originally containing the following:

cursor-tracker: Don't get backend from singleton

idle-manager: Don't get backend from singleton

input-device: Pass pointer to backend during construction

The backend is needed during construction to get the wacom database.

input-mapper: Pass backend when constructing

monitor: Don't get backend from singleton

monitor-manager: Get backend directly from monitor manager

remote: Get backend from manager class

For the remote desktop and screen cast implementations, replace getting
the backend from singletons with getting it via the manager classes.

launcher: Pass backend during construction

device-pool: Pass backend during construction

Instead of passing the (maybe null) launcher, pass the backend, and get
the launcher from there. That way we always have a way to some known
context from the device pool.

drm-buffer/gbm: Get backend via device pool

cursor-renderer: Get backend directly from renderer

input-device: Get backend getter

input-settings: Add backend construct property and getter

input-settings/x11: Don't get backend from singleton

renderer: Get backend from renderer itself

seat-impl: Add backend getter

seat/native: Get backend from instance struct

stage-impl: Get backend from stage impl itself

x11/xkb-a11y: Don't get backend from singleton

backend/x11/nested: Don't get Wayland compositor from singleton

crtc: Add backend property

Adding a link to the GPU isn't enough; the virtual CRTCs of virtual
monitors doesn't have one.

cursor-tracker: Don't get display from singleton

remote: Don't get display from singleton

seat: Don't get display from singleton

backend/x11: Don't get display from singleton

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2718>
This commit is contained in:
Jonas Ådahl 2022-05-27 19:35:01 +02:00 committed by Marge Bot
parent c45ab10c0e
commit c390f70edc
54 changed files with 506 additions and 144 deletions

View File

@ -556,7 +556,7 @@ meta_backend_real_post_init (MetaBackend *backend)
G_CALLBACK (on_device_removed), backend, G_CALLBACK (on_device_removed), backend,
G_CONNECT_AFTER); G_CONNECT_AFTER);
priv->input_mapper = meta_input_mapper_new (); priv->input_mapper = meta_input_mapper_new (backend);
input_settings = meta_backend_get_input_settings (backend); input_settings = meta_backend_get_input_settings (backend);

View File

@ -28,6 +28,7 @@ enum
PROP_0, PROP_0,
PROP_ID, PROP_ID,
PROP_BACKEND,
PROP_GPU, PROP_GPU,
PROP_ALL_TRANSFORMS, PROP_ALL_TRANSFORMS,
@ -40,6 +41,7 @@ typedef struct _MetaCrtcPrivate
{ {
uint64_t id; uint64_t id;
MetaBackend *backend;
MetaGpu *gpu; MetaGpu *gpu;
MetaMonitorTransform all_transforms; MetaMonitorTransform all_transforms;
@ -58,6 +60,14 @@ meta_crtc_get_id (MetaCrtc *crtc)
return priv->id; return priv->id;
} }
MetaBackend *
meta_crtc_get_backend (MetaCrtc *crtc)
{
MetaCrtcPrivate *priv = meta_crtc_get_instance_private (crtc);
return priv->backend;
}
MetaGpu * MetaGpu *
meta_crtc_get_gpu (MetaCrtc *crtc) meta_crtc_get_gpu (MetaCrtc *crtc)
{ {
@ -179,6 +189,9 @@ meta_crtc_set_property (GObject *object,
case PROP_ID: case PROP_ID:
priv->id = g_value_get_uint64 (value); priv->id = g_value_get_uint64 (value);
break; break;
case PROP_BACKEND:
priv->backend = g_value_get_object (value);
break;
case PROP_GPU: case PROP_GPU:
priv->gpu = g_value_get_object (value); priv->gpu = g_value_get_object (value);
break; break;
@ -204,6 +217,9 @@ meta_crtc_get_property (GObject *object,
case PROP_ID: case PROP_ID:
g_value_set_uint64 (value, priv->id); g_value_set_uint64 (value, priv->id);
break; break;
case PROP_BACKEND:
g_value_set_object (value, priv->backend);
break;
case PROP_GPU: case PROP_GPU:
g_value_set_object (value, priv->gpu); g_value_set_object (value, priv->gpu);
break; break;
@ -252,6 +268,14 @@ meta_crtc_class_init (MetaCrtcClass *klass)
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
obj_props[PROP_BACKEND] =
g_param_spec_object ("backend",
"backend",
"MetaBackend",
META_TYPE_BACKEND,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
obj_props[PROP_GPU] = obj_props[PROP_GPU] =
g_param_spec_object ("gpu", g_param_spec_object ("gpu",
"gpu", "gpu",

View File

@ -54,6 +54,9 @@ struct _MetaCrtcClass
META_EXPORT_TEST META_EXPORT_TEST
uint64_t meta_crtc_get_id (MetaCrtc *crtc); uint64_t meta_crtc_get_id (MetaCrtc *crtc);
META_EXPORT_TEST
MetaBackend * meta_crtc_get_backend (MetaCrtc *crtc);
META_EXPORT_TEST META_EXPORT_TEST
MetaGpu * meta_crtc_get_gpu (MetaCrtc *crtc); MetaGpu * meta_crtc_get_gpu (MetaCrtc *crtc);

View File

@ -478,3 +478,12 @@ meta_cursor_renderer_get_input_device (MetaCursorRenderer *renderer)
return priv->device; return priv->device;
} }
MetaBackend *
meta_cursor_renderer_get_backend (MetaCursorRenderer *renderer)
{
MetaCursorRendererPrivate *priv =
meta_cursor_renderer_get_instance_private (renderer);
return priv->backend;
}

View File

@ -77,4 +77,6 @@ ClutterInputDevice * meta_cursor_renderer_get_input_device (MetaCursorRenderer *
void meta_cursor_renderer_update_stage_overlay (MetaCursorRenderer *renderer, void meta_cursor_renderer_update_stage_overlay (MetaCursorRenderer *renderer,
MetaCursorSprite *cursor_sprite); MetaCursorSprite *cursor_sprite);
MetaBackend * meta_cursor_renderer_get_backend (MetaCursorRenderer *renderer);
#endif /* META_CURSOR_RENDERER_H */ #endif /* META_CURSOR_RENDERER_H */

View File

@ -109,7 +109,8 @@ update_displayed_cursor (MetaCursorTracker *tracker)
{ {
MetaCursorTrackerPrivate *priv = MetaCursorTrackerPrivate *priv =
meta_cursor_tracker_get_instance_private (tracker); meta_cursor_tracker_get_instance_private (tracker);
MetaDisplay *display = meta_get_display (); MetaContext *context = meta_backend_get_context (priv->backend);
MetaDisplay *display = meta_context_get_display (context);
MetaCursorSprite *cursor = NULL; MetaCursorSprite *cursor = NULL;
if (display && meta_display_windows_are_interactable (display) && if (display && meta_display_windows_are_interactable (display) &&
@ -323,7 +324,8 @@ meta_cursor_tracker_class_init (MetaCursorTrackerClass *klass)
MetaCursorTracker * MetaCursorTracker *
meta_cursor_tracker_get_for_display (MetaDisplay *display) meta_cursor_tracker_get_for_display (MetaDisplay *display)
{ {
MetaBackend *backend = meta_get_backend (); MetaContext *context = meta_display_get_context (display);
MetaBackend *backend = meta_context_get_backend (context);
MetaCursorTracker *tracker = meta_backend_get_cursor_tracker (backend); MetaCursorTracker *tracker = meta_backend_get_cursor_tracker (backend);
g_assert (tracker); g_assert (tracker);

View File

@ -266,7 +266,7 @@ meta_idle_manager_get_monitor (MetaIdleManager *idle_manager,
MetaIdleMonitor * MetaIdleMonitor *
meta_idle_manager_get_core_monitor (MetaIdleManager *idle_manager) meta_idle_manager_get_core_monitor (MetaIdleManager *idle_manager)
{ {
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = idle_manager->backend;
ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend); ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend);
ClutterSeat *seat = clutter_backend_get_default_seat (clutter_backend); ClutterSeat *seat = clutter_backend_get_default_seat (clutter_backend);

View File

@ -25,6 +25,7 @@
#include <libwacom/libwacom.h> #include <libwacom/libwacom.h>
#endif #endif
#include "backends/meta-backend-types.h"
#include "clutter/clutter-mutter.h" #include "clutter/clutter-mutter.h"
typedef struct _MetaInputDeviceClass MetaInputDeviceClass; typedef struct _MetaInputDeviceClass MetaInputDeviceClass;
@ -45,4 +46,6 @@ G_DECLARE_DERIVABLE_TYPE (MetaInputDevice,
WacomDevice * meta_input_device_get_wacom_device (MetaInputDevice *input_device); WacomDevice * meta_input_device_get_wacom_device (MetaInputDevice *input_device);
#endif #endif
MetaBackend * meta_input_device_get_backend (MetaInputDevice *input_device);
#endif /* META_INPUT_DEVICE_H */ #endif /* META_INPUT_DEVICE_H */

View File

@ -26,6 +26,8 @@ typedef struct _MetaInputDevicePrivate MetaInputDevicePrivate;
struct _MetaInputDevicePrivate struct _MetaInputDevicePrivate
{ {
MetaBackend *backend;
#ifdef HAVE_LIBWACOM #ifdef HAVE_LIBWACOM
WacomDevice *wacom_device; WacomDevice *wacom_device;
#else #else
@ -38,6 +40,7 @@ enum
{ {
PROP_0, PROP_0,
PROP_BACKEND,
PROP_WACOM_DEVICE, PROP_WACOM_DEVICE,
N_PROPS N_PROPS
@ -69,7 +72,7 @@ meta_input_device_constructed (GObject *object)
#ifdef HAVE_LIBWACOM #ifdef HAVE_LIBWACOM
input_device = META_INPUT_DEVICE (object); input_device = META_INPUT_DEVICE (object);
priv = meta_input_device_get_instance_private (input_device); priv = meta_input_device_get_instance_private (input_device);
wacom_db = meta_backend_get_wacom_database (meta_get_backend ()); wacom_db = meta_backend_get_wacom_database (priv->backend);
node = clutter_input_device_get_device_node (CLUTTER_INPUT_DEVICE (input_device)); node = clutter_input_device_get_device_node (CLUTTER_INPUT_DEVICE (input_device));
priv->wacom_device = libwacom_new_from_path (wacom_db, node, priv->wacom_device = libwacom_new_from_path (wacom_db, node,
WFALLBACK_NONE, NULL); WFALLBACK_NONE, NULL);
@ -90,6 +93,26 @@ meta_input_device_finalize (GObject *object)
G_OBJECT_CLASS (meta_input_device_parent_class)->finalize (object); G_OBJECT_CLASS (meta_input_device_parent_class)->finalize (object);
} }
static void
meta_input_device_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
MetaInputDevicePrivate *priv;
priv = meta_input_device_get_instance_private (META_INPUT_DEVICE (object));
switch (prop_id)
{
case PROP_BACKEND:
priv->backend = g_value_get_object (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
static void static void
meta_input_device_get_property (GObject *object, meta_input_device_get_property (GObject *object,
guint prop_id, guint prop_id,
@ -117,8 +140,17 @@ meta_input_device_class_init (MetaInputDeviceClass *klass)
object_class->constructed = meta_input_device_constructed; object_class->constructed = meta_input_device_constructed;
object_class->finalize = meta_input_device_finalize; object_class->finalize = meta_input_device_finalize;
object_class->set_property = meta_input_device_set_property;
object_class->get_property = meta_input_device_get_property; object_class->get_property = meta_input_device_get_property;
props[PROP_BACKEND] =
g_param_spec_object ("backend",
"backend",
"MetaBackend",
META_TYPE_BACKEND,
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
props[PROP_WACOM_DEVICE] = props[PROP_WACOM_DEVICE] =
g_param_spec_pointer ("wacom-device", g_param_spec_pointer ("wacom-device",
"Wacom device", "Wacom device",
@ -140,3 +172,12 @@ meta_input_device_get_wacom_device (MetaInputDevice *input_device)
return priv->wacom_device; return priv->wacom_device;
} }
#endif /* HAVE_LIBWACOM */ #endif /* HAVE_LIBWACOM */
MetaBackend *
meta_input_device_get_backend (MetaInputDevice *input_device)
{
MetaInputDevicePrivate *priv =
meta_input_device_get_instance_private (input_device);
return priv->backend;
}

View File

@ -34,7 +34,7 @@ G_DECLARE_FINAL_TYPE (MetaInputMapper, meta_input_mapper,
META, INPUT_MAPPER, META, INPUT_MAPPER,
MetaDBusInputMappingSkeleton) MetaDBusInputMappingSkeleton)
MetaInputMapper * meta_input_mapper_new (void); MetaInputMapper * meta_input_mapper_new (MetaBackend *backend);
void meta_input_mapper_add_device (MetaInputMapper *mapper, void meta_input_mapper_add_device (MetaInputMapper *mapper,
ClutterInputDevice *device); ClutterInputDevice *device);

View File

@ -33,6 +33,17 @@
#define MAX_SIZE_MATCH_DIFF 0.05 #define MAX_SIZE_MATCH_DIFF 0.05
enum
{
PROP_0,
PROP_BACKEND,
N_PROPS
};
static GParamSpec *obj_props[N_PROPS];
typedef struct _MetaMapperInputInfo MetaMapperInputInfo; typedef struct _MetaMapperInputInfo MetaMapperInputInfo;
typedef struct _MetaMapperOutputInfo MetaMapperOutputInfo; typedef struct _MetaMapperOutputInfo MetaMapperOutputInfo;
typedef struct _MappingHelper MappingHelper; typedef struct _MappingHelper MappingHelper;
@ -42,6 +53,8 @@ typedef struct _DeviceMatch DeviceMatch;
struct _MetaInputMapper struct _MetaInputMapper
{ {
MetaDBusInputMappingSkeleton parent_instance; MetaDBusInputMappingSkeleton parent_instance;
MetaBackend *backend;
MetaMonitorManager *monitor_manager; MetaMonitorManager *monitor_manager;
ClutterSeat *seat; ClutterSeat *seat;
GHashTable *input_devices; /* ClutterInputDevice -> MetaMapperInputInfo */ GHashTable *input_devices; /* ClutterInputDevice -> MetaMapperInputInfo */
@ -682,6 +695,44 @@ input_mapper_device_removed_cb (ClutterSeat *seat,
meta_input_mapper_remove_device (mapper, device); meta_input_mapper_remove_device (mapper, device);
} }
static void
meta_input_mapper_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
MetaInputMapper *mapper = META_INPUT_MAPPER (object);
switch (prop_id)
{
case PROP_BACKEND:
mapper->backend = g_value_get_object (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
meta_input_mapper_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
MetaInputMapper *mapper = META_INPUT_MAPPER (object);
switch (prop_id)
{
case PROP_BACKEND:
g_value_set_object (value, mapper->backend);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void static void
meta_input_mapper_finalize (GObject *object) meta_input_mapper_finalize (GObject *object)
{ {
@ -706,7 +757,6 @@ static void
meta_input_mapper_constructed (GObject *object) meta_input_mapper_constructed (GObject *object)
{ {
MetaInputMapper *mapper = META_INPUT_MAPPER (object); MetaInputMapper *mapper = META_INPUT_MAPPER (object);
MetaBackend *backend;
G_OBJECT_CLASS (meta_input_mapper_parent_class)->constructed (object); G_OBJECT_CLASS (meta_input_mapper_parent_class)->constructed (object);
@ -714,8 +764,7 @@ meta_input_mapper_constructed (GObject *object)
g_signal_connect (mapper->seat, "device-removed", g_signal_connect (mapper->seat, "device-removed",
G_CALLBACK (input_mapper_device_removed_cb), mapper); G_CALLBACK (input_mapper_device_removed_cb), mapper);
backend = meta_get_backend (); mapper->monitor_manager = meta_backend_get_monitor_manager (mapper->backend);
mapper->monitor_manager = meta_backend_get_monitor_manager (backend);
g_signal_connect (mapper->monitor_manager, "monitors-changed-internal", g_signal_connect (mapper->monitor_manager, "monitors-changed-internal",
G_CALLBACK (input_mapper_monitors_changed_cb), mapper); G_CALLBACK (input_mapper_monitors_changed_cb), mapper);
g_signal_connect (mapper->monitor_manager, "power-save-mode-changed", g_signal_connect (mapper->monitor_manager, "power-save-mode-changed",
@ -732,6 +781,18 @@ meta_input_mapper_class_init (MetaInputMapperClass *klass)
object_class->constructed = meta_input_mapper_constructed; object_class->constructed = meta_input_mapper_constructed;
object_class->finalize = meta_input_mapper_finalize; object_class->finalize = meta_input_mapper_finalize;
object_class->set_property = meta_input_mapper_set_property;
object_class->get_property = meta_input_mapper_get_property;
obj_props[PROP_BACKEND] =
g_param_spec_object ("backend",
"backend",
"MetaBackend",
META_TYPE_BACKEND,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, N_PROPS, obj_props);
signals[DEVICE_MAPPED] = signals[DEVICE_MAPPED] =
g_signal_new ("device-mapped", g_signal_new ("device-mapped",
@ -882,9 +943,11 @@ meta_input_mapping_init_iface (MetaDBusInputMappingIface *iface)
MetaInputMapper * MetaInputMapper *
meta_input_mapper_new (void) meta_input_mapper_new (MetaBackend *backend)
{ {
return g_object_new (META_TYPE_INPUT_MAPPER, NULL); return g_object_new (META_TYPE_INPUT_MAPPER,
"backend", backend,
NULL);
} }
void void

View File

@ -182,4 +182,6 @@ void meta_input_settings_notify_kbd_a11y_change (MetaInputSettings *input_se
MetaKeyboardA11yFlags new_flags, MetaKeyboardA11yFlags new_flags,
MetaKeyboardA11yFlags what_changed); MetaKeyboardA11yFlags what_changed);
MetaBackend * meta_input_settings_get_backend (MetaInputSettings *input_settings);
#endif /* META_INPUT_SETTINGS_PRIVATE_H */ #endif /* META_INPUT_SETTINGS_PRIVATE_H */

View File

@ -39,6 +39,17 @@
#include "core/display-private.h" #include "core/display-private.h"
#include "meta/util.h" #include "meta/util.h"
enum
{
PROP_0,
PROP_BACKEND,
N_PROPS
};
static GParamSpec *props[N_PROPS] = { 0 };
static GQuark quark_tool_settings = 0; static GQuark quark_tool_settings = 0;
typedef struct _MetaInputSettingsPrivate MetaInputSettingsPrivate; typedef struct _MetaInputSettingsPrivate MetaInputSettingsPrivate;
@ -66,6 +77,8 @@ struct _DeviceMappingInfo
struct _MetaInputSettingsPrivate struct _MetaInputSettingsPrivate
{ {
MetaBackend *backend;
ClutterSeat *seat; ClutterSeat *seat;
gulong monitors_changed_id; gulong monitors_changed_id;
@ -1711,6 +1724,26 @@ meta_input_settings_constructed (GObject *object)
load_keyboard_a11y_settings (input_settings); load_keyboard_a11y_settings (input_settings);
} }
static void
meta_input_settings_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
MetaInputSettings *settings = META_INPUT_SETTINGS (object);
MetaInputSettingsPrivate *priv =
meta_input_settings_get_instance_private (settings);
switch (prop_id)
{
case PROP_BACKEND:
priv->backend = g_value_get_object (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
static void static void
meta_input_settings_class_init (MetaInputSettingsClass *klass) meta_input_settings_class_init (MetaInputSettingsClass *klass)
{ {
@ -1718,6 +1751,17 @@ meta_input_settings_class_init (MetaInputSettingsClass *klass)
object_class->dispose = meta_input_settings_dispose; object_class->dispose = meta_input_settings_dispose;
object_class->constructed = meta_input_settings_constructed; object_class->constructed = meta_input_settings_constructed;
object_class->set_property = meta_input_settings_set_property;
props[PROP_BACKEND] =
g_param_spec_object ("backend",
"backend",
"MetaBackend",
META_TYPE_BACKEND,
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, N_PROPS, props);
quark_tool_settings = quark_tool_settings =
g_quark_from_static_string ("meta-input-settings-tool-settings"); g_quark_from_static_string ("meta-input-settings-tool-settings");
@ -1864,3 +1908,12 @@ meta_input_settings_get_kbd_a11y_settings (MetaInputSettings *input_settings,
*a11y_settings = priv->kbd_a11y_settings; *a11y_settings = priv->kbd_a11y_settings;
} }
MetaBackend *
meta_input_settings_get_backend (MetaInputSettings *settings)
{
MetaInputSettingsPrivate *priv =
meta_input_settings_get_instance_private (settings);
return priv->backend;
}

View File

@ -209,6 +209,7 @@ append_monitor (MetaMonitorManager *manager,
crtc = g_object_new (META_TYPE_CRTC_DUMMY, crtc = g_object_new (META_TYPE_CRTC_DUMMY,
"id", (uint64_t) g_list_length (*crtcs) + 1, "id", (uint64_t) g_list_length (*crtcs) + 1,
"backend", meta_gpu_get_backend (gpu),
"gpu", gpu, "gpu", gpu,
NULL); NULL);
*crtcs = g_list_append (*crtcs, crtc); *crtcs = g_list_append (*crtcs, crtc);
@ -295,6 +296,7 @@ append_tiled_monitor (MetaMonitorManager *manager,
crtc = g_object_new (META_TYPE_CRTC_DUMMY, crtc = g_object_new (META_TYPE_CRTC_DUMMY,
"id", (uint64_t) g_list_length (*crtcs) + i + 1, "id", (uint64_t) g_list_length (*crtcs) + i + 1,
"backend", meta_gpu_get_backend (gpu),
"gpu", gpu, "gpu", gpu,
NULL); NULL);
new_crtcs = g_list_append (new_crtcs, crtc); new_crtcs = g_list_append (new_crtcs, crtc);
@ -674,9 +676,9 @@ meta_monitor_manager_dummy_calculate_supported_scales (MetaMonitorManager
} }
static gboolean static gboolean
is_monitor_framebuffers_scaled (void) is_monitor_framebuffers_scaled (MetaMonitorManager *manager)
{ {
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = meta_monitor_manager_get_backend (manager);
MetaSettings *settings = meta_backend_get_settings (backend); MetaSettings *settings = meta_backend_get_settings (backend);
return meta_settings_is_experimental_feature_enabled ( return meta_settings_is_experimental_feature_enabled (
@ -687,7 +689,7 @@ is_monitor_framebuffers_scaled (void)
static MetaMonitorManagerCapability static MetaMonitorManagerCapability
meta_monitor_manager_dummy_get_capabilities (MetaMonitorManager *manager) meta_monitor_manager_dummy_get_capabilities (MetaMonitorManager *manager)
{ {
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = meta_monitor_manager_get_backend (manager);
MetaSettings *settings = meta_backend_get_settings (backend); MetaSettings *settings = meta_backend_get_settings (backend);
MetaMonitorManagerCapability capabilities = MetaMonitorManagerCapability capabilities =
META_MONITOR_MANAGER_CAPABILITY_NONE; META_MONITOR_MANAGER_CAPABILITY_NONE;
@ -711,7 +713,7 @@ meta_monitor_manager_dummy_get_max_screen_size (MetaMonitorManager *manager,
static MetaLogicalMonitorLayoutMode static MetaLogicalMonitorLayoutMode
meta_monitor_manager_dummy_get_default_layout_mode (MetaMonitorManager *manager) meta_monitor_manager_dummy_get_default_layout_mode (MetaMonitorManager *manager)
{ {
if (is_monitor_framebuffers_scaled ()) if (is_monitor_framebuffers_scaled (manager))
return META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL; return META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL;
else else
return META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL; return META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL;

View File

@ -1879,7 +1879,7 @@ meta_monitor_calculate_mode_scale (MetaMonitor *monitor,
MetaMonitorMode *monitor_mode, MetaMonitorMode *monitor_mode,
MetaMonitorScalesConstraint constraints) MetaMonitorScalesConstraint constraints)
{ {
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = meta_monitor_get_backend (monitor);
MetaSettings *settings = meta_backend_get_settings (backend); MetaSettings *settings = meta_backend_get_settings (backend);
int global_scaling_factor; int global_scaling_factor;

View File

@ -124,6 +124,16 @@ G_DEFINE_TYPE (MetaRemoteDesktopSessionHandle,
static MetaRemoteDesktopSessionHandle * static MetaRemoteDesktopSessionHandle *
meta_remote_desktop_session_handle_new (MetaRemoteDesktopSession *session); meta_remote_desktop_session_handle_new (MetaRemoteDesktopSession *session);
static MetaDisplay *
display_from_session (MetaRemoteDesktopSession *session)
{
MetaRemoteDesktop *remote_desktop = session->remote_desktop;
MetaBackend *backend = meta_remote_desktop_get_backend (remote_desktop);
MetaContext *context = meta_backend_get_context (backend);
return meta_context_get_display (context);
}
static gboolean static gboolean
meta_remote_desktop_session_is_running (MetaRemoteDesktopSession *session) meta_remote_desktop_session_is_running (MetaRemoteDesktopSession *session)
{ {
@ -133,7 +143,8 @@ meta_remote_desktop_session_is_running (MetaRemoteDesktopSession *session)
static void static void
init_remote_access_handle (MetaRemoteDesktopSession *session) init_remote_access_handle (MetaRemoteDesktopSession *session)
{ {
MetaBackend *backend = meta_get_backend (); MetaRemoteDesktop *remote_desktop = session->remote_desktop;
MetaBackend *backend = meta_remote_desktop_get_backend (remote_desktop);
MetaRemoteAccessController *remote_access_controller; MetaRemoteAccessController *remote_access_controller;
MetaRemoteAccessHandle *remote_access_handle; MetaRemoteAccessHandle *remote_access_handle;
@ -1076,7 +1087,7 @@ handle_enable_clipboard (MetaDBusRemoteDesktopSession *skeleton,
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton); MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
GVariant *mime_types_variant; GVariant *mime_types_variant;
g_autoptr (GError) error = NULL; g_autoptr (GError) error = NULL;
MetaDisplay *display = meta_get_display (); MetaDisplay *display = display_from_session (session);
MetaSelection *selection = meta_display_get_selection (display); MetaSelection *selection = meta_display_get_selection (display);
g_autoptr (MetaSelectionSourceRemote) source_remote = NULL; g_autoptr (MetaSelectionSourceRemote) source_remote = NULL;
@ -1188,7 +1199,7 @@ transfer_request_cleanup_timout (gpointer user_data)
static void static void
reset_current_selection_source (MetaRemoteDesktopSession *session) reset_current_selection_source (MetaRemoteDesktopSession *session)
{ {
MetaDisplay *display = meta_get_display (); MetaDisplay *display = display_from_session (session);
MetaSelection *selection = meta_display_get_selection (display); MetaSelection *selection = meta_display_get_selection (display);
if (!session->current_source) if (!session->current_source)
@ -1218,7 +1229,7 @@ handle_disable_clipboard (MetaDBusRemoteDesktopSession *skeleton,
GDBusMethodInvocation *invocation) GDBusMethodInvocation *invocation)
{ {
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton); MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
MetaDisplay *display = meta_get_display (); MetaDisplay *display = display_from_session (session);
MetaSelection *selection = meta_display_get_selection (display); MetaSelection *selection = meta_display_get_selection (display);
meta_topic (META_DEBUG_REMOTE_DESKTOP, meta_topic (META_DEBUG_REMOTE_DESKTOP,
@ -1273,7 +1284,7 @@ handle_set_selection (MetaDBusRemoteDesktopSession *skeleton,
if (mime_types_variant) if (mime_types_variant)
{ {
g_autoptr (MetaSelectionSourceRemote) source_remote = NULL; g_autoptr (MetaSelectionSourceRemote) source_remote = NULL;
MetaDisplay *display = meta_get_display (); MetaDisplay *display = display_from_session (session);
source_remote = create_remote_desktop_source (session, source_remote = create_remote_desktop_source (session,
mime_types_variant, mime_types_variant,
@ -1545,7 +1556,7 @@ handle_selection_read (MetaDBusRemoteDesktopSession *skeleton,
const char *mime_type) const char *mime_type)
{ {
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton); MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
MetaDisplay *display = meta_get_display (); MetaDisplay *display = display_from_session (session);
MetaSelection *selection = meta_display_get_selection (display); MetaSelection *selection = meta_display_get_selection (display);
MetaSelectionSource *source; MetaSelectionSource *source;
g_autoptr (GError) error = NULL; g_autoptr (GError) error = NULL;
@ -1680,7 +1691,7 @@ static void
meta_remote_desktop_session_finalize (GObject *object) meta_remote_desktop_session_finalize (GObject *object)
{ {
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (object); MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (object);
MetaDisplay *display = meta_get_display (); MetaDisplay *display = display_from_session (session);
MetaSelection *selection = meta_display_get_selection (display); MetaSelection *selection = meta_display_get_selection (display);
g_assert (!meta_remote_desktop_session_is_running (session)); g_assert (!meta_remote_desktop_session_is_running (session));

View File

@ -138,7 +138,7 @@ static void
meta_renderer_real_rebuild_views (MetaRenderer *renderer) meta_renderer_real_rebuild_views (MetaRenderer *renderer)
{ {
MetaRendererPrivate *priv = meta_renderer_get_instance_private (renderer); MetaRendererPrivate *priv = meta_renderer_get_instance_private (renderer);
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = priv->backend;
MetaMonitorManager *monitor_manager = MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend); meta_backend_get_monitor_manager (backend);
GList *logical_monitors, *l; GList *logical_monitors, *l;

View File

@ -86,7 +86,8 @@ meta_screen_cast_session_handle_new (MetaScreenCastSession *session);
static void static void
init_remote_access_handle (MetaScreenCastSession *session) init_remote_access_handle (MetaScreenCastSession *session)
{ {
MetaBackend *backend = meta_get_backend (); MetaBackend *backend =
meta_screen_cast_get_backend (session->screen_cast);
MetaRemoteAccessController *remote_access_controller; MetaRemoteAccessController *remote_access_controller;
MetaRemoteAccessHandle *remote_access_handle; MetaRemoteAccessHandle *remote_access_handle;
@ -323,7 +324,8 @@ handle_record_monitor (MetaDBusScreenCastSession *skeleton,
MetaScreenCastSession *session = META_SCREEN_CAST_SESSION (skeleton); MetaScreenCastSession *session = META_SCREEN_CAST_SESSION (skeleton);
GDBusInterfaceSkeleton *interface_skeleton; GDBusInterfaceSkeleton *interface_skeleton;
GDBusConnection *connection; GDBusConnection *connection;
MetaBackend *backend = meta_get_backend (); MetaBackend *backend =
meta_screen_cast_get_backend (session->screen_cast);
MetaMonitorManager *monitor_manager = MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend); meta_backend_get_monitor_manager (backend);
MetaMonitor *monitor; MetaMonitor *monitor;
@ -422,6 +424,10 @@ handle_record_window (MetaDBusScreenCastSession *skeleton,
GVariant *properties_variant) GVariant *properties_variant)
{ {
MetaScreenCastSession *session = META_SCREEN_CAST_SESSION (skeleton); MetaScreenCastSession *session = META_SCREEN_CAST_SESSION (skeleton);
MetaBackend *backend =
meta_screen_cast_get_backend (session->screen_cast);
MetaContext *context = meta_backend_get_context (backend);
MetaDisplay *display = meta_context_get_display (context);
GDBusInterfaceSkeleton *interface_skeleton; GDBusInterfaceSkeleton *interface_skeleton;
GDBusConnection *connection; GDBusConnection *connection;
MetaWindow *window; MetaWindow *window;
@ -429,7 +435,6 @@ handle_record_window (MetaDBusScreenCastSession *skeleton,
gboolean is_recording; gboolean is_recording;
MetaScreenCastFlag flags; MetaScreenCastFlag flags;
GError *error = NULL; GError *error = NULL;
MetaDisplay *display;
GVariant *window_id_variant = NULL; GVariant *window_id_variant = NULL;
MetaScreenCastWindowStream *window_stream; MetaScreenCastWindowStream *window_stream;
MetaScreenCastStream *stream; MetaScreenCastStream *stream;
@ -448,7 +453,6 @@ handle_record_window (MetaDBusScreenCastSession *skeleton,
"window-id", "window-id",
G_VARIANT_TYPE ("t")); G_VARIANT_TYPE ("t"));
display = meta_get_display ();
if (window_id_variant) if (window_id_variant)
{ {
uint64_t window_id; uint64_t window_id;

View File

@ -789,12 +789,14 @@ meta_backend_native_initable_init (GInitable *initable,
break; break;
} }
native->launcher = meta_launcher_new (session_id, seat_id, error); native->launcher = meta_launcher_new (backend,
session_id, seat_id,
error);
if (!native->launcher) if (!native->launcher)
return FALSE; return FALSE;
} }
native->device_pool = meta_device_pool_new (native->launcher); native->device_pool = meta_device_pool_new (native);
native->udev = meta_udev_new (native); native->udev = meta_udev_new (native);
kms_flags = META_KMS_FLAG_NONE; kms_flags = META_KMS_FLAG_NONE;

View File

@ -525,6 +525,7 @@ meta_crtc_kms_new (MetaGpuKms *gpu_kms,
kms_crtc); kms_crtc);
crtc_kms = g_object_new (META_TYPE_CRTC_KMS, crtc_kms = g_object_new (META_TYPE_CRTC_KMS,
"id", (uint64_t) meta_kms_crtc_get_id (kms_crtc), "id", (uint64_t) meta_kms_crtc_get_id (kms_crtc),
"backend", meta_gpu_get_backend (gpu),
"gpu", gpu, "gpu", gpu,
NULL); NULL);

View File

@ -31,9 +31,11 @@ struct _MetaCrtcVirtual
G_DEFINE_TYPE (MetaCrtcVirtual, meta_crtc_virtual, META_TYPE_CRTC_NATIVE) G_DEFINE_TYPE (MetaCrtcVirtual, meta_crtc_virtual, META_TYPE_CRTC_NATIVE)
MetaCrtcVirtual * MetaCrtcVirtual *
meta_crtc_virtual_new (uint64_t id) meta_crtc_virtual_new (MetaBackend *backend,
uint64_t id)
{ {
return g_object_new (META_TYPE_CRTC_VIRTUAL, return g_object_new (META_TYPE_CRTC_VIRTUAL,
"backend", backend,
"id", META_CRTC_VIRTUAL_ID_BIT | id, "id", META_CRTC_VIRTUAL_ID_BIT | id,
NULL); NULL);
} }

View File

@ -27,6 +27,7 @@ G_DECLARE_FINAL_TYPE (MetaCrtcVirtual, meta_crtc_virtual,
META, CRTC_VIRTUAL, META, CRTC_VIRTUAL,
MetaCrtcNative) MetaCrtcNative)
MetaCrtcVirtual * meta_crtc_virtual_new (uint64_t id); MetaCrtcVirtual * meta_crtc_virtual_new (MetaBackend *backend,
uint64_t id);
#endif /* META_CRTC_VIRTUAL_H */ #endif /* META_CRTC_VIRTUAL_H */

View File

@ -22,6 +22,7 @@
#include <glib-object.h> #include <glib-object.h>
#include "backends/native/meta-backend-native-types.h"
#include "backends/native/meta-device-pool.h" #include "backends/native/meta-device-pool.h"
#include "backends/native/meta-launcher.h" #include "backends/native/meta-launcher.h"
@ -30,6 +31,6 @@ G_DECLARE_FINAL_TYPE (MetaDevicePool, meta_device_pool,
META, DEVICE_POOL, META, DEVICE_POOL,
GObject) GObject)
MetaDevicePool * meta_device_pool_new (MetaLauncher *launcher); MetaDevicePool * meta_device_pool_new (MetaBackendNative *backend_native);
#endif /* META_DEVICE_POOL_PRIVATE_H */ #endif /* META_DEVICE_POOL_PRIVATE_H */

View File

@ -27,7 +27,9 @@
#include <sys/sysmacros.h> #include <sys/sysmacros.h>
#include <sys/types.h> #include <sys/types.h>
#include "backends/native/meta-backend-native.h"
#include "backends/native/meta-launcher.h" #include "backends/native/meta-launcher.h"
#include "meta/meta-backend.h"
#include "meta/util.h" #include "meta/util.h"
#include "meta-dbus-login1.h" #include "meta-dbus-login1.h"
@ -50,6 +52,8 @@ struct _MetaDevicePool
{ {
GObject parent; GObject parent;
MetaBackend *backend;
MetaDbusLogin1Session *session_proxy; MetaDbusLogin1Session *session_proxy;
GMutex mutex; GMutex mutex;
@ -351,12 +355,16 @@ release_device_file (MetaDevicePool *pool,
} }
MetaDevicePool * MetaDevicePool *
meta_device_pool_new (MetaLauncher *launcher) meta_device_pool_new (MetaBackendNative *backend_native)
{ {
MetaDevicePool *pool; MetaDevicePool *pool;
MetaLauncher *launcher;
pool = g_object_new (META_TYPE_DEVICE_POOL, NULL); pool = g_object_new (META_TYPE_DEVICE_POOL, NULL);
pool->backend = META_BACKEND (backend_native);
launcher = meta_backend_native_get_launcher (backend_native);
if (launcher) if (launcher)
pool->session_proxy = meta_launcher_get_session_proxy (launcher); pool->session_proxy = meta_launcher_get_session_proxy (launcher);
@ -387,3 +395,9 @@ meta_device_pool_class_init (MetaDevicePoolClass *klass)
object_class->finalize = meta_device_pool_finalize; object_class->finalize = meta_device_pool_finalize;
} }
MetaBackend *
meta_device_pool_get_backend (MetaDevicePool *pool)
{
return pool->backend;
}

View File

@ -68,6 +68,8 @@ MetaDeviceFile * meta_device_pool_open (MetaDevicePool *pool,
MetaDeviceFileFlags flags, MetaDeviceFileFlags flags,
GError **error); GError **error);
MetaBackend * meta_device_pool_get_backend (MetaDevicePool *pool);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MetaDeviceFile, meta_device_file_release) G_DEFINE_AUTOPTR_CLEANUP_FUNC (MetaDeviceFile, meta_device_file_release)
#endif /* META_DEVICE_FILE_POOL_H */ #endif /* META_DEVICE_FILE_POOL_H */

View File

@ -33,6 +33,7 @@
#include "backends/meta-backend-private.h" #include "backends/meta-backend-private.h"
#include "backends/native/meta-cogl-utils.h" #include "backends/native/meta-cogl-utils.h"
#include "backends/native/meta-device-pool.h"
#include "backends/native/meta-drm-buffer-private.h" #include "backends/native/meta-drm-buffer-private.h"
struct _MetaDrmBufferGbm struct _MetaDrmBufferGbm
@ -236,7 +237,9 @@ meta_drm_buffer_gbm_fill_timings (MetaDrmBuffer *buffer,
GError **error) GError **error)
{ {
MetaDrmBufferGbm *buffer_gbm = META_DRM_BUFFER_GBM (buffer); MetaDrmBufferGbm *buffer_gbm = META_DRM_BUFFER_GBM (buffer);
MetaBackend *backend = meta_get_backend (); MetaDeviceFile *device_file = meta_drm_buffer_get_device_file (buffer);
MetaDevicePool *device_pool = meta_device_file_get_pool (device_file);
MetaBackend *backend = meta_device_pool_get_backend (device_pool);
MetaEgl *egl = meta_backend_get_egl (backend); MetaEgl *egl = meta_backend_get_egl (backend);
ClutterBackend *clutter_backend = ClutterBackend *clutter_backend =
meta_backend_get_clutter_backend (backend); meta_backend_get_clutter_backend (backend);
@ -354,7 +357,10 @@ meta_drm_buffer_gbm_blit_to_framebuffer (CoglScanout *scanout,
GError **error) GError **error)
{ {
MetaDrmBufferGbm *buffer_gbm = META_DRM_BUFFER_GBM (scanout); MetaDrmBufferGbm *buffer_gbm = META_DRM_BUFFER_GBM (scanout);
MetaBackend *backend = meta_get_backend (); MetaDrmBuffer *buffer = META_DRM_BUFFER (buffer_gbm);
MetaDeviceFile *device_file = meta_drm_buffer_get_device_file (buffer);
MetaDevicePool *device_pool = meta_device_file_get_pool (device_file);
MetaBackend *backend = meta_device_pool_get_backend (device_pool);
MetaEgl *egl = meta_backend_get_egl (backend); MetaEgl *egl = meta_backend_get_egl (backend);
ClutterBackend *clutter_backend = ClutterBackend *clutter_backend =
meta_backend_get_clutter_backend (backend); meta_backend_get_clutter_backend (backend);

View File

@ -1461,6 +1461,7 @@ meta_input_device_native_new_in_impl (MetaSeatImpl *seat_impl,
} }
device = g_object_new (META_TYPE_INPUT_DEVICE_NATIVE, device = g_object_new (META_TYPE_INPUT_DEVICE_NATIVE,
"backend", meta_seat_impl_get_backend (seat_impl),
"name", libinput_device_get_name (libinput_device), "name", libinput_device_get_name (libinput_device),
"device-type", type, "device-type", type,
"capabilities", capabilities, "capabilities", capabilities,
@ -1532,6 +1533,7 @@ meta_input_device_native_new_virtual (MetaSeatImpl *seat_impl,
}; };
device = g_object_new (META_TYPE_INPUT_DEVICE_NATIVE, device = g_object_new (META_TYPE_INPUT_DEVICE_NATIVE,
"backend", meta_seat_impl_get_backend (seat_impl),
"name", name, "name", name,
"device-type", type, "device-type", type,
"device-mode", mode, "device-mode", mode,

View File

@ -831,6 +831,7 @@ MetaInputSettings *
meta_input_settings_native_new_in_impl (MetaSeatImpl *seat_impl) meta_input_settings_native_new_in_impl (MetaSeatImpl *seat_impl)
{ {
return g_object_new (META_TYPE_INPUT_SETTINGS_NATIVE, return g_object_new (META_TYPE_INPUT_SETTINGS_NATIVE,
"backend", meta_seat_impl_get_backend (seat_impl),
"seat-impl", seat_impl, "seat-impl", seat_impl,
NULL); NULL);
} }

View File

@ -46,6 +46,8 @@
struct _MetaLauncher struct _MetaLauncher
{ {
MetaBackend *backend;
MetaDbusLogin1Session *session_proxy; MetaDbusLogin1Session *session_proxy;
MetaDbusLogin1Seat *seat_proxy; MetaDbusLogin1Seat *seat_proxy;
char *seat_id; char *seat_id;
@ -309,7 +311,7 @@ get_seat_proxy (gchar *seat_id,
static void static void
sync_active (MetaLauncher *self) sync_active (MetaLauncher *self)
{ {
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = self->backend;
MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend); MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
MetaDbusLogin1Session *session_proxy = self->session_proxy; MetaDbusLogin1Session *session_proxy = self->session_proxy;
gboolean active; gboolean active;
@ -371,9 +373,10 @@ meta_launcher_get_session_proxy (MetaLauncher *launcher)
} }
MetaLauncher * MetaLauncher *
meta_launcher_new (const char *fallback_session_id, meta_launcher_new (MetaBackend *backend,
const char *fallback_seat_id, const char *fallback_session_id,
GError **error) const char *fallback_seat_id,
GError **error)
{ {
MetaLauncher *self = NULL; MetaLauncher *self = NULL;
g_autoptr (MetaDbusLogin1Session) session_proxy = NULL; g_autoptr (MetaDbusLogin1Session) session_proxy = NULL;
@ -420,6 +423,7 @@ meta_launcher_new (const char *fallback_session_id,
goto fail; goto fail;
self = g_new0 (MetaLauncher, 1); self = g_new0 (MetaLauncher, 1);
self->backend = backend;
self->session_proxy = g_object_ref (session_proxy); self->session_proxy = g_object_ref (session_proxy);
self->seat_proxy = g_object_ref (seat_proxy); self->seat_proxy = g_object_ref (seat_proxy);
self->seat_id = g_steal_pointer (&seat_id); self->seat_id = g_steal_pointer (&seat_id);
@ -455,3 +459,9 @@ meta_launcher_activate_vt (MetaLauncher *launcher,
return meta_dbus_login1_seat_call_switch_to_sync (launcher->seat_proxy, vt, return meta_dbus_login1_seat_call_switch_to_sync (launcher->seat_proxy, vt,
NULL, error); NULL, error);
} }
MetaBackend *
meta_launcher_get_backend (MetaLauncher *launcher)
{
return launcher->backend;
}

View File

@ -22,10 +22,13 @@
#include <glib-object.h> #include <glib-object.h>
#include "backends/meta-backend-types.h"
typedef struct _MetaLauncher MetaLauncher; typedef struct _MetaLauncher MetaLauncher;
typedef struct _MetaDbusLogin1Session MetaDbusLogin1Session; typedef struct _MetaDbusLogin1Session MetaDbusLogin1Session;
MetaLauncher *meta_launcher_new (const char *session_id, MetaLauncher *meta_launcher_new (MetaBackend *backend,
const char *session_id,
const char *custom_seat_id, const char *custom_seat_id,
GError **error); GError **error);
void meta_launcher_free (MetaLauncher *self); void meta_launcher_free (MetaLauncher *self);
@ -38,5 +41,7 @@ const char * meta_launcher_get_seat_id (MetaLauncher *launcher)
MetaDbusLogin1Session * meta_launcher_get_session_proxy (MetaLauncher *launcher); MetaDbusLogin1Session * meta_launcher_get_session_proxy (MetaLauncher *launcher);
MetaBackend * meta_launcher_get_backend (MetaLauncher *launcher);
#endif /* META_LAUNCHER_H */ #endif /* META_LAUNCHER_H */

View File

@ -310,7 +310,7 @@ meta_monitor_manager_native_apply_monitors_config (MetaMonitorManager *ma
{ {
if (!manager->in_init) if (!manager->in_init)
{ {
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = meta_monitor_manager_get_backend (manager);
MetaRenderer *renderer = meta_backend_get_renderer (backend); MetaRenderer *renderer = meta_backend_get_renderer (backend);
meta_renderer_native_reset_modes (META_RENDERER_NATIVE (renderer)); meta_renderer_native_reset_modes (META_RENDERER_NATIVE (renderer));
@ -628,13 +628,14 @@ meta_monitor_manager_native_create_virtual_monitor (MetaMonitorManager
const MetaVirtualMonitorInfo *info, const MetaVirtualMonitorInfo *info,
GError **error) GError **error)
{ {
MetaBackend *backend = meta_monitor_manager_get_backend (manager);
MetaMonitorManagerNative *manager_native = MetaMonitorManagerNative *manager_native =
META_MONITOR_MANAGER_NATIVE (manager); META_MONITOR_MANAGER_NATIVE (manager);
MetaVirtualMonitorNative *virtual_monitor_native; MetaVirtualMonitorNative *virtual_monitor_native;
uint64_t id; uint64_t id;
id = allocate_virtual_monitor_id (manager_native); id = allocate_virtual_monitor_id (manager_native);
virtual_monitor_native = meta_virtual_monitor_native_new (id, info); virtual_monitor_native = meta_virtual_monitor_native_new (backend, id, info);
g_signal_connect (virtual_monitor_native, "notify::crtc-mode", g_signal_connect (virtual_monitor_native, "notify::crtc-mode",
G_CALLBACK (on_virtual_monitor_mode_changed), G_CALLBACK (on_virtual_monitor_mode_changed),
manager); manager);

View File

@ -415,7 +415,8 @@ meta_renderer_native_choose_egl_config (CoglDisplay *cogl_display,
{ {
CoglRenderer *cogl_renderer = cogl_display->renderer; CoglRenderer *cogl_renderer = cogl_display->renderer;
CoglRendererEGL *cogl_renderer_egl = cogl_renderer->winsys; CoglRendererEGL *cogl_renderer_egl = cogl_renderer->winsys;
MetaBackend *backend = meta_get_backend (); MetaRenderer *renderer = cogl_renderer->custom_winsys_user_data;
MetaBackend *backend = meta_renderer_get_backend (renderer);
MetaEgl *egl = meta_backend_get_egl (backend); MetaEgl *egl = meta_backend_get_egl (backend);
MetaRendererNativeGpuData *renderer_gpu_data = cogl_renderer_egl->platform; MetaRendererNativeGpuData *renderer_gpu_data = cogl_renderer_egl->platform;
EGLDisplay egl_display = cogl_renderer_egl->edpy; EGLDisplay egl_display = cogl_renderer_egl->edpy;
@ -486,10 +487,12 @@ meta_renderer_native_destroy_egl_display (CoglDisplay *cogl_display)
} }
static EGLSurface static EGLSurface
create_dummy_pbuffer_surface (EGLDisplay egl_display, create_dummy_pbuffer_surface (CoglRenderer *cogl_renderer,
GError **error) EGLDisplay egl_display,
GError **error)
{ {
MetaBackend *backend = meta_get_backend (); MetaRenderer *renderer = cogl_renderer->custom_winsys_user_data;
MetaBackend *backend = meta_renderer_get_backend (renderer);
MetaEgl *egl = meta_backend_get_egl (backend); MetaEgl *egl = meta_backend_get_egl (backend);
EGLConfig pbuffer_config; EGLConfig pbuffer_config;
static const EGLint pbuffer_config_attribs[] = { static const EGLint pbuffer_config_attribs[] = {
@ -528,7 +531,9 @@ meta_renderer_native_egl_context_created (CoglDisplay *cogl_display,
COGL_EGL_WINSYS_FEATURE_SURFACELESS_CONTEXT) == 0) COGL_EGL_WINSYS_FEATURE_SURFACELESS_CONTEXT) == 0)
{ {
cogl_display_egl->dummy_surface = cogl_display_egl->dummy_surface =
create_dummy_pbuffer_surface (cogl_renderer_egl->edpy, error); create_dummy_pbuffer_surface (cogl_renderer,
cogl_renderer_egl->edpy,
error);
if (cogl_display_egl->dummy_surface == EGL_NO_SURFACE) if (cogl_display_egl->dummy_surface == EGL_NO_SURFACE)
return FALSE; return FALSE;
} }

View File

@ -3747,3 +3747,9 @@ meta_seat_impl_get_input_settings (MetaSeatImpl *seat_impl)
{ {
return seat_impl->input_settings; return seat_impl->input_settings;
} }
MetaBackend *
meta_seat_impl_get_backend (MetaSeatImpl *seat_impl)
{
return meta_seat_native_get_backend (seat_impl->seat_native);
}

View File

@ -252,4 +252,6 @@ void meta_seat_impl_queue_main_thread_idle (MetaSeatImpl *seat_impl,
gpointer user_data, gpointer user_data,
GDestroyNotify destroy_notify); GDestroyNotify destroy_notify);
MetaBackend * meta_seat_impl_get_backend (MetaSeatImpl *seat_impl);
#endif /* META_SEAT_IMPL_H */ #endif /* META_SEAT_IMPL_H */

View File

@ -261,7 +261,9 @@ meta_seat_native_peek_devices (ClutterSeat *seat)
static void static void
meta_seat_native_bell_notify (ClutterSeat *seat) meta_seat_native_bell_notify (ClutterSeat *seat)
{ {
MetaDisplay *display = meta_get_display (); MetaSeatNative *seat_native = META_SEAT_NATIVE (seat);
MetaContext *context = meta_backend_get_context (seat_native->backend);
MetaDisplay *display = meta_context_get_display (context);
meta_bell_notify (display, NULL); meta_bell_notify (display, NULL);
} }
@ -595,7 +597,7 @@ meta_seat_native_maybe_ensure_cursor_renderer (MetaSeatNative *seat_native,
MetaCursorRendererNative *cursor_renderer_native; MetaCursorRendererNative *cursor_renderer_native;
cursor_renderer_native = cursor_renderer_native =
meta_cursor_renderer_native_new (meta_get_backend (), meta_cursor_renderer_native_new (seat_native->backend,
seat_native->core_pointer); seat_native->core_pointer);
seat_native->cursor_renderer = seat_native->cursor_renderer =
META_CURSOR_RENDERER (cursor_renderer_native); META_CURSOR_RENDERER (cursor_renderer_native);
@ -622,7 +624,7 @@ meta_seat_native_maybe_ensure_cursor_renderer (MetaSeatNative *seat_native,
if (!cursor_renderer) if (!cursor_renderer)
{ {
cursor_renderer = meta_cursor_renderer_new (meta_get_backend (), cursor_renderer = meta_cursor_renderer_new (seat_native->backend,
device); device);
g_hash_table_insert (seat_native->tablet_cursors, g_hash_table_insert (seat_native->tablet_cursors,
device, cursor_renderer); device, cursor_renderer);

View File

@ -59,7 +59,8 @@ G_DEFINE_TYPE_WITH_CODE (MetaStageNative, meta_stage_native,
void void
meta_stage_native_rebuild_views (MetaStageNative *stage_native) meta_stage_native_rebuild_views (MetaStageNative *stage_native)
{ {
MetaBackend *backend = meta_get_backend (); MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_native);
MetaBackend *backend = meta_stage_impl_get_backend (stage_impl);
MetaRenderer *renderer = meta_backend_get_renderer (backend); MetaRenderer *renderer = meta_backend_get_renderer (backend);
ClutterActor *stage = meta_backend_get_stage (backend); ClutterActor *stage = meta_backend_get_stage (backend);
@ -77,7 +78,8 @@ static void
meta_stage_native_get_geometry (ClutterStageWindow *stage_window, meta_stage_native_get_geometry (ClutterStageWindow *stage_window,
cairo_rectangle_int_t *geometry) cairo_rectangle_int_t *geometry)
{ {
MetaBackend *backend = meta_get_backend (); MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_window);
MetaBackend *backend = meta_stage_impl_get_backend (stage_impl);
MetaMonitorManager *monitor_manager = MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend); meta_backend_get_monitor_manager (backend);
@ -103,7 +105,8 @@ meta_stage_native_get_geometry (ClutterStageWindow *stage_window,
static GList * static GList *
meta_stage_native_get_views (ClutterStageWindow *stage_window) meta_stage_native_get_views (ClutterStageWindow *stage_window)
{ {
MetaBackend *backend = meta_get_backend (); MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_window);
MetaBackend *backend = meta_stage_impl_get_backend (stage_impl);
MetaRenderer *renderer = meta_backend_get_renderer (backend); MetaRenderer *renderer = meta_backend_get_renderer (backend);
return meta_renderer_get_views (renderer); return meta_renderer_get_views (renderer);
@ -114,7 +117,8 @@ meta_stage_native_prepare_frame (ClutterStageWindow *stage_window,
ClutterStageView *stage_view, ClutterStageView *stage_view,
ClutterFrame *frame) ClutterFrame *frame)
{ {
MetaBackend *backend = meta_get_backend (); MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_window);
MetaBackend *backend = meta_stage_impl_get_backend (stage_impl);
MetaRenderer *renderer = meta_backend_get_renderer (backend); MetaRenderer *renderer = meta_backend_get_renderer (backend);
MetaRendererNative *renderer_native = META_RENDERER_NATIVE (renderer); MetaRendererNative *renderer_native = META_RENDERER_NATIVE (renderer);
MetaCursorRenderer *cursor_renderer = MetaCursorRenderer *cursor_renderer =
@ -152,7 +156,8 @@ meta_stage_native_finish_frame (ClutterStageWindow *stage_window,
ClutterStageView *stage_view, ClutterStageView *stage_view,
ClutterFrame *frame) ClutterFrame *frame)
{ {
MetaBackend *backend = meta_get_backend (); MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_window);
MetaBackend *backend = meta_stage_impl_get_backend (stage_impl);
MetaRenderer *renderer = meta_backend_get_renderer (backend); MetaRenderer *renderer = meta_backend_get_renderer (backend);
meta_renderer_native_finish_frame (META_RENDERER_NATIVE (renderer), meta_renderer_native_finish_frame (META_RENDERER_NATIVE (renderer),

View File

@ -72,7 +72,8 @@ meta_virtual_monitor_native_get_id (MetaVirtualMonitorNative *virtual_monitor_na
} }
MetaVirtualMonitorNative * MetaVirtualMonitorNative *
meta_virtual_monitor_native_new (uint64_t id, meta_virtual_monitor_native_new (MetaBackend *backend,
uint64_t id,
const MetaVirtualMonitorInfo *info) const MetaVirtualMonitorInfo *info)
{ {
MetaVirtualMonitorNative *virtual_monitor_native; MetaVirtualMonitorNative *virtual_monitor_native;
@ -80,7 +81,7 @@ meta_virtual_monitor_native_new (uint64_t id,
MetaCrtcModeVirtual *crtc_mode_virtual; MetaCrtcModeVirtual *crtc_mode_virtual;
MetaOutputVirtual *output_virtual; MetaOutputVirtual *output_virtual;
crtc_virtual = meta_crtc_virtual_new (id); crtc_virtual = meta_crtc_virtual_new (backend, id);
crtc_mode_virtual = meta_crtc_mode_virtual_new (mode_id++, &info->mode_info); crtc_mode_virtual = meta_crtc_mode_virtual_new (mode_id++, &info->mode_info);
output_virtual = meta_output_virtual_new (id, info, output_virtual = meta_output_virtual_new (id, info,
crtc_virtual, crtc_virtual,

View File

@ -39,7 +39,8 @@ MetaCrtc * meta_virtual_monitor_native_get_crtc (MetaVirtualMonitorNative *virtu
MetaOutput * meta_virtual_monitor_native_get_output (MetaVirtualMonitorNative *virtual_monitor_native); MetaOutput * meta_virtual_monitor_native_get_output (MetaVirtualMonitorNative *virtual_monitor_native);
MetaVirtualMonitorNative * meta_virtual_monitor_native_new (uint64_t id, MetaVirtualMonitorNative * meta_virtual_monitor_native_new (MetaBackend *backend,
uint64_t id,
const MetaVirtualMonitorInfo *info); const MetaVirtualMonitorInfo *info);
#endif /* META_VIRTUAL_MONITOR_NATIVE_H */ #endif /* META_VIRTUAL_MONITOR_NATIVE_H */

View File

@ -110,7 +110,9 @@ meta_backend_x11_cm_post_init (MetaBackend *backend)
g_signal_connect_object (seat, "device-added", g_signal_connect_object (seat, "device-added",
G_CALLBACK (on_device_added), backend, 0); G_CALLBACK (on_device_added), backend, 0);
x11_cm->input_settings = g_object_new (META_TYPE_INPUT_SETTINGS_X11, NULL); x11_cm->input_settings = g_object_new (META_TYPE_INPUT_SETTINGS_X11,
"backend", backend,
NULL);
parent_backend_class->post_init (backend); parent_backend_class->post_init (backend);
take_touch_grab (backend); take_touch_grab (backend);

View File

@ -346,6 +346,7 @@ handle_host_xevent (MetaBackend *backend,
{ {
MetaBackendX11 *x11 = META_BACKEND_X11 (backend); MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11); MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
MetaContext *context = meta_backend_get_context (backend);
gboolean bypass_clutter = FALSE; gboolean bypass_clutter = FALSE;
MetaDisplay *display; MetaDisplay *display;
@ -362,7 +363,7 @@ handle_host_xevent (MetaBackend *backend,
XGetEventData (priv->xdisplay, &event->xcookie); XGetEventData (priv->xdisplay, &event->xcookie);
display = meta_get_display (); display = meta_context_get_display (context);
if (display) if (display)
{ {
MetaCompositor *compositor = display->compositor; MetaCompositor *compositor = display->compositor;

View File

@ -245,6 +245,7 @@ meta_crtc_xrandr_new (MetaGpuXrandr *gpu_xrandr,
meta_monitor_transform_from_xrandr_all (xrandr_crtc->rotations); meta_monitor_transform_from_xrandr_all (xrandr_crtc->rotations);
crtc_xrandr = g_object_new (META_TYPE_CRTC_XRANDR, crtc_xrandr = g_object_new (META_TYPE_CRTC_XRANDR,
"id", (uint64_t) crtc_id, "id", (uint64_t) crtc_id,
"backend", backend,
"gpu", gpu, "gpu", gpu,
"all-transforms", all_transforms, "all-transforms", all_transforms,
NULL); NULL);

View File

@ -46,10 +46,10 @@ meta_cursor_renderer_x11_update_cursor (MetaCursorRenderer *renderer,
{ {
MetaCursorRendererX11 *x11 = META_CURSOR_RENDERER_X11 (renderer); MetaCursorRendererX11 *x11 = META_CURSOR_RENDERER_X11 (renderer);
MetaCursorRendererX11Private *priv = meta_cursor_renderer_x11_get_instance_private (x11); MetaCursorRendererX11Private *priv = meta_cursor_renderer_x11_get_instance_private (x11);
MetaBackend *backend = meta_cursor_renderer_get_backend (renderer);
MetaBackendX11 *backend = META_BACKEND_X11 (meta_get_backend ()); MetaBackendX11 *backend_x11 = META_BACKEND_X11 (backend);
Window xwindow = meta_backend_x11_get_xwindow (backend); Window xwindow = meta_backend_x11_get_xwindow (backend_x11);
Display *xdisplay = meta_backend_x11_get_xdisplay (backend); Display *xdisplay = meta_backend_x11_get_xdisplay (backend_x11);
if (xwindow == None) if (xwindow == None)
{ {

View File

@ -49,7 +49,11 @@ gboolean
meta_cursor_tracker_x11_handle_xevent (MetaCursorTrackerX11 *tracker_x11, meta_cursor_tracker_x11_handle_xevent (MetaCursorTrackerX11 *tracker_x11,
XEvent *xevent) XEvent *xevent)
{ {
MetaX11Display *x11_display = meta_get_display ()->x11_display; MetaCursorTracker *tracker = META_CURSOR_TRACKER (tracker_x11);
MetaBackend *backend = meta_cursor_tracker_get_backend (tracker);
MetaContext *context = meta_backend_get_context (backend);
MetaDisplay *display = meta_context_get_display (context);
MetaX11Display *x11_display = meta_display_get_x11_display (display);
XFixesCursorNotifyEvent *notify_event; XFixesCursorNotifyEvent *notify_event;
if (xevent->xany.type != x11_display->xfixes_event_base + XFixesCursorNotify) if (xevent->xany.type != x11_display->xfixes_event_base + XFixesCursorNotify)
@ -76,7 +80,10 @@ update_position (MetaCursorTrackerX11 *tracker_x11)
static gboolean static gboolean
ensure_xfixes_cursor (MetaCursorTrackerX11 *tracker_x11) ensure_xfixes_cursor (MetaCursorTrackerX11 *tracker_x11)
{ {
MetaDisplay *display = meta_get_display (); MetaCursorTracker *tracker = META_CURSOR_TRACKER (tracker_x11);
MetaBackend *backend = meta_cursor_tracker_get_backend (tracker);
MetaContext *context = meta_backend_get_context (backend);
MetaDisplay *display = meta_context_get_display (context);
MetaCursorTracker *cursor_tracker; MetaCursorTracker *cursor_tracker;
g_autoptr (GError) error = NULL; g_autoptr (GError) error = NULL;

View File

@ -36,6 +36,12 @@
#include "core/display-private.h" #include "core/display-private.h"
#include "meta/meta-x11-errors.h" #include "meta/meta-x11-errors.h"
typedef struct
{
MetaInputSettings *settings;
XDevice *xdev;
} DeviceHandle;
G_DEFINE_TYPE (MetaInputSettingsX11, meta_input_settings_x11, G_DEFINE_TYPE (MetaInputSettingsX11, meta_input_settings_x11,
META_TYPE_INPUT_SETTINGS) META_TYPE_INPUT_SETTINGS)
@ -47,24 +53,44 @@ typedef enum
SCROLL_METHOD_NUM_FIELDS SCROLL_METHOD_NUM_FIELDS
} ScrollMethod; } ScrollMethod;
static void static MetaBackend *
device_free_xdevice (gpointer user_data) get_backend (MetaInputSettings *settings)
{ {
MetaDisplay *display = meta_get_display (); return meta_input_settings_get_backend (settings);
MetaBackend *backend = meta_get_backend (); }
static MetaDisplay *
get_display (MetaInputSettings *settings)
{
MetaBackend *backend = get_backend (settings);
MetaContext *context = meta_backend_get_context (backend);
return meta_context_get_display (context);
}
static void
device_handle_free (gpointer user_data)
{
DeviceHandle *handle = user_data;
MetaInputSettings *settings = handle->settings;
MetaDisplay *display = get_display (settings);
MetaBackend *backend = get_backend (settings);
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend)); Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
XDevice *xdev = user_data; XDevice *xdev = user_data;
meta_x11_error_trap_push (display->x11_display); meta_x11_error_trap_push (display->x11_display);
XCloseDevice (xdisplay, xdev); XCloseDevice (xdisplay, xdev);
meta_x11_error_trap_pop (display->x11_display); meta_x11_error_trap_pop (display->x11_display);
g_free (handle);
} }
static XDevice * static XDevice *
device_ensure_xdevice (ClutterInputDevice *device) device_ensure_xdevice (MetaInputSettings *settings,
ClutterInputDevice *device)
{ {
MetaDisplay *display = meta_get_display (); MetaDisplay *display = get_display (settings);
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = get_backend (settings);
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend)); Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
int device_id = meta_input_device_x11_get_device_id (device); int device_id = meta_input_device_x11_get_device_id (device);
XDevice *xdev = NULL; XDevice *xdev = NULL;
@ -79,9 +105,14 @@ device_ensure_xdevice (ClutterInputDevice *device)
if (xdev) if (xdev)
{ {
DeviceHandle *handle;
handle = g_new0 (DeviceHandle, 1);
handle->settings = settings;
handle->xdev = xdev;
g_object_set_data_full (G_OBJECT (device), g_object_set_data_full (G_OBJECT (device),
"meta-input-settings-xdevice", "meta-input-settings-xdevice",
xdev, device_free_xdevice); handle, device_handle_free);
} }
return xdev; return xdev;
@ -94,7 +125,8 @@ get_property (ClutterInputDevice *device,
int format, int format,
gulong nitems) gulong nitems)
{ {
MetaBackend *backend = meta_get_backend (); MetaInputDevice *input_device = META_INPUT_DEVICE (device);
MetaBackend *backend = meta_input_device_get_backend (input_device);
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend)); Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
gulong nitems_ret, bytes_after_ret; gulong nitems_ret, bytes_after_ret;
int rc, device_id, format_ret; int rc, device_id, format_ret;
@ -126,14 +158,15 @@ get_property (ClutterInputDevice *device,
} }
static void static void
change_property (ClutterInputDevice *device, change_property (MetaInputSettings *settings,
ClutterInputDevice *device,
const gchar *property, const gchar *property,
Atom type, Atom type,
int format, int format,
void *data, void *data,
gulong nitems) gulong nitems)
{ {
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = get_backend (settings);
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend)); Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
int device_id; int device_id;
Atom property_atom; Atom property_atom;
@ -183,7 +216,7 @@ meta_input_settings_x11_set_send_events (MetaInputSettings *settings,
g_warning ("Device '%s' does not support sendevents mode %d", g_warning ("Device '%s' does not support sendevents mode %d",
clutter_input_device_get_device_name (device), mode); clutter_input_device_get_device_name (device), mode);
else else
change_property (device, "libinput Send Events Mode Enabled", change_property (settings, device, "libinput Send Events Mode Enabled",
XA_INTEGER, 8, &values, 2); XA_INTEGER, 8, &values, 2);
meta_XFree (available); meta_XFree (available);
@ -194,13 +227,13 @@ meta_input_settings_x11_set_matrix (MetaInputSettings *settings,
ClutterInputDevice *device, ClutterInputDevice *device,
const float matrix[6]) const float matrix[6])
{ {
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = get_backend (settings);
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend)); Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
gfloat full_matrix[9] = { matrix[0], matrix[1], matrix[2], gfloat full_matrix[9] = { matrix[0], matrix[1], matrix[2],
matrix[3], matrix[4], matrix[5], matrix[3], matrix[4], matrix[5],
0, 0, 1 }; 0, 0, 1 };
change_property (device, "Coordinate Transformation Matrix", change_property (settings, device, "Coordinate Transformation Matrix",
XInternAtom (xdisplay, "FLOAT", False), XInternAtom (xdisplay, "FLOAT", False),
32, &full_matrix, 9); 32, &full_matrix, 9);
} }
@ -210,11 +243,11 @@ meta_input_settings_x11_set_speed (MetaInputSettings *settings,
ClutterInputDevice *device, ClutterInputDevice *device,
gdouble speed) gdouble speed)
{ {
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = get_backend (settings);
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend)); Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
gfloat value = speed; gfloat value = speed;
change_property (device, "libinput Accel Speed", change_property (settings, device, "libinput Accel Speed",
XInternAtom (xdisplay, "FLOAT", False), XInternAtom (xdisplay, "FLOAT", False),
32, &value, 1); 32, &value, 1);
} }
@ -234,13 +267,13 @@ meta_input_settings_x11_set_left_handed (MetaInputSettings *settings,
device_type == CLUTTER_ERASER_DEVICE) device_type == CLUTTER_ERASER_DEVICE)
{ {
value = enabled ? 3 : 0; value = enabled ? 3 : 0;
change_property (device, "Wacom Rotation", change_property (settings, device, "Wacom Rotation",
XA_INTEGER, 8, &value, 1); XA_INTEGER, 8, &value, 1);
} }
else else
{ {
value = enabled ? 1 : 0; value = enabled ? 1 : 0;
change_property (device, "libinput Left Handed Enabled", change_property (settings, device, "libinput Left Handed Enabled",
XA_INTEGER, 8, &value, 1); XA_INTEGER, 8, &value, 1);
} }
} }
@ -252,7 +285,7 @@ meta_input_settings_x11_set_disable_while_typing (MetaInputSettings *settings,
{ {
guchar value = (enabled) ? 1 : 0; guchar value = (enabled) ? 1 : 0;
change_property (device, "libinput Disable While Typing Enabled", change_property (settings, device, "libinput Disable While Typing Enabled",
XA_INTEGER, 8, &value, 1); XA_INTEGER, 8, &value, 1);
} }
@ -263,7 +296,7 @@ meta_input_settings_x11_set_tap_enabled (MetaInputSettings *settings,
{ {
guchar value = (enabled) ? 1 : 0; guchar value = (enabled) ? 1 : 0;
change_property (device, "libinput Tapping Enabled", change_property (settings, device, "libinput Tapping Enabled",
XA_INTEGER, 8, &value, 1); XA_INTEGER, 8, &value, 1);
} }
@ -274,7 +307,7 @@ meta_input_settings_x11_set_tap_and_drag_enabled (MetaInputSettings *settings,
{ {
guchar value = (enabled) ? 1 : 0; guchar value = (enabled) ? 1 : 0;
change_property (device, "libinput Tapping Drag Enabled", change_property (settings, device, "libinput Tapping Drag Enabled",
XA_INTEGER, 8, &value, 1); XA_INTEGER, 8, &value, 1);
} }
@ -285,7 +318,7 @@ meta_input_settings_x11_set_tap_and_drag_lock_enabled (MetaInputSettings *setti
{ {
guchar value = (enabled) ? 1 : 0; guchar value = (enabled) ? 1 : 0;
change_property (device, "libinput Tapping Drag Lock Enabled", change_property (settings, device, "libinput Tapping Drag Lock Enabled",
XA_INTEGER, 8, &value, 1); XA_INTEGER, 8, &value, 1);
} }
@ -296,14 +329,15 @@ meta_input_settings_x11_set_invert_scroll (MetaInputSettings *settings,
{ {
guchar value = (inverted) ? 1 : 0; guchar value = (inverted) ? 1 : 0;
change_property (device, "libinput Natural Scrolling Enabled", change_property (settings, device, "libinput Natural Scrolling Enabled",
XA_INTEGER, 8, &value, 1); XA_INTEGER, 8, &value, 1);
} }
static void static void
change_scroll_method (ClutterInputDevice *device, change_scroll_method (MetaInputSettings *settings,
ScrollMethod method, ClutterInputDevice *device,
gboolean enabled) ScrollMethod method,
gboolean enabled)
{ {
guchar values[SCROLL_METHOD_NUM_FIELDS] = { 0 }; /* 2fg, edge, button. The last value is unused */ guchar values[SCROLL_METHOD_NUM_FIELDS] = { 0 }; /* 2fg, edge, button. The last value is unused */
guchar *current = NULL; guchar *current = NULL;
@ -322,7 +356,7 @@ change_scroll_method (ClutterInputDevice *device,
memcpy (values, current, SCROLL_METHOD_NUM_FIELDS); memcpy (values, current, SCROLL_METHOD_NUM_FIELDS);
values[method] = !!enabled; values[method] = !!enabled;
change_property (device, "libinput Scroll Method Enabled", change_property (settings, device, "libinput Scroll Method Enabled",
XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS); XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS);
out: out:
meta_XFree (current); meta_XFree (current);
@ -334,7 +368,8 @@ meta_input_settings_x11_set_edge_scroll (MetaInputSettings *settings,
ClutterInputDevice *device, ClutterInputDevice *device,
gboolean edge_scroll_enabled) gboolean edge_scroll_enabled)
{ {
change_scroll_method (device, SCROLL_METHOD_FIELD_EDGE, edge_scroll_enabled); change_scroll_method (settings, device,
SCROLL_METHOD_FIELD_EDGE, edge_scroll_enabled);
} }
static void static void
@ -342,7 +377,8 @@ meta_input_settings_x11_set_two_finger_scroll (MetaInputSettings *set
ClutterInputDevice *device, ClutterInputDevice *device,
gboolean two_finger_scroll_enabled) gboolean two_finger_scroll_enabled)
{ {
change_scroll_method (device, SCROLL_METHOD_FIELD_2FG, two_finger_scroll_enabled); change_scroll_method (settings, device,
SCROLL_METHOD_FIELD_2FG, two_finger_scroll_enabled);
} }
static gboolean static gboolean
@ -369,10 +405,11 @@ meta_input_settings_x11_set_scroll_button (MetaInputSettings *settings,
{ {
gchar lock = button_lock; gchar lock = button_lock;
change_scroll_method (device, SCROLL_METHOD_FIELD_BUTTON, button != 0); change_scroll_method (settings, device,
change_property (device, "libinput Button Scrolling Button", SCROLL_METHOD_FIELD_BUTTON, button != 0);
change_property (settings, device, "libinput Button Scrolling Button",
XA_CARDINAL, 32, &button, 1); XA_CARDINAL, 32, &button, 1);
change_property (device, "libinput Button Scrolling Button Lock Enabled", change_property (settings, device, "libinput Button Scrolling Button Lock Enabled",
XA_INTEGER, 8, &lock, 1); XA_INTEGER, 8, &lock, 1);
} }
@ -416,7 +453,7 @@ meta_input_settings_x11_set_click_method (MetaInputSettings *settings,
g_warning ("Device '%s' does not support click method %d", g_warning ("Device '%s' does not support click method %d",
clutter_input_device_get_device_name (device), mode); clutter_input_device_get_device_name (device), mode);
else else
change_property (device, "libinput Click Method Enabled", change_property (settings, device, "libinput Click Method Enabled",
XA_INTEGER, 8, &values, 2); XA_INTEGER, 8, &values, 2);
meta_XFree(available); meta_XFree(available);
@ -452,7 +489,7 @@ meta_input_settings_x11_set_tap_button_map (MetaInputSettings *settin
} }
if (values[0] || values[1]) if (values[0] || values[1])
change_property (device, "libinput Tapping Button Mapping Enabled", change_property (settings, device, "libinput Tapping Button Mapping Enabled",
XA_INTEGER, 8, &values, 2); XA_INTEGER, 8, &values, 2);
} }
@ -462,7 +499,7 @@ meta_input_settings_x11_set_keyboard_repeat (MetaInputSettings *settings,
guint delay, guint delay,
guint interval) guint interval)
{ {
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = get_backend (settings);
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend)); Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
if (enabled) if (enabled)
@ -477,8 +514,9 @@ meta_input_settings_x11_set_keyboard_repeat (MetaInputSettings *settings,
} }
static void static void
set_device_accel_profile (ClutterInputDevice *device, set_device_accel_profile (MetaInputSettings *settings,
GDesktopPointerAccelProfile profile) ClutterInputDevice *device,
GDesktopPointerAccelProfile profile)
{ {
guchar *defaults, *available; guchar *defaults, *available;
guchar values[2] = { 0 }; /* adaptive, flat */ guchar values[2] = { 0 }; /* adaptive, flat */
@ -512,7 +550,7 @@ set_device_accel_profile (ClutterInputDevice *device,
break; break;
} }
change_property (device, "libinput Accel Profile Enabled", change_property (settings, device, "libinput Accel Profile Enabled",
XA_INTEGER, 8, &values, 2); XA_INTEGER, 8, &values, 2);
meta_XFree (available); meta_XFree (available);
@ -535,7 +573,7 @@ meta_input_settings_x11_set_mouse_accel_profile (MetaInputSettings *set
CLUTTER_INPUT_CAPABILITY_TRACKPOINT)) != 0) CLUTTER_INPUT_CAPABILITY_TRACKPOINT)) != 0)
return; return;
set_device_accel_profile (device, profile); set_device_accel_profile (settings, device, profile);
} }
static void static void
@ -548,7 +586,7 @@ meta_input_settings_x11_set_trackball_accel_profile (MetaInputSettings
if ((caps & CLUTTER_INPUT_CAPABILITY_TRACKBALL) == 0) if ((caps & CLUTTER_INPUT_CAPABILITY_TRACKBALL) == 0)
return; return;
set_device_accel_profile (device, profile); set_device_accel_profile (settings, device, profile);
} }
static void static void
@ -556,8 +594,8 @@ meta_input_settings_x11_set_tablet_mapping (MetaInputSettings *settings,
ClutterInputDevice *device, ClutterInputDevice *device,
GDesktopTabletMapping mapping) GDesktopTabletMapping mapping)
{ {
MetaDisplay *display = meta_get_display (); MetaDisplay *display = get_display (settings);
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = get_backend (settings);
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend)); Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
XDevice *xdev; XDevice *xdev;
@ -566,7 +604,7 @@ meta_input_settings_x11_set_tablet_mapping (MetaInputSettings *settings,
/* Grab the puke bucket! */ /* Grab the puke bucket! */
meta_x11_error_trap_push (display->x11_display); meta_x11_error_trap_push (display->x11_display);
xdev = device_ensure_xdevice (device); xdev = device_ensure_xdevice (settings, device);
if (xdev) if (xdev)
{ {
XSetDeviceMode (xdisplay, xdev, XSetDeviceMode (xdisplay, xdev,
@ -582,13 +620,14 @@ meta_input_settings_x11_set_tablet_mapping (MetaInputSettings *settings,
} }
static gboolean static gboolean
device_query_area (ClutterInputDevice *device, device_query_area (MetaInputSettings *settings,
ClutterInputDevice *device,
gint *x, gint *x,
gint *y, gint *y,
gint *width, gint *width,
gint *height) gint *height)
{ {
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = get_backend (settings);
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend)); Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
gint device_id, n_devices, i; gint device_id, n_devices, i;
XIDeviceInfo *info; XIDeviceInfo *info;
@ -630,7 +669,7 @@ update_tablet_area (MetaInputSettings *settings,
ClutterInputDevice *device, ClutterInputDevice *device,
gint32 *area) gint32 *area)
{ {
change_property (device, "Wacom Tablet Area", change_property (settings, device, "Wacom Tablet Area",
XA_INTEGER, 32, area, 4); XA_INTEGER, 32, area, 4);
} }
@ -644,7 +683,7 @@ meta_input_settings_x11_set_tablet_area (MetaInputSettings *settings,
{ {
gint32 x, y, width, height, area[4] = { 0 }; gint32 x, y, width, height, area[4] = { 0 };
if (!device_query_area (device, &x, &y, &width, &height)) if (!device_query_area (settings, device, &x, &y, &width, &height))
return; return;
area[0] = (width * padding_left) + x; area[0] = (width * padding_left) + x;
@ -661,7 +700,8 @@ meta_input_settings_x11_set_tablet_aspect_ratio (MetaInputSettings *settings,
{ {
int32_t dev_x, dev_y, dev_width, dev_height, area[4] = { 0 }; int32_t dev_x, dev_y, dev_width, dev_height, area[4] = { 0 };
if (!device_query_area (device, &dev_x, &dev_y, &dev_width, &dev_height)) if (!device_query_area (settings, device,
&dev_x, &dev_y, &dev_width, &dev_height))
return; return;
if (aspect_ratio > 0) if (aspect_ratio > 0)
@ -711,8 +751,8 @@ meta_input_settings_x11_set_stylus_button_map (MetaInputSettings *setti
GDesktopStylusButtonAction secondary, GDesktopStylusButtonAction secondary,
GDesktopStylusButtonAction tertiary) GDesktopStylusButtonAction tertiary)
{ {
MetaDisplay *display = meta_get_display (); MetaDisplay *display = get_display (settings);
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = get_backend (settings);
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend)); Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
XDevice *xdev; XDevice *xdev;
@ -721,7 +761,7 @@ meta_input_settings_x11_set_stylus_button_map (MetaInputSettings *setti
/* Grab the puke bucket! */ /* Grab the puke bucket! */
meta_x11_error_trap_push (display->x11_display); meta_x11_error_trap_push (display->x11_display);
xdev = device_ensure_xdevice (device); xdev = device_ensure_xdevice (settings, device);
if (xdev) if (xdev)
{ {
guchar map[8] = { guchar map[8] = {
@ -761,7 +801,7 @@ meta_input_settings_x11_set_mouse_middle_click_emulation (MetaInputSettings *se
CLUTTER_INPUT_CAPABILITY_TRACKPOINT)) != 0) CLUTTER_INPUT_CAPABILITY_TRACKPOINT)) != 0)
return; return;
change_property (device, "libinput Middle Emulation Enabled", change_property (settings, device, "libinput Middle Emulation Enabled",
XA_INTEGER, 8, &value, 1); XA_INTEGER, 8, &value, 1);
} }
@ -776,7 +816,7 @@ meta_input_settings_x11_set_touchpad_middle_click_emulation (MetaInputSettings
if ((caps & CLUTTER_INPUT_CAPABILITY_TOUCHPAD) == 0) if ((caps & CLUTTER_INPUT_CAPABILITY_TOUCHPAD) == 0)
return; return;
change_property (device, "libinput Middle Emulation Enabled", change_property (settings, device, "libinput Middle Emulation Enabled",
XA_INTEGER, 8, &value, 1); XA_INTEGER, 8, &value, 1);
} }
@ -791,7 +831,7 @@ meta_input_settings_x11_set_trackball_middle_click_emulation (MetaInputSettings
if ((caps & CLUTTER_INPUT_CAPABILITY_TRACKBALL) == 0) if ((caps & CLUTTER_INPUT_CAPABILITY_TRACKBALL) == 0)
return; return;
change_property (device, "libinput Middle Emulation Enabled", change_property (settings, device, "libinput Middle Emulation Enabled",
XA_INTEGER, 8, &value, 1); XA_INTEGER, 8, &value, 1);
} }
@ -803,7 +843,7 @@ meta_input_settings_x11_set_stylus_pressure (MetaInputSettings *settings,
{ {
guint32 values[4] = { pressure[0], pressure[1], pressure[2], pressure[3] }; guint32 values[4] = { pressure[0], pressure[1], pressure[2], pressure[3] };
change_property (device, "Wacom Pressurecurve", XA_INTEGER, 32, change_property (settings, device, "Wacom Pressurecurve", XA_INTEGER, 32,
&values, G_N_ELEMENTS (values)); &values, G_N_ELEMENTS (values));
} }

View File

@ -645,6 +645,7 @@ create_device (MetaSeatX11 *seat_x11,
get_pad_features (info, &num_rings, &num_strips); get_pad_features (info, &num_rings, &num_strips);
retval = g_object_new (META_TYPE_INPUT_DEVICE_X11, retval = g_object_new (META_TYPE_INPUT_DEVICE_X11,
"backend", seat_x11->backend,
"name", info->name, "name", info->name,
"id", info->deviceid, "id", info->deviceid,
"has-cursor", (info->use == XIMasterPointer), "has-cursor", (info->use == XIMasterPointer),
@ -1604,7 +1605,9 @@ meta_seat_x11_peek_devices (ClutterSeat *seat)
static void static void
meta_seat_x11_bell_notify (ClutterSeat *seat) meta_seat_x11_bell_notify (ClutterSeat *seat)
{ {
MetaDisplay *display = meta_get_display (); MetaSeatX11 *seat_x11 = META_SEAT_X11 (seat);
MetaContext *context = meta_backend_get_context (seat_x11->backend);
MetaDisplay *display = meta_context_get_display (context);
meta_bell_notify (display, NULL); meta_bell_notify (display, NULL);
} }
@ -1798,7 +1801,7 @@ meta_seat_x11_grab (ClutterSeat *seat,
uint32_t time) uint32_t time)
{ {
MetaSeatX11 *seat_x11 = META_SEAT_X11 (seat); MetaSeatX11 *seat_x11 = META_SEAT_X11 (seat);
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = seat_x11->backend;
ClutterGrabState state = CLUTTER_GRAB_STATE_NONE; ClutterGrabState state = CLUTTER_GRAB_STATE_NONE;
g_return_val_if_fail (seat_x11->grab_state == CLUTTER_GRAB_STATE_NONE, g_return_val_if_fail (seat_x11->grab_state == CLUTTER_GRAB_STATE_NONE,
@ -1824,7 +1827,7 @@ meta_seat_x11_ungrab (ClutterSeat *seat,
uint32_t time) uint32_t time)
{ {
MetaSeatX11 *seat_x11 = META_SEAT_X11 (seat); MetaSeatX11 *seat_x11 = META_SEAT_X11 (seat);
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = seat_x11->backend;
if ((seat_x11->grab_state & CLUTTER_GRAB_STATE_POINTER) != 0) if ((seat_x11->grab_state & CLUTTER_GRAB_STATE_POINTER) != 0)
{ {

View File

@ -498,8 +498,9 @@ meta_stage_x11_can_clip_redraws (ClutterStageWindow *stage_window)
static GList * static GList *
meta_stage_x11_get_views (ClutterStageWindow *stage_window) meta_stage_x11_get_views (ClutterStageWindow *stage_window)
{ {
MetaStageX11 *stage_x11 = META_STAGE_X11 (stage_window); MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_window);
MetaRenderer *renderer = meta_backend_get_renderer (stage_x11->backend); MetaBackend *backend = meta_stage_impl_get_backend (stage_impl);
MetaRenderer *renderer = meta_backend_get_renderer (backend);
return meta_renderer_get_views (renderer); return meta_renderer_get_views (renderer);
} }
@ -541,9 +542,6 @@ meta_stage_x11_init (MetaStageX11 *stage)
stage->wm_state = STAGE_X11_WITHDRAWN; stage->wm_state = STAGE_X11_WITHDRAWN;
stage->title = NULL; stage->title = NULL;
stage->backend = meta_get_backend ();
g_assert (stage->backend);
} }
static void static void

View File

@ -52,8 +52,6 @@ struct _MetaStageX11
{ {
MetaStageImpl parent_instance; MetaStageImpl parent_instance;
MetaBackend *backend;
CoglOnscreen *onscreen; CoglOnscreen *onscreen;
Window xwin; Window xwin;
gint xwin_width; gint xwin_width;

View File

@ -89,6 +89,8 @@ set_xkb_desc_rec (Display *xdisplay,
static void static void
check_settings_changed (ClutterSeat *seat) check_settings_changed (ClutterSeat *seat)
{ {
MetaSeatX11 *seat_x11 = META_SEAT_X11 (seat);
MetaBackend *backend = meta_seat_x11_get_backend (META_SEAT_X11 (seat_x11));
Display *xdisplay = xdisplay_from_seat (seat); Display *xdisplay = xdisplay_from_seat (seat);
MetaKbdA11ySettings kbd_a11y_settings; MetaKbdA11ySettings kbd_a11y_settings;
MetaKeyboardA11yFlags what_changed = 0; MetaKeyboardA11yFlags what_changed = 0;
@ -99,7 +101,7 @@ check_settings_changed (ClutterSeat *seat)
if (!desc) if (!desc)
return; return;
input_settings = meta_backend_get_input_settings (meta_get_backend ()); input_settings = meta_backend_get_input_settings (backend);
meta_input_settings_get_kbd_a11y_settings (input_settings, meta_input_settings_get_kbd_a11y_settings (input_settings,
&kbd_a11y_settings); &kbd_a11y_settings);
@ -335,7 +337,8 @@ meta_seat_x11_apply_kbd_a11y_settings (ClutterSeat *seat,
gboolean gboolean
meta_seat_x11_a11y_init (ClutterSeat *seat) meta_seat_x11_a11y_init (ClutterSeat *seat)
{ {
MetaBackend *backend = meta_get_backend (); MetaSeatX11 *seat_x11 = META_SEAT_X11 (seat);
MetaBackend *backend = meta_seat_x11_get_backend (META_SEAT_X11 (seat_x11));
ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend); ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend);
MetaClutterBackendX11 *clutter_backend_x11 = MetaClutterBackendX11 *clutter_backend_x11 =
META_CLUTTER_BACKEND_X11 (clutter_backend); META_CLUTTER_BACKEND_X11 (clutter_backend);

View File

@ -95,7 +95,9 @@ meta_backend_x11_nested_get_input_settings (MetaBackend *backend)
if (!priv->input_settings) if (!priv->input_settings)
{ {
priv->input_settings = priv->input_settings =
g_object_new (META_TYPE_INPUT_SETTINGS_DUMMY, NULL); g_object_new (META_TYPE_INPUT_SETTINGS_DUMMY,
"backend", backend,
NULL);
} }
return priv->input_settings; return priv->input_settings;
@ -191,8 +193,10 @@ meta_backend_x11_nested_handle_host_xevent (MetaBackendX11 *x11,
if (event->xfocus.window == xwin) if (event->xfocus.window == xwin)
{ {
MetaBackend *backend = META_BACKEND (x11);
MetaContext *context = meta_backend_get_context (backend);
MetaWaylandCompositor *compositor = MetaWaylandCompositor *compositor =
meta_wayland_compositor_get_default (); meta_context_get_wayland_compositor (context);
Display *xdisplay = meta_backend_x11_get_xdisplay (x11); Display *xdisplay = meta_backend_x11_get_xdisplay (x11);
/* /*

View File

@ -71,11 +71,15 @@ create_empty_cursor (Display *xdisplay)
} }
static void static void
meta_cursor_renderer_x11_nested_init (MetaCursorRendererX11Nested *x11_nested) meta_cursor_renderer_x11_nested_constructed (GObject *object)
{ {
MetaBackendX11 *backend = META_BACKEND_X11 (meta_get_backend ()); MetaCursorRendererX11Nested *x11_nested =
Window xwindow = meta_backend_x11_get_xwindow (backend); META_CURSOR_RENDERER_X11_NESTED (object);
Display *xdisplay = meta_backend_x11_get_xdisplay (backend); MetaCursorRenderer *cursor_renderer = META_CURSOR_RENDERER (x11_nested);
MetaBackend *backend = meta_cursor_renderer_get_backend (cursor_renderer);
MetaBackendX11 *backend_x11 = META_BACKEND_X11 (backend);
Window xwindow = meta_backend_x11_get_xwindow (backend_x11);
Display *xdisplay = meta_backend_x11_get_xdisplay (backend_x11);
Cursor empty_xcursor = create_empty_cursor (xdisplay); Cursor empty_xcursor = create_empty_cursor (xdisplay);
XDefineCursor (xdisplay, xwindow, empty_xcursor); XDefineCursor (xdisplay, xwindow, empty_xcursor);
@ -85,7 +89,15 @@ meta_cursor_renderer_x11_nested_init (MetaCursorRendererX11Nested *x11_nested)
static void static void
meta_cursor_renderer_x11_nested_class_init (MetaCursorRendererX11NestedClass *klass) meta_cursor_renderer_x11_nested_class_init (MetaCursorRendererX11NestedClass *klass)
{ {
GObjectClass *object_class = G_OBJECT_CLASS (klass);
MetaCursorRendererClass *renderer_class = META_CURSOR_RENDERER_CLASS (klass); MetaCursorRendererClass *renderer_class = META_CURSOR_RENDERER_CLASS (klass);
object_class->constructed = meta_cursor_renderer_x11_nested_constructed;
renderer_class->update_cursor = meta_cursor_renderer_x11_nested_update_cursor; renderer_class->update_cursor = meta_cursor_renderer_x11_nested_update_cursor;
} }
static void
meta_cursor_renderer_x11_nested_init (MetaCursorRendererX11Nested *x11_nested)
{
}

View File

@ -108,7 +108,7 @@ meta_renderer_x11_nested_resize_legacy_view (MetaRendererX11Nested *renderer_x11
int height) int height)
{ {
MetaRenderer *renderer = META_RENDERER (renderer_x11_nested); MetaRenderer *renderer = META_RENDERER (renderer_x11_nested);
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = meta_renderer_get_backend (renderer);
ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend); ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend);
CoglContext *cogl_context = clutter_backend_get_cogl_context (clutter_backend); CoglContext *cogl_context = clutter_backend_get_cogl_context (clutter_backend);
MetaRendererView *legacy_view; MetaRendererView *legacy_view;
@ -142,7 +142,7 @@ meta_renderer_x11_nested_ensure_legacy_view (MetaRendererX11Nested *renderer_x11
int height) int height)
{ {
MetaRenderer *renderer = META_RENDERER (renderer_x11_nested); MetaRenderer *renderer = META_RENDERER (renderer_x11_nested);
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = meta_renderer_get_backend (renderer);
ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend); ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend);
CoglContext *cogl_context = clutter_backend_get_cogl_context (clutter_backend); CoglContext *cogl_context = clutter_backend_get_cogl_context (clutter_backend);
cairo_rectangle_int_t view_layout; cairo_rectangle_int_t view_layout;

View File

@ -75,7 +75,8 @@ meta_stage_x11_nested_can_clip_redraws (ClutterStageWindow *stage_window)
static GList * static GList *
meta_stage_x11_nested_get_views (ClutterStageWindow *stage_window) meta_stage_x11_nested_get_views (ClutterStageWindow *stage_window)
{ {
MetaBackend *backend = meta_get_backend (); MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_window);
MetaBackend *backend = meta_stage_impl_get_backend (stage_impl);
MetaRenderer *renderer = meta_backend_get_renderer (backend); MetaRenderer *renderer = meta_backend_get_renderer (backend);
return meta_renderer_get_views (renderer); return meta_renderer_get_views (renderer);
@ -153,7 +154,8 @@ meta_stage_x11_nested_finish_frame (ClutterStageWindow *stage_window,
{ {
MetaStageX11Nested *stage_nested = META_STAGE_X11_NESTED (stage_window); MetaStageX11Nested *stage_nested = META_STAGE_X11_NESTED (stage_window);
MetaStageX11 *stage_x11 = META_STAGE_X11 (stage_window); MetaStageX11 *stage_x11 = META_STAGE_X11 (stage_window);
MetaBackend *backend = meta_get_backend (); MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_window);
MetaBackend *backend = meta_stage_impl_get_backend (stage_impl);
MetaRenderer *renderer = meta_backend_get_renderer (backend); MetaRenderer *renderer = meta_backend_get_renderer (backend);
ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend); ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend);
CoglFramebuffer *onscreen = COGL_FRAMEBUFFER (stage_x11->onscreen); CoglFramebuffer *onscreen = COGL_FRAMEBUFFER (stage_x11->onscreen);

View File

@ -102,6 +102,7 @@ meta_test_headless_monitor_connect (void)
gpu = META_GPU (meta_backend_get_gpus (meta_get_backend ())->data); gpu = META_GPU (meta_backend_get_gpus (meta_get_backend ())->data);
crtc = g_object_new (META_TYPE_CRTC_TEST, crtc = g_object_new (META_TYPE_CRTC_TEST,
"id", (uint64_t) 1, "id", (uint64_t) 1,
"backend", backend,
"gpu", gpu, "gpu", gpu,
NULL); NULL);
test_setup->crtcs = g_list_append (NULL, crtc); test_setup->crtcs = g_list_append (NULL, crtc);

View File

@ -664,6 +664,7 @@ meta_create_monitor_test_setup (MetaBackend *backend,
crtc = g_object_new (META_TYPE_CRTC_TEST, crtc = g_object_new (META_TYPE_CRTC_TEST,
"id", (uint64_t) i + 1, "id", (uint64_t) i + 1,
"backend", backend,
"gpu", meta_test_get_gpu (backend), "gpu", meta_test_get_gpu (backend),
NULL); NULL);
if (setup->crtcs[i].disable_gamma_lut) if (setup->crtcs[i].disable_gamma_lut)