mirror of
https://github.com/brl/mutter.git
synced 2025-04-09 19:59:38 +00:00
monitor-manager-dummy: Allow to pass extra monitor specs via env
Add MUTTER_DEBUG_DUMMY_MONITORS_SPECS env variable support so that you can define a ':' separated list of monitor specs in the form of WWWxHHH@RR that will be available for configuring the nested mutter.
This commit is contained in:
parent
4baefe46b3
commit
7821256f5c
@ -80,6 +80,7 @@ typedef struct _CrtcModeSpec
|
|||||||
int height;
|
int height;
|
||||||
float refresh_rate;
|
float refresh_rate;
|
||||||
} CrtcModeSpec;
|
} CrtcModeSpec;
|
||||||
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC(CrtcModeSpec, g_free);
|
||||||
|
|
||||||
static MetaCrtcMode *
|
static MetaCrtcMode *
|
||||||
create_mode (CrtcModeSpec *spec,
|
create_mode (CrtcModeSpec *spec,
|
||||||
@ -106,7 +107,7 @@ append_monitor (MetaMonitorManager *manager,
|
|||||||
{
|
{
|
||||||
MetaMonitorManagerDummy *manager_dummy = META_MONITOR_MANAGER_DUMMY (manager);
|
MetaMonitorManagerDummy *manager_dummy = META_MONITOR_MANAGER_DUMMY (manager);
|
||||||
MetaGpu *gpu = manager_dummy->gpu;
|
MetaGpu *gpu = manager_dummy->gpu;
|
||||||
CrtcModeSpec mode_specs[] = {
|
CrtcModeSpec default_specs[] = {
|
||||||
{
|
{
|
||||||
.width = 800,
|
.width = 800,
|
||||||
.height = 600,
|
.height = 600,
|
||||||
@ -116,25 +117,77 @@ append_monitor (MetaMonitorManager *manager,
|
|||||||
.width = 1024,
|
.width = 1024,
|
||||||
.height = 768,
|
.height = 768,
|
||||||
.refresh_rate = 60.0
|
.refresh_rate = 60.0
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
.width = 1440,
|
||||||
|
.height = 900,
|
||||||
|
.refresh_rate = 60.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.width = 1600,
|
||||||
|
.height = 920,
|
||||||
|
.refresh_rate = 60.0
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
g_autolist (CrtcModeSpec) mode_specs = NULL;
|
||||||
|
unsigned int n_mode_specs = 0;
|
||||||
GList *new_modes = NULL;
|
GList *new_modes = NULL;
|
||||||
MetaCrtc *crtc;
|
MetaCrtc *crtc;
|
||||||
MetaOutputDummy *output_dummy;
|
MetaOutputDummy *output_dummy;
|
||||||
MetaOutput *output;
|
MetaOutput *output;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
unsigned int number;
|
unsigned int number;
|
||||||
|
const char *mode_specs_str;
|
||||||
GList *l;
|
GList *l;
|
||||||
|
|
||||||
for (i = 0; i < G_N_ELEMENTS (mode_specs); i++)
|
for (i = 0; i < G_N_ELEMENTS (default_specs); i++)
|
||||||
{
|
{
|
||||||
|
CrtcModeSpec *spec;
|
||||||
|
|
||||||
|
spec = g_memdup (&default_specs[i], sizeof (CrtcModeSpec));
|
||||||
|
mode_specs = g_list_prepend (mode_specs, spec);
|
||||||
|
}
|
||||||
|
|
||||||
|
mode_specs_str = getenv ("MUTTER_DEBUG_DUMMY_MONITORS_SPECS");
|
||||||
|
if (mode_specs_str && *mode_specs_str != '\0')
|
||||||
|
{
|
||||||
|
g_auto (GStrv) specs = g_strsplit (mode_specs_str, ":", -1);
|
||||||
|
for (i = 0; specs[i]; ++i)
|
||||||
|
{
|
||||||
|
int width, height;
|
||||||
|
float refresh_rate = 60.0;
|
||||||
|
|
||||||
|
if (sscanf (specs[i], "%dx%d@%f",
|
||||||
|
&width, &height, &refresh_rate) == 3 ||
|
||||||
|
sscanf (specs[i], "%dx%d",
|
||||||
|
&width, &height) == 2)
|
||||||
|
{
|
||||||
|
CrtcModeSpec *spec;
|
||||||
|
|
||||||
|
if (width < META_MONITOR_MANAGER_MIN_SCREEN_WIDTH ||
|
||||||
|
height < META_MONITOR_MANAGER_MIN_SCREEN_HEIGHT)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
spec = g_new0 (CrtcModeSpec, 1);
|
||||||
|
spec->width = width;
|
||||||
|
spec->height = height;
|
||||||
|
spec->refresh_rate = refresh_rate;
|
||||||
|
mode_specs = g_list_prepend (mode_specs, spec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (l = mode_specs; l; l = l->next)
|
||||||
|
{
|
||||||
|
CrtcModeSpec *spec = l->data;
|
||||||
long mode_id;
|
long mode_id;
|
||||||
MetaCrtcMode *mode;
|
MetaCrtcMode *mode;
|
||||||
|
|
||||||
mode_id = g_list_length (*modes) + i + 1;
|
mode_id = g_list_length (*modes) + n_mode_specs + 1;
|
||||||
mode = create_mode (&mode_specs[i], mode_id);
|
mode = create_mode (spec, mode_id);
|
||||||
|
|
||||||
new_modes = g_list_append (new_modes, mode);
|
new_modes = g_list_append (new_modes, mode);
|
||||||
|
n_mode_specs++;
|
||||||
}
|
}
|
||||||
*modes = g_list_concat (*modes, new_modes);
|
*modes = g_list_concat (*modes, new_modes);
|
||||||
|
|
||||||
@ -171,14 +224,14 @@ append_monitor (MetaMonitorManager *manager,
|
|||||||
output->driver_notify =
|
output->driver_notify =
|
||||||
(GDestroyNotify) meta_output_dummy_notify_destroy;
|
(GDestroyNotify) meta_output_dummy_notify_destroy;
|
||||||
|
|
||||||
output->modes = g_new0 (MetaCrtcMode *, G_N_ELEMENTS (mode_specs));
|
output->modes = g_new0 (MetaCrtcMode *, n_mode_specs);
|
||||||
for (l = new_modes, i = 0; l; l = l->next, i++)
|
for (l = new_modes, i = 0; l; l = l->next, i++)
|
||||||
{
|
{
|
||||||
MetaCrtcMode *mode = l->data;
|
MetaCrtcMode *mode = l->data;
|
||||||
|
|
||||||
output->modes[i] = mode;
|
output->modes[i] = mode;
|
||||||
}
|
}
|
||||||
output->n_modes = G_N_ELEMENTS (mode_specs);
|
output->n_modes = n_mode_specs;
|
||||||
output->possible_crtcs = g_new0 (MetaCrtc *, 1);
|
output->possible_crtcs = g_new0 (MetaCrtc *, 1);
|
||||||
output->possible_crtcs[0] = g_list_last (*crtcs)->data;
|
output->possible_crtcs[0] = g_list_last (*crtcs)->data;
|
||||||
output->n_possible_crtcs = 1;
|
output->n_possible_crtcs = 1;
|
||||||
@ -339,6 +392,12 @@ meta_monitor_manager_dummy_read_current (MetaMonitorManager *manager)
|
|||||||
* Specifies the number of dummy monitors to include in the stage. Every
|
* Specifies the number of dummy monitors to include in the stage. Every
|
||||||
* monitor is 1024x786 pixels and they are placed on a horizontal row.
|
* monitor is 1024x786 pixels and they are placed on a horizontal row.
|
||||||
*
|
*
|
||||||
|
* MUTTER_DEBUG_DUMMY_MONITORS_SPECS
|
||||||
|
*
|
||||||
|
* A colon separated list of monitor specifications that can be used to
|
||||||
|
* configure the monitor via dbus API.
|
||||||
|
* Format should be WWxHH:WWxHH@RR
|
||||||
|
*
|
||||||
* MUTTER_DEBUG_DUMMY_MONITOR_SCALES
|
* MUTTER_DEBUG_DUMMY_MONITOR_SCALES
|
||||||
*
|
*
|
||||||
* A comma separated list that specifies the scales of the dummy monitors.
|
* A comma separated list that specifies the scales of the dummy monitors.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user