backend: Ensure the backend gets notified of monitor state having changed

Being a listener to a signal, it is inconvenient to enforce order of
execution between different signal listeners. If there are things in
the backend that should be updated before various other signal
handlers, make sure so is done by emitting the signal after having
explicitly notified the backend.

https://bugzilla.gnome.org/show_bug.cgi?id=768976
This commit is contained in:
Jonas Ådahl
2016-07-06 15:27:45 +08:00
parent 28a898a22f
commit d7b87799c8
3 changed files with 16 additions and 7 deletions

View File

@ -116,11 +116,11 @@ center_pointer (MetaBackend *backend)
primary->rect.y + primary->rect.height / 2);
}
static void
on_monitors_changed (MetaMonitorManager *monitors,
gpointer user_data)
void
meta_backend_monitors_changed (MetaBackend *backend)
{
MetaBackend *backend = META_BACKEND (user_data);
MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend);
ClutterDeviceManager *manager = clutter_device_manager_get_default ();
ClutterInputDevice *device = clutter_device_manager_get_core_device (manager, CLUTTER_POINTER_DEVICE);
ClutterPoint point;
@ -130,7 +130,8 @@ on_monitors_changed (MetaMonitorManager *monitors,
if (clutter_input_device_get_coords (device, NULL, &point))
{
/* If we're outside all monitors, warp the pointer back inside */
if (meta_monitor_manager_get_monitor_at_point (monitors, point.x, point.y) < 0)
if (meta_monitor_manager_get_monitor_at_point (monitor_manager,
point.x, point.y) < 0)
center_pointer (backend);
}
}
@ -278,8 +279,6 @@ meta_backend_real_post_init (MetaBackend *backend)
priv->monitor_manager = create_monitor_manager (backend);
g_signal_connect (priv->monitor_manager, "monitors-changed",
G_CALLBACK (on_monitors_changed), backend);
meta_backend_sync_screen_size (backend);
priv->cursor_renderer = META_BACKEND_GET_CLASS (backend)->create_cursor_renderer (backend);