[mutter] monitor-manager: Let the backends handle no configuration



commit fcc0288f0cd19d1c789fce28f3cd98366fdbc18f
Author: Jonas Ådahl <jadahl gmail com>
Date:   Fri Jan 20 14:50:11 2017 +0800

    monitor-manager: Let the backends handle no configuration
    
    Let the backends decide whether to just rebuild a derived state, or use
    the NULL config to rebuild an empty logical state.
    
    This also changes the expected screen size values of the no-outputs
    test; as this case is actually handled now.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=777732

 src/backends/meta-monitor-manager-dummy.c      |    8 ++++++++
 src/backends/meta-monitor-manager.c            |    2 +-
 src/backends/native/meta-monitor-manager-kms.c |    1 +
 src/backends/x11/meta-monitor-manager-xrandr.c |    6 ++++++
 src/tests/meta-monitor-manager-test.c          |   11 +++++++++++
 src/tests/monitor-unit-tests.c                 |    5 +++--
 6 files changed, 30 insertions(+), 3 deletions(-)
---
diff --git a/src/backends/meta-monitor-manager-dummy.c b/src/backends/meta-monitor-manager-dummy.c
index 7db98e3..3cfabff 100644
--- a/src/backends/meta-monitor-manager-dummy.c
+++ b/src/backends/meta-monitor-manager-dummy.c
@@ -501,6 +501,14 @@ meta_monitor_manager_dummy_apply_monitors_config (MetaMonitorManager *manager,
   GPtrArray *crtc_infos;
   GPtrArray *output_infos;
 
+  if (!config)
+    {
+      manager->screen_width = 0;
+      manager->screen_height = 0;
+
+      meta_monitor_manager_rebuild (manager, NULL);
+    }
+
   if (!meta_monitor_config_manager_assign (manager, config,
                                            &crtc_infos, &output_infos,
                                            error))
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index bb9334c..e3b68ad 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -420,7 +420,7 @@ done:
 
   if (!config)
     {
-      meta_monitor_manager_rebuild (manager, NULL);
+      meta_monitor_manager_apply_monitors_config (manager, NULL, &error);
       return NULL;
     }
 
diff --git a/src/backends/native/meta-monitor-manager-kms.c b/src/backends/native/meta-monitor-manager-kms.c
index a7a4dac..dc7988f 100644
--- a/src/backends/native/meta-monitor-manager-kms.c
+++ b/src/backends/native/meta-monitor-manager-kms.c
@@ -1430,6 +1430,7 @@ meta_monitor_manager_kms_apply_monitors_config (MetaMonitorManager *manager,
     {
       manager->screen_width = 0;
       manager->screen_height = 0;
+      meta_monitor_manager_rebuild (manager, NULL);
       return TRUE;
     }
 
diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c
index 0fdc5bf..3349c31 100644
--- a/src/backends/x11/meta-monitor-manager-xrandr.c
+++ b/src/backends/x11/meta-monitor-manager-xrandr.c
@@ -1303,6 +1303,12 @@ meta_monitor_manager_xrandr_apply_monitors_config (MetaMonitorManager *manager,
   GPtrArray *crtc_infos;
   GPtrArray *output_infos;
 
+  if (!config)
+    {
+      meta_monitor_manager_rebuild_derived (manager);
+      return TRUE;
+    }
+
   if (!meta_monitor_config_manager_assign (manager, config,
                                            &crtc_infos, &output_infos,
                                            error))
diff --git a/src/tests/meta-monitor-manager-test.c b/src/tests/meta-monitor-manager-test.c
index feb9d85..7769ec7 100644
--- a/src/tests/meta-monitor-manager-test.c
+++ b/src/tests/meta-monitor-manager-test.c
@@ -258,6 +258,17 @@ meta_monitor_manager_test_apply_monitors_config (MetaMonitorManager *manager,
   GPtrArray *crtc_infos;
   GPtrArray *output_infos;
 
+  if (!config)
+    {
+      /* The screen is made 1x1, as clutter stage used cannot be empty. */
+      manager->screen_width = 1;
+      manager->screen_height = 1;
+
+      meta_monitor_manager_rebuild (manager, NULL);
+
+      return TRUE;
+    }
+
   if (!meta_monitor_config_manager_assign (manager, config,
                                            &crtc_infos,
                                            &output_infos,
diff --git a/src/tests/monitor-unit-tests.c b/src/tests/monitor-unit-tests.c
index 9211300..1eb3841 100644
--- a/src/tests/monitor-unit-tests.c
+++ b/src/tests/monitor-unit-tests.c
@@ -2135,8 +2135,9 @@ meta_test_monitor_no_outputs (void)
       .n_outputs = 0,
       .n_crtcs = 0,
       .n_tiled_monitors = 0,
-      .screen_width = 1024,
-      .screen_height = 768
+      /* The screen is made 1x1, as clutter stage used cannot be empty. */
+      .screen_width = 1,
+      .screen_height = 1
     }
   };
   MetaMonitorTestSetup *test_setup;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]