MetaBackend: Move fields from MetaBackend into MetaBackendPrivate

Lets prepare for being able to declare the MetaBackend type using
the macro helper.

https://bugzilla.gnome.org/show_bug.cgi?id=777732
This commit is contained in:
Jonas Ådahl 2016-12-01 16:15:16 +08:00
parent 2df4ebff47
commit d644993a74
4 changed files with 66 additions and 31 deletions

View File

@ -53,11 +53,6 @@
struct _MetaBackend struct _MetaBackend
{ {
GObject parent; GObject parent;
GHashTable *device_monitors;
gint current_device_id;
MetaPointerConstraint *client_pointer_constraint;
}; };
struct _MetaBackendClass struct _MetaBackendClass
@ -115,6 +110,10 @@ ClutterBackend * meta_backend_get_clutter_backend (MetaBackend *backend);
MetaIdleMonitor * meta_backend_get_idle_monitor (MetaBackend *backend, MetaIdleMonitor * meta_backend_get_idle_monitor (MetaBackend *backend,
int device_id); int device_id);
void meta_backend_foreach_device_monitor (MetaBackend *backend,
GFunc func,
gpointer user_data);
MetaMonitorManager * meta_backend_get_monitor_manager (MetaBackend *backend); MetaMonitorManager * meta_backend_get_monitor_manager (MetaBackend *backend);
MetaCursorTracker * meta_backend_get_cursor_tracker (MetaBackend *backend); MetaCursorTracker * meta_backend_get_cursor_tracker (MetaBackend *backend);
MetaCursorRenderer * meta_backend_get_cursor_renderer (MetaBackend *backend); MetaCursorRenderer * meta_backend_get_cursor_renderer (MetaBackend *backend);
@ -144,6 +143,7 @@ gboolean meta_backend_get_relative_motion_deltas (MetaBackend *backend,
double *dx_unaccel, double *dx_unaccel,
double *dy_unaccel); double *dy_unaccel);
MetaPointerConstraint * meta_backend_get_client_pointer_constraint (MetaBackend *backend);
void meta_backend_set_client_pointer_constraint (MetaBackend *backend, void meta_backend_set_client_pointer_constraint (MetaBackend *backend,
MetaPointerConstraint *constraint); MetaPointerConstraint *constraint);

View File

