meta-monitor-config: Pass logical monitor scale via config

The default (calculated) scale is derived from the output, but
ultimately set via the monitor scale. This will enable config files to
override the scale. Yet to be done is handling when a scale is not
supported by a backend (i.e. the X11 backend).

https://bugzilla.gnome.org/show_bug.cgi?id=777732
This commit is contained in:
Jonas Ådahl 2017-01-19 17:23:48 +08:00
parent 409c92a68f
commit 753e9c65a1
6 changed files with 28 additions and 1 deletions

View File

@ -78,7 +78,7 @@ meta_logical_monitor_new (MetaMonitorManager *monitor_manager,
logical_monitor->number = monitor_number;
logical_monitor->winsys_id = main_output->winsys_id;
logical_monitor->scale = main_output->scale;
logical_monitor->scale = logical_monitor_config->scale,
logical_monitor->in_fullscreen = -1;
logical_monitor->rect = logical_monitor_config->layout;

View File

@ -467,11 +467,14 @@ create_preferred_logical_monitor_config (MetaMonitor *monitor,
{
MetaMonitorMode *mode;
int width, height;
int scale;
MetaMonitorConfig *monitor_config;
MetaLogicalMonitorConfig *logical_monitor_config;
mode = meta_monitor_get_preferred_mode (monitor);
meta_monitor_mode_get_resolution (mode, &width, &height);
scale = meta_monitor_get_calculated_scale (monitor);
monitor_config = create_monitor_config (monitor, mode);
logical_monitor_config = g_new0 (MetaLogicalMonitorConfig, 1);
@ -482,6 +485,7 @@ create_preferred_logical_monitor_config (MetaMonitor *monitor,
.width = width,
.height = height
},
.scale = scale,
.monitor_configs = g_list_append (NULL, monitor_config)
};

View File

@ -40,6 +40,7 @@ typedef struct _MetaLogicalMonitorConfig
{
MetaRectangle layout;
GList *monitor_configs;
int scale;
gboolean is_primary;
gboolean is_presentation;
} MetaLogicalMonitorConfig;

View File

@ -405,6 +405,14 @@ static gboolean
verify_logical_monitor_config (MetaLogicalMonitorConfig *logical_monitor_config,
GError **error)
{
if (logical_monitor_config->scale < 1)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Invalid logical monitor config scale %d",
logical_monitor_config->scale);
return FALSE;
}
if (logical_monitor_config->layout.x < 0 ||
logical_monitor_config->layout.y < 0)
{
@ -614,6 +622,8 @@ handle_end_element (GMarkupParseContext *context,
g_assert (g_str_equal (element_name, "logicalmonitor"));
logical_monitor_config->scale = 1;
if (!verify_logical_monitor_config (logical_monitor_config, error))
return;

View File

@ -196,6 +196,16 @@ meta_monitor_is_underscanning (MetaMonitor *monitor)
return output->is_underscanning;
}
int
meta_monitor_get_calculated_scale (MetaMonitor *monitor)
{
MetaOutput *output;
output = meta_monitor_get_main_output (monitor);
return output->scale;
}
gboolean
meta_monitor_is_laptop_panel (MetaMonitor *monitor)
{

View File

@ -97,6 +97,8 @@ gboolean meta_monitor_is_underscanning (MetaMonitor *monitor);
gboolean meta_monitor_is_laptop_panel (MetaMonitor *monitor);
int meta_monitor_get_calculated_scale (MetaMonitor *monitor);
GList * meta_monitor_get_outputs (MetaMonitor *monitor);
void meta_monitor_get_current_resolution (MetaMonitor *monitor,