diff --git a/src/backends/meta-crtc.c b/src/backends/meta-crtc.c index bca008ea9..71b9bcbe9 100644 --- a/src/backends/meta-crtc.c +++ b/src/backends/meta-crtc.c @@ -130,6 +130,10 @@ void meta_crtc_unset_config (MetaCrtc *crtc) { MetaCrtcPrivate *priv = meta_crtc_get_instance_private (crtc); + MetaCrtcClass *klass = META_CRTC_GET_CLASS (crtc); + + if (klass->unset_config) + klass->unset_config (crtc); g_clear_pointer (&priv->config, g_free); } diff --git a/src/backends/meta-crtc.h b/src/backends/meta-crtc.h index 68ff58ea8..3c6abfe35 100644 --- a/src/backends/meta-crtc.h +++ b/src/backends/meta-crtc.h @@ -56,6 +56,8 @@ struct _MetaCrtcClass const MetaCrtcConfig *config, gpointer backend_private); + void (* unset_config) (MetaCrtc *crtc); + gboolean (* is_leased) (MetaCrtc *crtc); }; diff --git a/src/backends/native/meta-crtc-kms.c b/src/backends/native/meta-crtc-kms.c index 1b426d76d..2d2deab1b 100644 --- a/src/backends/native/meta-crtc-kms.c +++ b/src/backends/native/meta-crtc-kms.c @@ -206,6 +206,15 @@ meta_crtc_kms_set_gamma_lut (MetaCrtc *crtc, clutter_stage_schedule_update (CLUTTER_STAGE (stage)); } +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); +} + typedef struct _CrtcKmsAssignment { MetaKmsPlane *primary_plane; @@ -326,13 +335,16 @@ 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) +static void +meta_crtc_kms_unset_config (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); + if (meta_crtc_kms_is_leased (crtc)) + return; + + crtc_kms->assigned_primary_plane = NULL; + crtc_kms->assigned_cursor_plane = NULL; } static gboolean @@ -485,6 +497,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->unset_config = meta_crtc_kms_unset_config; crtc_class->is_leased = meta_crtc_kms_is_leased; crtc_native_class->is_transform_handled = meta_crtc_kms_is_transform_handled;