backends: add 'monitors-updated-internal' signal to only update internal state
authorMarco Trevisan (Treviño) <mail@3v1n0.net>
Fri, 13 Oct 2017 00:14:40 +0000 (19:14 -0500)
committerJeremy Bicha <jbicha@debian.org>
Sat, 21 Oct 2017 23:47:22 +0000 (00:47 +0100)
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

Gbp-Pq: Name 0008-backends-add-monitors-updated-internal-signal-to-onl.patch

src/backends/meta-backend.c
src/backends/meta-input-settings.c
src/backends/meta-monitor-manager.c
src/backends/meta-screen-cast-monitor-stream.c
src/backends/meta-settings.c
src/backends/native/meta-cursor-renderer-native.c
src/backends/x11/meta-backend-x11.c
src/core/screen.c
src/wayland/meta-wayland-outputs.c

index faa8d6fdc4fe217dfb9d9700dd49e9d2a4f76a1b..89d47eb807b54f22affe56baabca475e5e3ac8e0 100644 (file)
@@ -196,8 +196,6 @@ meta_backend_monitors_changed (MetaBackend *backend)
           priv->is_pointer_position_initialized = TRUE;
         }
     }
-
-  meta_settings_update_ui_scaling_factor (priv->settings);
 }
 
 void
index d6c7b57b636cbd586a61120013e3eee3815d745b..06587555279d5369c63f6cb7eb3c43e7bb93c952 100644 (file)
@@ -1617,7 +1617,7 @@ meta_input_settings_init (MetaInputSettings *settings)
     g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) device_mapping_info_free);
 
   priv->monitor_manager = g_object_ref (meta_monitor_manager_get ());
-  g_signal_connect (priv->monitor_manager, "monitors-changed",
+  g_signal_connect (priv->monitor_manager, "monitors-changed-internal",
                     G_CALLBACK (monitors_changed_cb), settings);
 
 #ifdef HAVE_LIBWACOM
index 2caec1b57761812867c7dcff72c4da82d56fd1f8..fd2aca9698b2600c749fcbf0960fab157c80598f 100644 (file)
@@ -46,6 +46,7 @@
 #define DEFAULT_DISPLAY_CONFIGURATION_TIMEOUT 20
 
 enum {
+  MONITORS_CHANGED_INTERNAL,
   CONFIRM_DISPLAY_CHANGE,
   SIGNALS_LAST
 };
@@ -851,6 +852,14 @@ meta_monitor_manager_class_init (MetaMonitorManagerClass *klass)
   klass->read_edid = meta_monitor_manager_real_read_edid;
   klass->is_lid_closed = meta_monitor_manager_real_is_lid_closed;
 
+  signals[MONITORS_CHANGED_INTERNAL] =
+    g_signal_new ("monitors-changed-internal",
+                  G_TYPE_FROM_CLASS (object_class),
+                  G_SIGNAL_RUN_LAST,
+                  0,
+                  NULL, NULL, NULL,
+                  G_TYPE_NONE, 0);
+
   signals[CONFIRM_DISPLAY_CHANGE] =
     g_signal_new ("confirm-display-change",
                  G_TYPE_FROM_CLASS (object_class),
@@ -2574,6 +2583,8 @@ meta_monitor_manager_notify_monitors_changed (MetaMonitorManager *manager)
   manager->current_switch_config = META_MONITOR_SWITCH_CONFIG_UNKNOWN;
 
   meta_backend_monitors_changed (backend);
+
+  g_signal_emit (manager, signals[MONITORS_CHANGED_INTERNAL], 0);
   g_signal_emit_by_name (manager, "monitors-changed");
 }
 
index ece7efcdd8185a680f2abb5e791c91e885bb76ae..853090a43fbe7b0bfe0d050803cfa1978ecec90d 100644 (file)
@@ -130,7 +130,7 @@ meta_screen_cast_monitor_stream_new (GDBusConnection     *connection,
 
   monitor_stream->stage = stage;
 
-  g_signal_connect_object (monitor_manager, "monitors-changed",
+  g_signal_connect_object (monitor_manager, "monitors-changed-internal",
                            G_CALLBACK (on_monitors_changed),
                            monitor_stream, 0);
 
index 73741fd5ac51f8e3cd96ba95e98571904a3a03da..cb22bf33c2455968874a405a6615d9d092e6740e 100644 (file)
@@ -343,11 +343,25 @@ meta_settings_init (MetaSettings *settings)
   update_experimental_features (settings);
 }
 
+static void
+on_monitors_changed (MetaMonitorManager *monitor_manager,
+                     MetaSettings       *settings)
+{
+  meta_settings_update_ui_scaling_factor (settings);
+}
+
 void
 meta_settings_post_init (MetaSettings *settings)
 {
+  MetaMonitorManager *monitor_manager =
+    meta_backend_get_monitor_manager (settings->backend);
+
   update_ui_scaling_factor (settings);
   update_font_dpi (settings);
+
+  g_signal_connect_object (monitor_manager, "monitors-changed-internal",
+                           G_CALLBACK (on_monitors_changed),
+                           settings, G_CONNECT_AFTER);
 }
 
 static void
index 72276ebe27a70e3eab4d9ae4e4a351ecef39cbbf..9b2c03aaadd7746157cf547483b4629054526a6c 100644 (file)
@@ -850,7 +850,7 @@ meta_cursor_renderer_native_init (MetaCursorRendererNative *native)
   MetaMonitorManager *monitors;
 
   monitors = meta_monitor_manager_get ();
-  g_signal_connect_object (monitors, "monitors-changed",
+  g_signal_connect_object (monitors, "monitors-changed-internal",
                            G_CALLBACK (on_monitors_changed), native, 0);
 
   priv->hw_state_invalidated = TRUE;
index 2c49690d7881a45ffaaa4e82ae6ac9a853766aac..2335324355d7ac66985ef566bc2cf6e3d7148024 100644 (file)
@@ -454,7 +454,7 @@ meta_backend_x11_post_init (MetaBackend *backend)
   META_BACKEND_CLASS (meta_backend_x11_parent_class)->post_init (backend);
 
   monitor_manager = meta_backend_get_monitor_manager (backend);
-  g_signal_connect (monitor_manager, "monitors-changed",
+  g_signal_connect (monitor_manager, "monitors-changed-internal",
                     G_CALLBACK (on_monitors_changed), backend);
 }
 
index 89000234094e7fc48c849a1b53abcbaf9174f249..be439434960b344bbf6692c69e6b968ba1a967e2 100644 (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);
 }
 
index db8d240f20285eddf70b49f9f95e4eff961ddffa..51f62f98f0569320a8e1506fc4ae088ef73ae7e0 100644 (file)
@@ -422,7 +422,7 @@ meta_wayland_outputs_init (MetaWaylandCompositor *compositor)
   MetaMonitorManager *monitors;
 
   monitors = meta_monitor_manager_get ();
-  g_signal_connect (monitors, "monitors-changed",
+  g_signal_connect (monitors, "monitors-changed-internal",
                     G_CALLBACK (on_monitors_changed), compositor);
 
   compositor->outputs = g_hash_table_new_full (NULL, NULL, NULL, wayland_output_destroy_notify);