[gnome-flashback] monitor-manager: filter out low screen resolutions



commit 1cf28e2e23bf5651ea471c1ea618deff37066b2d
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Sat Aug 17 23:26:27 2019 +0300

    monitor-manager: filter out low screen resolutions
    
    Based on mutter commits:
    https://gitlab.gnome.org/GNOME/mutter/commit/649c26e05a67c52a4f5acf
    https://gitlab.gnome.org/GNOME/mutter/commit/18838bcefccd87ab796370

 backends/gf-monitor-manager.c |  4 ++++
 backends/gf-monitor-private.h |  2 ++
 backends/gf-monitor.c         | 20 ++++++++++++++++++--
 3 files changed, 24 insertions(+), 2 deletions(-)
---
diff --git a/backends/gf-monitor-manager.c b/backends/gf-monitor-manager.c
index 396152b..7a4890b 100644
--- a/backends/gf-monitor-manager.c
+++ b/backends/gf-monitor-manager.c
@@ -1498,9 +1498,13 @@ gf_monitor_manager_handle_get_current_state (GfDBusDisplayConfig   *skeleton,
           GVariantBuilder mode_properties_builder;
           GfCrtcModeFlag mode_flags;
 
+          if (!gf_monitor_mode_should_be_advertised (monitor_mode))
+            continue;
+
           mode_id = gf_monitor_mode_get_id (monitor_mode);
           gf_monitor_mode_get_resolution (monitor_mode,
                                           &mode_width, &mode_height);
+
           refresh_rate = gf_monitor_mode_get_refresh_rate (monitor_mode);
 
           preferred_scale =
diff --git a/backends/gf-monitor-private.h b/backends/gf-monitor-private.h
index cba5728..77f3d4a 100644
--- a/backends/gf-monitor-private.h
+++ b/backends/gf-monitor-private.h
@@ -229,6 +229,8 @@ gboolean            gf_monitor_mode_foreach_output        (GfMonitor
                                                            gpointer                    user_data,
                                                            GError                    **error);
 
+gboolean            gf_monitor_mode_should_be_advertised  (GfMonitorMode              *monitor_mode);
+
 gboolean            gf_verify_monitor_mode_spec           (GfMonitorModeSpec          *mode_spec,
                                                            GError                    **error);
 
diff --git a/backends/gf-monitor.c b/backends/gf-monitor.c
index a0dac56..6f31632 100644
--- a/backends/gf-monitor.c
+++ b/backends/gf-monitor.c
@@ -296,6 +296,14 @@ out:
   return scale;
 }
 
+static gboolean
+is_logical_size_large_enough (gint width,
+                              gint height)
+{
+  return width >= MINIMUM_LOGICAL_WIDTH &&
+         height >= MINIMUM_LOGICAL_HEIGHT;
+}
+
 static gfloat
 get_closest_scale_factor_for_resolution (gfloat width,
                                          gfloat height,
@@ -316,8 +324,7 @@ get_closest_scale_factor_for_resolution (gfloat width,
 
   if (scale < MINIMUM_SCALE_FACTOR ||
       scale > MAXIMUM_SCALE_FACTOR ||
-      floorf (scaled_w) < MINIMUM_LOGICAL_WIDTH ||
-      floorf (scaled_h) < MINIMUM_LOGICAL_HEIGHT)
+      !is_logical_size_large_enough (floorf (scaled_w), floorf (scaled_h)))
     goto out;
 
   if (floorf (scaled_w) == scaled_w && floorf (scaled_h) == scaled_h)
@@ -1198,6 +1205,15 @@ gf_monitor_mode_foreach_output (GfMonitor          *monitor,
   return TRUE;
 }
 
+gboolean
+gf_monitor_mode_should_be_advertised (GfMonitorMode *monitor_mode)
+{
+  g_return_val_if_fail (monitor_mode != NULL, FALSE);
+
+  return is_logical_size_large_enough (monitor_mode->spec.width,
+                                       monitor_mode->spec.height);
+}
+
 gboolean
 gf_verify_monitor_mode_spec (GfMonitorModeSpec  *mode_spec,
                              GError            **error)


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