mirror of
https://github.com/brl/mutter.git
synced 2025-08-05 08:04:50 +00:00
monitor: Always advertise modes similar to the preferred mode
Even if the preferred mode ends up being too small according to the area size filter, it should still be advertised as it's still preferred. Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/725 https://gitlab.gnome.org/GNOME/mutter/merge_requests/722
This commit is contained in:
@@ -39,6 +39,7 @@
|
|||||||
|
|
||||||
typedef struct _MetaMonitorMode
|
typedef struct _MetaMonitorMode
|
||||||
{
|
{
|
||||||
|
MetaMonitor *monitor;
|
||||||
char *id;
|
char *id;
|
||||||
MetaMonitorModeSpec spec;
|
MetaMonitorModeSpec spec;
|
||||||
MetaMonitorCrtcMode *crtc_modes;
|
MetaMonitorCrtcMode *crtc_modes;
|
||||||
@@ -609,6 +610,7 @@ meta_monitor_normal_generate_modes (MetaMonitorNormal *monitor_normal)
|
|||||||
gboolean replace;
|
gboolean replace;
|
||||||
|
|
||||||
mode = g_new0 (MetaMonitorMode, 1);
|
mode = g_new0 (MetaMonitorMode, 1);
|
||||||
|
mode->monitor = monitor;
|
||||||
mode->spec = meta_monitor_create_spec (monitor,
|
mode->spec = meta_monitor_create_spec (monitor,
|
||||||
crtc_mode->width,
|
crtc_mode->width,
|
||||||
crtc_mode->height,
|
crtc_mode->height,
|
||||||
@@ -948,7 +950,7 @@ create_tiled_monitor_mode (MetaMonitorTiled *monitor_tiled,
|
|||||||
mode = g_new0 (MetaMonitorModeTiled, 1);
|
mode = g_new0 (MetaMonitorModeTiled, 1);
|
||||||
mode->is_tiled = TRUE;
|
mode->is_tiled = TRUE;
|
||||||
meta_monitor_tiled_calculate_tiled_size (monitor, &width, &height);
|
meta_monitor_tiled_calculate_tiled_size (monitor, &width, &height);
|
||||||
|
mode->parent.monitor = monitor;
|
||||||
mode->parent.spec =
|
mode->parent.spec =
|
||||||
meta_monitor_create_spec (monitor, width, height, reference_crtc_mode);
|
meta_monitor_create_spec (monitor, width, height, reference_crtc_mode);
|
||||||
mode->parent.id = generate_mode_id (&mode->parent.spec);
|
mode->parent.id = generate_mode_id (&mode->parent.spec);
|
||||||
@@ -1058,8 +1060,8 @@ create_untiled_monitor_mode (MetaMonitorTiled *monitor_tiled,
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
mode = g_new0 (MetaMonitorModeTiled, 1);
|
mode = g_new0 (MetaMonitorModeTiled, 1);
|
||||||
|
|
||||||
mode->is_tiled = FALSE;
|
mode->is_tiled = FALSE;
|
||||||
|
mode->parent.monitor = monitor;
|
||||||
mode->parent.spec = meta_monitor_create_spec (monitor,
|
mode->parent.spec = meta_monitor_create_spec (monitor,
|
||||||
crtc_mode->width,
|
crtc_mode->width,
|
||||||
crtc_mode->height,
|
crtc_mode->height,
|
||||||
@@ -1666,8 +1668,15 @@ is_logical_size_large_enough (int width,
|
|||||||
gboolean
|
gboolean
|
||||||
meta_monitor_mode_should_be_advertised (MetaMonitorMode *monitor_mode)
|
meta_monitor_mode_should_be_advertised (MetaMonitorMode *monitor_mode)
|
||||||
{
|
{
|
||||||
|
MetaMonitorMode *preferred_mode;
|
||||||
|
|
||||||
g_return_val_if_fail (monitor_mode != NULL, FALSE);
|
g_return_val_if_fail (monitor_mode != NULL, FALSE);
|
||||||
|
|
||||||
|
preferred_mode = meta_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,
|
return is_logical_size_large_enough (monitor_mode->spec.width,
|
||||||
monitor_mode->spec.height);
|
monitor_mode->spec.height);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user