[gnome-flashback] monitor-manager: filter out low screen resolutions
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] monitor-manager: filter out low screen resolutions
- Date: Sat, 17 Aug 2019 20:46:23 +0000 (UTC)
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]