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:
@ -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);
|
||||
|
Reference in New Issue
Block a user