@ -72,6 +72,12 @@ struct _MetaBackendPrivate
ClutterActor *stage; ClutterActor *stage;
guint device_update_idle_id; guint device_update_idle_id;
GHashTable *device_monitors;
int current_device_id;
MetaPointerConstraint *client_pointer_constraint;
}; };
typedef struct _MetaBackendPrivate MetaBackendPrivate; typedef struct _MetaBackendPrivate MetaBackendPrivate;
@ -95,7 +101,7 @@ meta_backend_finalize (GObject *object)
if (priv->device_update_idle_id) if (priv->device_update_idle_id)
g_source_remove (priv->device_update_idle_id); g_source_remove (priv->device_update_idle_id);
g_hash_table_destroy (backend->device_monitors); g_hash_table_destroy (priv->device_monitors);
G_OBJECT_CLASS (meta_backend_parent_class)->finalize (object); G_OBJECT_CLASS (meta_backend_parent_class)->finalize (object);
} }
@ -146,6 +152,24 @@ meta_backend_monitors_changed (MetaBackend *backend)
} }
} }
void
meta_backend_foreach_device_monitor (MetaBackend *backend,
GFunc func,
gpointer user_data)
{
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
GHashTableIter iter;
gpointer value;
g_hash_table_iter_init (&iter, priv->device_monitors);
while (g_hash_table_iter_next (&iter, NULL, &value))
{
MetaIdleMonitor *device_monitor = META_IDLE_MONITOR (value);
func (device_monitor, user_data);
}
}
static MetaIdleMonitor * static MetaIdleMonitor *
meta_backend_create_idle_monitor (MetaBackend *backend, meta_backend_create_idle_monitor (MetaBackend *backend,
int device_id) int device_id)
@ -157,19 +181,22 @@ static void
create_device_monitor (MetaBackend *backend, create_device_monitor (MetaBackend *backend,
int device_id) int device_id)
{ {
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
MetaIdleMonitor *idle_monitor; MetaIdleMonitor *idle_monitor;
g_assert (g_hash_table_lookup (backend->device_monitors, &device_id) == NULL); g_assert (g_hash_table_lookup (priv->device_monitors, &device_id) == NULL);
idle_monitor = meta_backend_create_idle_monitor (backend, device_id); idle_monitor = meta_backend_create_idle_monitor (backend, device_id);
g_hash_table_insert (backend->device_monitors, &idle_monitor->device_id, idle_monitor); g_hash_table_insert (priv->device_monitors, &idle_monitor->device_id, idle_monitor);
} }
static void static void
destroy_device_monitor (MetaBackend *backend, destroy_device_monitor (MetaBackend *backend,
int device_id) int device_id)
{ {
g_hash_table_remove (backend->device_monitors, &device_id); MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
g_hash_table_remove (priv->device_monitors, &device_id);
} }
static void static void
@ -238,6 +265,7 @@ on_device_removed (ClutterDeviceManager *device_manager,
gpointer user_data) gpointer user_data)
{ {
MetaBackend *backend = META_BACKEND (user_data); MetaBackend *backend = META_BACKEND (user_data);
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
int device_id = clutter_input_device_get_device_id (device); int device_id = clutter_input_device_get_device_id (device);
destroy_device_monitor (backend, device_id); destroy_device_monitor (backend, device_id);
@ -245,9 +273,8 @@ on_device_removed (ClutterDeviceManager *device_manager,
/* If the device the user last interacted goes away, check again pointer /* If the device the user last interacted goes away, check again pointer
* visibility. * visibility.
*/ */
if (backend->current_device_id == device_id) if (priv->current_device_id == device_id)
{ {
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
MetaCursorTracker *cursor_tracker = priv->cursor_tracker; MetaCursorTracker *cursor_tracker = priv->cursor_tracker;
gboolean has_touchscreen, has_pointing_device; gboolean has_touchscreen, has_pointing_device;
ClutterInputDeviceType device_type; ClutterInputDeviceType device_type;
@ -294,8 +321,9 @@ meta_backend_real_post_init (MetaBackend *backend)
priv->cursor_renderer = META_BACKEND_GET_CLASS (backend)->create_cursor_renderer (backend); priv->cursor_renderer = META_BACKEND_GET_CLASS (backend)->create_cursor_renderer (backend);
backend->device_monitors = g_hash_table_new_full (g_int_hash, g_int_equal, priv->device_monitors =
NULL, (GDestroyNotify) g_object_unref); g_hash_table_new_full (g_int_hash, g_int_equal,
NULL, (GDestroyNotify) g_object_unref);
{ {
MetaCursorTracker *cursor_tracker; MetaCursorTracker *cursor_tracker;
@ -456,7 +484,9 @@ MetaIdleMonitor *
meta_backend_get_idle_monitor (MetaBackend *backend, meta_backend_get_idle_monitor (MetaBackend *backend,
int device_id) int device_id)
{ {
return g_hash_table_lookup (backend->device_monitors, &device_id); MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
return g_hash_table_lookup (priv->device_monitors, &device_id);
} }
/** /**
@ -603,11 +633,11 @@ update_last_device (MetaBackend *backend)
priv->device_update_idle_id = 0; priv->device_update_idle_id = 0;
manager = clutter_device_manager_get_default (); manager = clutter_device_manager_get_default ();
device = clutter_device_manager_get_device (manager, device = clutter_device_manager_get_device (manager,
backend->current_device_id); priv->current_device_id);
device_type = clutter_input_device_get_device_type (device); device_type = clutter_input_device_get_device_type (device);
g_signal_emit_by_name (backend, "last-device-changed", g_signal_emit_by_name (backend, "last-device-changed",
backend->current_device_id); priv->current_device_id);
switch (device_type) switch (device_type)
{ {
@ -632,7 +662,7 @@ meta_backend_update_last_device (MetaBackend *backend,
ClutterDeviceManager *manager; ClutterDeviceManager *manager;
ClutterInputDevice *device; ClutterInputDevice *device;
if (backend->current_device_id == device_id) if (priv->current_device_id == device_id)
return; return;
manager = clutter_device_manager_get_default (); manager = clutter_device_manager_get_default ();
@ -642,7 +672,7 @@ meta_backend_update_last_device (MetaBackend *backend,
clutter_input_device_get_device_mode (device) == CLUTTER_INPUT_MODE_MASTER) clutter_input_device_get_device_mode (device) == CLUTTER_INPUT_MODE_MASTER)
return; return;
backend->current_device_id = device_id; priv->current_device_id = device_id;
if (priv->device_update_idle_id == 0) if (priv->device_update_idle_id == 0)
{ {
@ -668,15 +698,25 @@ meta_backend_get_relative_motion_deltas (MetaBackend *backend,
dx_unaccel, dy_unaccel); dx_unaccel, dy_unaccel);
} }
MetaPointerConstraint *
meta_backend_get_client_pointer_constraint (MetaBackend *backend)
{
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
return priv->client_pointer_constraint;
}
void void
meta_backend_set_client_pointer_constraint (MetaBackend *backend, meta_backend_set_client_pointer_constraint (MetaBackend *backend,
MetaPointerConstraint *constraint) MetaPointerConstraint *constraint)
{ {
g_assert (!constraint || !backend->client_pointer_constraint); MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
g_clear_object (&backend->client_pointer_constraint); g_assert (!constraint || !priv->client_pointer_constraint);
g_clear_object (&priv->client_pointer_constraint);
if (constraint) if (constraint)
backend->client_pointer_constraint = g_object_ref (constraint); priv->client_pointer_constraint = g_object_ref (constraint);
} }
/* Mutter is responsible for pulling events off the X queue, so Clutter /* Mutter is responsible for pulling events off the X queue, so Clutter

View File

@ -154,7 +154,8 @@ constrain_to_client_constraint (ClutterInputDevice *device,
float *y) float *y)
{ {
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = meta_get_backend ();
MetaPointerConstraint *constraint = backend->client_pointer_constraint; MetaPointerConstraint *constraint =
meta_backend_get_client_pointer_constraint (backend);
if (!constraint) if (!constraint)
return; return;

View File

@ -98,15 +98,9 @@ static void
handle_alarm_notify (MetaBackend *backend, handle_alarm_notify (MetaBackend *backend,
XEvent *event) XEvent *event)
{ {
GHashTableIter iter; meta_backend_foreach_device_monitor (backend,
gpointer value; (GFunc) meta_idle_monitor_xsync_handle_xevent,
event);
g_hash_table_iter_init (&iter, backend->device_monitors);
while (g_hash_table_iter_next (&iter, NULL, &value))
{
MetaIdleMonitor *device_monitor = META_IDLE_MONITOR (value);
meta_idle_monitor_xsync_handle_xevent (device_monitor, (XSyncAlarmNotifyEvent*) event);
}
} }
static void static void