Daniel van Vugt has proposed merging
~vanvugt/ubuntu/+source/mutter:fix-lp1847551 into
~ubuntu-desktop/ubuntu/+source/mutter:ubuntu/master.
Commit message:
Add fix-gamma-1cc249fe+1b470979.patch (LP: #1847551)
to fix broken night light and colour profiles.
Requested reviews:
Pierre Equoy (pieq)
Ubuntu Desktop (ubuntu-desktop)
Related bugs:
Bug #1847551 in mutter (Ubuntu): "Mutter 3.34.1 broke Night Light, screen
color profiles in Wayland sessions"
https://bugs.launchpad.net/ubuntu/+source/mutter/+bug/1847551
For more details, see:
https://code.launchpad.net/~vanvugt/ubuntu/+source/mutter/+git/mutter/+merge/374507
Tested. Works.
--
Your team Ubuntu Desktop is requested to review the proposed merge of
~vanvugt/ubuntu/+source/mutter:fix-lp1847551 into
~ubuntu-desktop/ubuntu/+source/mutter:ubuntu/master.
diff --git a/debian/changelog b/debian/changelog
index 06847be..2d01ec3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+mutter (3.34.1-1ubuntu2) UNRELEASED; urgency=medium
+
+ * Add patch fix-gamma-1cc249fe+1b470979.patch to fix broken night light
+ and colour profiles (LP: #1847551)
+
+ -- Daniel van Vugt <[email protected]> Tue, 22 Oct 2019 17:47:58 +0800
+
mutter (3.34.1-1ubuntu1) eoan; urgency=medium
* Merge with debian. Remaining changes:
diff --git a/debian/patches/fix-gamma-1cc249fe+1b470979.patch b/debian/patches/fix-gamma-1cc249fe+1b470979.patch
new file mode 100644
index 0000000..6b149a4
--- /dev/null
+++ b/debian/patches/fix-gamma-1cc249fe+1b470979.patch
@@ -0,0 +1,138 @@
+Description: Fix broken night light and colour profiles in mutter 3.34.1
+Author: Daniel van Vugt <[email protected]>
+Origin: upstream commits 1cc249fe+1b470979
+Bug: https://gitlab.gnome.org/GNOME/mutter/issues/851
+Bug-Ubuntu: https://bugs.launchpad.net/bugs/1847551
+Forwarded: not-needed
+Last-Update: 2019-10-22
+
+diff --git a/src/backends/native/meta-kms-crtc.c b/src/backends/native/meta-kms-crtc.c
+index 3610df903..da99a58cd 100644
+--- a/src/backends/native/meta-kms-crtc.c
++++ b/src/backends/native/meta-kms-crtc.c
+@@ -143,14 +143,26 @@ meta_kms_crtc_update_state (MetaKmsCrtc *crtc)
+ drmModeFreeCrtc (drm_crtc);
+ }
+
++static void
++clear_gamma_state (MetaKmsCrtc *crtc)
++{
++ crtc->current_state.gamma.size = 0;
++ g_clear_pointer (&crtc->current_state.gamma.red, g_free);
++ g_clear_pointer (&crtc->current_state.gamma.green, g_free);
++ g_clear_pointer (&crtc->current_state.gamma.blue, g_free);
++}
++
+ void
+ meta_kms_crtc_predict_state (MetaKmsCrtc *crtc,
+ MetaKmsUpdate *update)
+ {
++ gboolean is_gamma_valid;
+ GList *mode_sets;
+ GList *crtc_gammas;
+ GList *l;
+
++ is_gamma_valid = TRUE;
++
+ mode_sets = meta_kms_update_get_mode_sets (update);
+ for (l = mode_sets; l; l = l->next)
+ {
+@@ -178,6 +190,8 @@ meta_kms_crtc_predict_state (MetaKmsCrtc *crtc,
+ crtc->current_state.drm_mode = (drmModeModeInfo) { 0 };
+ }
+
++ is_gamma_valid = FALSE;
++
+ break;
+ }
+
+@@ -196,8 +210,36 @@ meta_kms_crtc_predict_state (MetaKmsCrtc *crtc,
+ g_memdup (gamma->green, gamma->size * sizeof (uint16_t));
+ crtc->current_state.gamma.blue =
+ g_memdup (gamma->blue, gamma->size * sizeof (uint16_t));
++
++ is_gamma_valid = TRUE;
+ break;
+ }
++
++ if (!is_gamma_valid)
++ {
++ if (crtc->current_state.is_drm_mode_valid)
++ {
++ MetaKmsImplDevice *impl_device;
++ drmModeCrtc *drm_crtc;
++
++ impl_device = meta_kms_device_get_impl_device (crtc->device);
++ drm_crtc = drmModeGetCrtc (meta_kms_impl_device_get_fd (impl_device),
++ crtc->id);
++ if (drm_crtc)
++ {
++ read_gamma_state (crtc, impl_device, drm_crtc);
++ drmModeFreeCrtc (drm_crtc);
++ }
++ else
++ {
++ clear_gamma_state (crtc);
++ }
++ }
++ else
++ {
++ clear_gamma_state (crtc);
++ }
++ }
+ }
+
+ MetaKmsCrtc *
+@@ -220,9 +262,7 @@ meta_kms_crtc_finalize (GObject *object)
+ {
+ MetaKmsCrtc *crtc = META_KMS_CRTC (object);
+
+- g_clear_pointer (&crtc->current_state.gamma.red, g_free);
+- g_clear_pointer (&crtc->current_state.gamma.green, g_free);
+- g_clear_pointer (&crtc->current_state.gamma.blue, g_free);
++ clear_gamma_state (crtc);
+
+ G_OBJECT_CLASS (meta_kms_crtc_parent_class)->finalize (object);
+ }
+diff --git a/src/backends/native/meta-kms-update-private.h b/src/backends/native/meta-kms-update-private.h
+index 88e2590af..df7737c9b 100644
+--- a/src/backends/native/meta-kms-update-private.h
++++ b/src/backends/native/meta-kms-update-private.h
+@@ -110,6 +110,4 @@ GList * meta_kms_update_get_connector_properties (MetaKmsUpdate *update);
+
+ GList * meta_kms_update_get_crtc_gammas (MetaKmsUpdate *update);
+
+-gboolean meta_kms_update_has_mode_set (MetaKmsUpdate *update);
+-
+ #endif /* META_KMS_UPDATE_PRIVATE_H */
+diff --git a/src/backends/native/meta-kms-update.c b/src/backends/native/meta-kms-update.c
+index 2a4a05c3e..c946aa7a2 100644
+--- a/src/backends/native/meta-kms-update.c
++++ b/src/backends/native/meta-kms-update.c
+@@ -282,12 +282,6 @@ meta_kms_update_get_crtc_gammas (MetaKmsUpdate *update)
+ return update->crtc_gammas;
+ }
+
+-gboolean
+-meta_kms_update_has_mode_set (MetaKmsUpdate *update)
+-{
+- return !!update->mode_sets;
+-}
+-
+ void
+ meta_kms_update_seal (MetaKmsUpdate *update)
+ {
+diff --git a/src/backends/native/meta-kms.c b/src/backends/native/meta-kms.c
+index 9485bb4e8..804a1adda 100644
+--- a/src/backends/native/meta-kms.c
++++ b/src/backends/native/meta-kms.c
+@@ -211,8 +211,7 @@ meta_kms_update_process_in_impl (MetaKmsImpl *impl,
+
+ ret = meta_kms_impl_process_update (impl, update, error);
+
+- if (meta_kms_update_has_mode_set (update))
+- meta_kms_predict_states_in_impl (meta_kms_impl_get_kms (impl), update);
++ meta_kms_predict_states_in_impl (meta_kms_impl_get_kms (impl), update);
+
+ return ret;
+ }
diff --git a/debian/patches/series b/debian/patches/series
index 8590a4e..e12ca3f 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -4,3 +4,4 @@ meson-add-back-default_driver-option.patch
x11-Add-support-for-fractional-scaling-using-Randr.patch
debian/synaptics-support.patch
debian/tests-Tag-closed-transient-no-input-tests-as-flaky.patch
+fix-gamma-1cc249fe+1b470979.patch
--
ubuntu-desktop mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-desktop