compositor-drm: check connector non-desktop property and mark head accordingly

Use the DRM connector "non-desktop" property to mark weston_heads that
represent head mounted displays and other non-standard displays that the
desktop should not be extended to.

Signed-off-by: Philipp Zabel <philipp.zabel@gmail.com>
dev
Philipp Zabel 7 years ago committed by Daniel Stone
parent c18ffd3939
commit 61dc4ca92e
  1. 13
      libweston/compositor-drm.c

@ -217,6 +217,7 @@ enum wdrm_connector_property {
WDRM_CONNECTOR_EDID = 0, WDRM_CONNECTOR_EDID = 0,
WDRM_CONNECTOR_DPMS, WDRM_CONNECTOR_DPMS,
WDRM_CONNECTOR_CRTC_ID, WDRM_CONNECTOR_CRTC_ID,
WDRM_CONNECTOR_NON_DESKTOP,
WDRM_CONNECTOR__COUNT WDRM_CONNECTOR__COUNT
}; };
@ -251,6 +252,7 @@ static const struct drm_property_info connector_props[] = {
.num_enum_values = WDRM_DPMS_STATE__COUNT, .num_enum_values = WDRM_DPMS_STATE__COUNT,
}, },
[WDRM_CONNECTOR_CRTC_ID] = { .name = "CRTC_ID", }, [WDRM_CONNECTOR_CRTC_ID] = { .name = "CRTC_ID", },
[WDRM_CONNECTOR_NON_DESKTOP] = { .name = "non-desktop", },
}; };
/** /**
@ -5159,6 +5161,15 @@ find_and_parse_output_edid(struct drm_head *head,
drmModeFreePropertyBlob(edid_blob); drmModeFreePropertyBlob(edid_blob);
} }
static bool
check_non_desktop(struct drm_head *head, drmModeObjectPropertiesPtr props)
{
struct drm_property_info *non_desktop_info =
&head->props_conn[WDRM_CONNECTOR_NON_DESKTOP];
return drm_property_get_value(non_desktop_info, props, 0);
}
static int static int
parse_modeline(const char *s, drmModeModeInfo *mode) parse_modeline(const char *s, drmModeModeInfo *mode)
{ {
@ -6147,6 +6158,8 @@ drm_head_assign_connector_info(struct drm_head *head,
WDRM_CONNECTOR__COUNT, props); WDRM_CONNECTOR__COUNT, props);
find_and_parse_output_edid(head, props, &make, &model, &serial_number); find_and_parse_output_edid(head, props, &make, &model, &serial_number);
weston_head_set_monitor_strings(&head->base, make, model, serial_number); weston_head_set_monitor_strings(&head->base, make, model, serial_number);
weston_head_set_non_desktop(&head->base,
check_non_desktop(head, props));
weston_head_set_subpixel(&head->base, weston_head_set_subpixel(&head->base,
drm_subpixel_to_wayland(head->connector->subpixel)); drm_subpixel_to_wayland(head->connector->subpixel));

Loading…
Cancel
Save