mirror of
https://github.com/brl/mutter.git
synced 2025-02-23 16:34:10 +00:00
monitor: Allow vendor/product/serial to return NULL
Same applies to MetaOutput. The reason for this is to make it possible to more reliably know when there was EDID telling us about these details. This will be used for colord integration. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2141>
This commit is contained in:
parent
f939a7ca29
commit
ccb6a7e84f
@ -306,25 +306,34 @@ match_edid (MetaMapperInputInfo *input,
|
|||||||
MetaMonitor *monitor,
|
MetaMonitor *monitor,
|
||||||
MetaOutputMatchType *match_type)
|
MetaOutputMatchType *match_type)
|
||||||
{
|
{
|
||||||
const gchar *dev_name;
|
const char *dev_name;
|
||||||
|
const char *vendor;
|
||||||
|
const char *serial;
|
||||||
|
|
||||||
dev_name = clutter_input_device_get_device_name (input->device);
|
dev_name = clutter_input_device_get_device_name (input->device);
|
||||||
|
|
||||||
if (strcasestr (dev_name, meta_monitor_get_vendor (monitor)) == NULL)
|
vendor = meta_monitor_get_vendor (monitor);
|
||||||
|
if (!vendor || strcasestr (dev_name, vendor) == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
*match_type = META_MATCH_EDID_VENDOR;
|
*match_type = META_MATCH_EDID_VENDOR;
|
||||||
|
|
||||||
if (strcasestr (dev_name, meta_monitor_get_product (monitor)) != NULL)
|
serial = meta_monitor_get_serial (monitor);
|
||||||
|
if (!serial || strcasestr (dev_name, serial) != NULL)
|
||||||
{
|
{
|
||||||
*match_type = META_MATCH_EDID_FULL;
|
*match_type = META_MATCH_EDID_FULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int i;
|
const char *product;
|
||||||
g_auto (GStrv) split = NULL;
|
|
||||||
|
|
||||||
split = g_strsplit (meta_monitor_get_product (monitor), " ", -1);
|
product = meta_monitor_get_product (monitor);
|
||||||
|
if (product)
|
||||||
|
{
|
||||||
|
g_auto (GStrv) split = NULL;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
split = g_strsplit (product, " ", -1);
|
||||||
|
|
||||||
for (i = 0; split[i]; i++)
|
for (i = 0; split[i]; i++)
|
||||||
{
|
{
|
||||||
@ -335,6 +344,7 @@ match_edid (MetaMapperInputInfo *input,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1688,6 +1688,9 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
|
|||||||
gboolean is_underscanning;
|
gboolean is_underscanning;
|
||||||
gboolean supports_underscanning;
|
gboolean supports_underscanning;
|
||||||
gboolean supports_color_transform;
|
gboolean supports_color_transform;
|
||||||
|
const char *vendor;
|
||||||
|
const char *product;
|
||||||
|
const char *serial;
|
||||||
|
|
||||||
g_variant_builder_init (&crtcs, G_VARIANT_TYPE ("au"));
|
g_variant_builder_init (&crtcs, G_VARIANT_TYPE ("au"));
|
||||||
for (j = 0; j < output_info->n_possible_crtcs; j++)
|
for (j = 0; j < output_info->n_possible_crtcs; j++)
|
||||||
@ -1729,14 +1732,17 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
|
|||||||
connector_type_name = get_connector_type_name (output_info->connector_type);
|
connector_type_name = get_connector_type_name (output_info->connector_type);
|
||||||
supports_underscanning = output_info->supports_underscanning;
|
supports_underscanning = output_info->supports_underscanning;
|
||||||
supports_color_transform = output_info->supports_color_transform;
|
supports_color_transform = output_info->supports_color_transform;
|
||||||
|
vendor = output_info->vendor;
|
||||||
|
product = output_info->product;;
|
||||||
|
serial = output_info->serial;
|
||||||
|
|
||||||
g_variant_builder_init (&properties, G_VARIANT_TYPE ("a{sv}"));
|
g_variant_builder_init (&properties, G_VARIANT_TYPE ("a{sv}"));
|
||||||
g_variant_builder_add (&properties, "{sv}", "vendor",
|
g_variant_builder_add (&properties, "{sv}", "vendor",
|
||||||
g_variant_new_string (output_info->vendor));
|
g_variant_new_string (vendor ? vendor : "unknown"));
|
||||||
g_variant_builder_add (&properties, "{sv}", "product",
|
g_variant_builder_add (&properties, "{sv}", "product",
|
||||||
g_variant_new_string (output_info->product));
|
g_variant_new_string (product ? product : "unknown"));
|
||||||
g_variant_builder_add (&properties, "{sv}", "serial",
|
g_variant_builder_add (&properties, "{sv}", "serial",
|
||||||
g_variant_new_string (output_info->serial));
|
g_variant_new_string (serial ? serial : "unknown"));
|
||||||
g_variant_builder_add (&properties, "{sv}", "width-mm",
|
g_variant_builder_add (&properties, "{sv}", "width-mm",
|
||||||
g_variant_new_int32 (output_info->width_mm));
|
g_variant_new_int32 (output_info->width_mm));
|
||||||
g_variant_builder_add (&properties, "{sv}", "height-mm",
|
g_variant_builder_add (&properties, "{sv}", "height-mm",
|
||||||
|
@ -194,13 +194,20 @@ meta_monitor_generate_spec (MetaMonitor *monitor)
|
|||||||
const MetaOutputInfo *output_info =
|
const MetaOutputInfo *output_info =
|
||||||
meta_monitor_get_main_output_info (monitor);
|
meta_monitor_get_main_output_info (monitor);
|
||||||
MetaMonitorSpec *monitor_spec;
|
MetaMonitorSpec *monitor_spec;
|
||||||
|
const char *vendor;
|
||||||
|
const char *product;
|
||||||
|
const char *serial;
|
||||||
|
|
||||||
|
vendor = output_info->vendor;
|
||||||
|
product = output_info->product;
|
||||||
|
serial = output_info->serial;
|
||||||
|
|
||||||
monitor_spec = g_new0 (MetaMonitorSpec, 1);
|
monitor_spec = g_new0 (MetaMonitorSpec, 1);
|
||||||
*monitor_spec = (MetaMonitorSpec) {
|
*monitor_spec = (MetaMonitorSpec) {
|
||||||
.connector = g_strdup (output_info->name),
|
.connector = g_strdup (output_info->name),
|
||||||
.vendor = g_strdup (output_info->vendor),
|
.vendor = g_strdup (vendor ? vendor : "unknown"),
|
||||||
.product = g_strdup (output_info->product),
|
.product = g_strdup (product ? product : "unknown"),
|
||||||
.serial = g_strdup (output_info->serial),
|
.serial = g_strdup (serial ? serial : "unknown"),
|
||||||
};
|
};
|
||||||
|
|
||||||
priv->spec = monitor_spec;
|
priv->spec = monitor_spec;
|
||||||
@ -260,8 +267,7 @@ meta_monitor_make_display_name (MetaMonitor *monitor,
|
|||||||
}
|
}
|
||||||
|
|
||||||
vendor = meta_monitor_get_vendor (monitor);
|
vendor = meta_monitor_get_vendor (monitor);
|
||||||
|
if (vendor)
|
||||||
if (g_strcmp0 (vendor, "unknown") != 0)
|
|
||||||
{
|
{
|
||||||
vendor_name = meta_monitor_manager_get_vendor_name (monitor_manager,
|
vendor_name = meta_monitor_manager_get_vendor_name (monitor_manager,
|
||||||
vendor);
|
vendor);
|
||||||
|
@ -313,8 +313,7 @@ meta_output_info_parse_edid (MetaOutputInfo *output_info,
|
|||||||
size_t len;
|
size_t len;
|
||||||
gconstpointer data;
|
gconstpointer data;
|
||||||
|
|
||||||
if (!edid)
|
g_return_if_fail (edid);
|
||||||
goto out;
|
|
||||||
|
|
||||||
data = g_bytes_get_data (edid, &len);
|
data = g_bytes_get_data (edid, &len);
|
||||||
parsed_edid = meta_edid_info_new_parse (data);
|
parsed_edid = meta_edid_info_new_parse (data);
|
||||||
@ -346,14 +345,6 @@ meta_output_info_parse_edid (MetaOutputInfo *output_info,
|
|||||||
|
|
||||||
g_free (parsed_edid);
|
g_free (parsed_edid);
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
|
||||||
if (!output_info->vendor)
|
|
||||||
output_info->vendor = g_strdup ("unknown");
|
|
||||||
if (!output_info->product)
|
|
||||||
output_info->product = g_strdup ("unknown");
|
|
||||||
if (!output_info->serial)
|
|
||||||
output_info->serial = g_strdup ("unknown");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
|
@ -483,6 +483,7 @@ meta_output_kms_new (MetaGpuKms *gpu_kms,
|
|||||||
output_info->max_bpc_max = max_bpc_range->max_value;
|
output_info->max_bpc_max = max_bpc_range->max_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (connector_state->edid_data)
|
||||||
meta_output_info_parse_edid (output_info, connector_state->edid_data);
|
meta_output_info_parse_edid (output_info, connector_state->edid_data);
|
||||||
|
|
||||||
output_info->tile_info = connector_state->tile_info;
|
output_info->tile_info = connector_state->tile_info;
|
||||||
|
@ -970,8 +970,11 @@ meta_output_xrandr_new (MetaGpuXrandr *gpu_xrandr,
|
|||||||
output_info->name = g_strdup (xrandr_output->name);
|
output_info->name = g_strdup (xrandr_output->name);
|
||||||
|
|
||||||
edid = read_xrandr_edid (xdisplay, output_id);
|
edid = read_xrandr_edid (xdisplay, output_id);
|
||||||
|
if (edid)
|
||||||
|
{
|
||||||
meta_output_info_parse_edid (output_info, edid);
|
meta_output_info_parse_edid (output_info, edid);
|
||||||
g_bytes_unref (edid);
|
g_bytes_unref (edid);
|
||||||
|
}
|
||||||
|
|
||||||
output_info->subpixel_order = COGL_SUBPIXEL_ORDER_UNKNOWN;
|
output_info->subpixel_order = COGL_SUBPIXEL_ORDER_UNKNOWN;
|
||||||
output_info->hotplug_mode_update = output_get_hotplug_mode_update (xdisplay,
|
output_info->hotplug_mode_update = output_get_hotplug_mode_update (xdisplay,
|
||||||
|
@ -415,12 +415,18 @@ meta_pad_action_mapper_cycle_tablet_output (MetaPadActionMapper *mapper,
|
|||||||
if (logical_monitor)
|
if (logical_monitor)
|
||||||
{
|
{
|
||||||
MetaMonitor *monitor;
|
MetaMonitor *monitor;
|
||||||
|
const char *vendor;
|
||||||
|
const char *product;
|
||||||
|
const char *serial;
|
||||||
|
|
||||||
/* Pick an arbitrary monitor in the logical monitor to represent it. */
|
/* Pick an arbitrary monitor in the logical monitor to represent it. */
|
||||||
monitor = meta_logical_monitor_get_monitors (logical_monitor)->data;
|
monitor = meta_logical_monitor_get_monitors (logical_monitor)->data;
|
||||||
edid[0] = meta_monitor_get_vendor (monitor);
|
vendor = meta_monitor_get_vendor (monitor);
|
||||||
edid[1] = meta_monitor_get_product (monitor);
|
product = meta_monitor_get_product (monitor);
|
||||||
edid[2] = meta_monitor_get_serial (monitor);
|
serial = meta_monitor_get_serial (monitor);
|
||||||
|
edid[0] = vendor ? vendor : "";
|
||||||
|
edid[1] = product ? product : "";
|
||||||
|
edid[2] = serial ? serial : "";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -238,8 +238,8 @@ send_output_events (struct wl_resource *resource,
|
|||||||
width_mm,
|
width_mm,
|
||||||
height_mm,
|
height_mm,
|
||||||
subpixel_order,
|
subpixel_order,
|
||||||
vendor,
|
vendor ? vendor : "unknown",
|
||||||
product,
|
product ? product : "unknown",
|
||||||
wl_transform);
|
wl_transform);
|
||||||
need_done = TRUE;
|
need_done = TRUE;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user