backends: add 'monitors-updated-internal' signal to only update internal state

Adding an internal signal and use it to update the internal state before
emitting "monitors-changed" which will be repeated by the screen to the world.

https://bugzilla.gnome.org/show_bug.cgi?id=788860
This commit is contained in:
Marco Trevisan (Treviño)
2017-10-12 19:14:40 -05:00
parent fad5657eda
commit b31e545c9d
9 changed files with 43 additions and 11 deletions

View File

@ -73,8 +73,10 @@ static void prefs_changed_callback (MetaPreference pref,
static void set_desktop_geometry_hint (MetaScreen *screen);
static void set_desktop_viewport_hint (MetaScreen *screen);
static void on_monitors_changed (MetaMonitorManager *manager,
MetaScreen *screen);
static void on_monitors_changed_internal (MetaMonitorManager *manager,
MetaScreen *screen);
static void on_monitors_changed (MetaMonitorManager *manager,
MetaScreen *screen);
enum
{
@ -710,6 +712,8 @@ meta_screen_new (MetaDisplay *display,
screen->rect.x = screen->rect.y = 0;
manager = meta_monitor_manager_get ();
g_signal_connect (manager, "monitors-changed-internal",
G_CALLBACK (on_monitors_changed_internal), screen);
g_signal_connect (manager, "monitors-changed",
G_CALLBACK (on_monitors_changed), screen);
@ -2266,8 +2270,8 @@ meta_screen_resize_func (MetaWindow *window,
}
static void
on_monitors_changed (MetaMonitorManager *manager,
MetaScreen *screen)
on_monitors_changed_internal (MetaMonitorManager *manager,
MetaScreen *screen)
{
MetaBackend *backend;
MetaCursorRenderer *cursor_renderer;
@ -2306,7 +2310,13 @@ on_monitors_changed (MetaMonitorManager *manager,
backend = meta_get_backend ();
cursor_renderer = meta_backend_get_cursor_renderer (backend);
meta_cursor_renderer_force_update (cursor_renderer);
}
static void
on_monitors_changed (MetaMonitorManager *manager,
MetaScreen *screen)
{
/* Inform the external world about what has happened */
g_signal_emit (screen, screen_signals[MONITORS_CHANGED], 0);
}