diff --git a/src/backends/meta-crtc.c b/src/backends/meta-crtc.c index 646a508b9..bca008ea9 100644 --- a/src/backends/meta-crtc.c +++ b/src/backends/meta-crtc.c @@ -470,3 +470,14 @@ meta_crtc_config_new (graphene_rect_t *layout, return config; } + +gboolean +meta_crtc_is_leased (MetaCrtc *crtc) +{ + MetaCrtcClass *klass = META_CRTC_GET_CLASS (crtc); + + if (klass->is_leased) + return klass->is_leased (crtc); + else + return FALSE; +} diff --git a/src/backends/meta-crtc.h b/src/backends/meta-crtc.h index 0b1eb8b67..68ff58ea8 100644 --- a/src/backends/meta-crtc.h +++ b/src/backends/meta-crtc.h @@ -55,6 +55,8 @@ struct _MetaCrtcClass void (* set_config) (MetaCrtc *crtc, const MetaCrtcConfig *config, gpointer backend_private); + + gboolean (* is_leased) (MetaCrtc *crtc); }; META_EXPORT_TEST @@ -132,4 +134,6 @@ MetaCrtcConfig * meta_crtc_config_new (graphene_rect_t *layout, MetaCrtcMode *mode, MetaMonitorTransform transform); +gboolean meta_crtc_is_leased (MetaCrtc *crtc); + G_DEFINE_AUTOPTR_CLEANUP_FUNC (MetaGammaLut, meta_gamma_lut_free) diff --git a/src/backends/meta-monitor-config-manager.c b/src/backends/meta-monitor-config-manager.c index e8294a660..efc48d45e 100644 --- a/src/backends/meta-monitor-config-manager.c +++ b/src/backends/meta-monitor-config-manager.c @@ -99,6 +99,9 @@ is_crtc_assigned (MetaCrtc *crtc, { unsigned int i; + if (meta_crtc_is_leased (crtc)) + return TRUE; + for (i = 0; i < crtc_assignments->len; i++) { MetaCrtcAssignment *assigned_crtc_assignment = diff --git a/src/backends/native/meta-crtc-kms.c b/src/backends/native/meta-crtc-kms.c index 3498f922a..1b426d76d 100644 --- a/src/backends/native/meta-crtc-kms.c +++ b/src/backends/native/meta-crtc-kms.c @@ -326,6 +326,15 @@ meta_crtc_kms_set_config (MetaCrtc *crtc, crtc_kms->assigned_cursor_plane = kms_assignment->cursor_plane; } +static gboolean +meta_crtc_kms_is_leased (MetaCrtc *crtc) +{ + MetaCrtcKms *crtc_kms = META_CRTC_KMS (crtc); + MetaKmsCrtc *kms_crtc = meta_crtc_kms_get_kms_crtc (crtc_kms); + + return meta_kms_crtc_is_leased (kms_crtc); +} + static gboolean meta_crtc_kms_is_transform_handled (MetaCrtcNative *crtc_native, MetaMonitorTransform transform) @@ -476,6 +485,7 @@ meta_crtc_kms_class_init (MetaCrtcKmsClass *klass) crtc_class->set_gamma_lut = meta_crtc_kms_set_gamma_lut; crtc_class->assign_extra = meta_crtc_kms_assign_extra; crtc_class->set_config = meta_crtc_kms_set_config; + crtc_class->is_leased = meta_crtc_kms_is_leased; crtc_native_class->is_transform_handled = meta_crtc_kms_is_transform_handled; crtc_native_class->is_hw_cursor_supported = meta_crtc_kms_is_hw_cursor_supported; diff --git a/src/backends/native/meta-kms-crtc.c b/src/backends/native/meta-kms-crtc.c index a0872089a..6ca1c08d3 100644 --- a/src/backends/native/meta-kms-crtc.c +++ b/src/backends/native/meta-kms-crtc.c @@ -50,6 +50,8 @@ struct _MetaKmsCrtc MetaKmsCrtcState current_state; MetaKmsCrtcPropTable prop_table; + + gboolean is_leased; }; G_DEFINE_TYPE (MetaKmsCrtc, meta_kms_crtc, G_TYPE_OBJECT) @@ -107,6 +109,12 @@ meta_kms_crtc_is_active (MetaKmsCrtc *crtc) return crtc->current_state.is_active; } +gboolean +meta_kms_crtc_is_leased (MetaKmsCrtc *crtc) +{ + return crtc->is_leased; +} + static void read_crtc_gamma (MetaKmsCrtc *crtc, MetaKmsCrtcState *crtc_state, diff --git a/src/backends/native/meta-kms-crtc.h b/src/backends/native/meta-kms-crtc.h index 580ee9a89..af6538cd3 100644 --- a/src/backends/native/meta-kms-crtc.h +++ b/src/backends/native/meta-kms-crtc.h @@ -65,3 +65,5 @@ int meta_kms_crtc_get_idx (MetaKmsCrtc *crtc); META_EXPORT_TEST gboolean meta_kms_crtc_is_active (MetaKmsCrtc *crtc); + +gboolean meta_kms_crtc_is_leased (MetaKmsCrtc *crtc);