[gnome-flashback] monitor: always advertise modes similar to the preferred mode



commit 08d094b2e4bfd2bc391dda0ede7b658f27859f70
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Sat Aug 17 23:33:59 2019 +0300

    monitor: always advertise modes similar to the preferred mode
    
    Based on mutter commit:
    https://gitlab.gnome.org/GNOME/mutter/commit/05217066171992b0bc5088

 backends/gf-monitor-normal.c  | 1 +
 backends/gf-monitor-private.h | 2 ++
 backends/gf-monitor-tiled.c   | 2 ++
 backends/gf-monitor.c         | 7 +++++++
 4 files changed, 12 insertions(+)
---
diff --git a/backends/gf-monitor-normal.c b/backends/gf-monitor-normal.c
index aeefbd9..d46d5a3 100644
--- a/backends/gf-monitor-normal.c
+++ b/backends/gf-monitor-normal.c
@@ -53,6 +53,7 @@ generate_modes (GfMonitorNormal *normal)
       crtc_mode = output->modes[i];
 
       mode = g_new0 (GfMonitorMode, 1);
+      mode->monitor = monitor;
       mode->spec = gf_monitor_create_spec (monitor,
                                            crtc_mode->width,
                                            crtc_mode->height,
diff --git a/backends/gf-monitor-private.h b/backends/gf-monitor-private.h
index 77f3d4a..a3bc60f 100644
--- a/backends/gf-monitor-private.h
+++ b/backends/gf-monitor-private.h
@@ -53,6 +53,8 @@ typedef struct
 
 struct _GfMonitorMode
 {
+  GfMonitor         *monitor;
+
   gchar             *id;
   GfMonitorModeSpec  spec;
   GfMonitorCrtcMode *crtc_modes;
diff --git a/backends/gf-monitor-tiled.c b/backends/gf-monitor-tiled.c
index 9efc606..379f8e3 100644
--- a/backends/gf-monitor-tiled.c
+++ b/backends/gf-monitor-tiled.c
@@ -138,6 +138,7 @@ create_tiled_monitor_mode (GfMonitorTiled *tiled,
 
   calculate_tiled_size (monitor, &width, &height);
 
+  mode->parent.monitor = monitor;
   mode->parent.spec = gf_monitor_create_spec (monitor,
                                               width,
                                               height,
@@ -192,6 +193,7 @@ create_untiled_monitor_mode (GfMonitorTiled *tiled,
   mode = g_new0 (GfMonitorModeTiled, 1);
   mode->is_tiled = FALSE;
 
+  mode->parent.monitor = monitor;
   mode->parent.spec = gf_monitor_create_spec (monitor,
                                               crtc_mode->width,
                                               crtc_mode->height,
diff --git a/backends/gf-monitor.c b/backends/gf-monitor.c
index 9b7bbaf..afbb20f 100644
--- a/backends/gf-monitor.c
+++ b/backends/gf-monitor.c
@@ -1206,8 +1206,15 @@ gf_monitor_mode_foreach_output (GfMonitor          *monitor,
 gboolean
 gf_monitor_mode_should_be_advertised (GfMonitorMode *monitor_mode)
 {
+  GfMonitorMode *preferred_mode;
+
   g_return_val_if_fail (monitor_mode != NULL, FALSE);
 
+  preferred_mode = gf_monitor_get_preferred_mode (monitor_mode->monitor);
+  if (monitor_mode->spec.width == preferred_mode->spec.width &&
+      monitor_mode->spec.height == preferred_mode->spec.height)
+    return TRUE;
+
   return is_logical_size_large_enough (monitor_mode->spec.width,
                                        monitor_mode->spec.height);
 }


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