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 <daniel.van.v...@canonical.com>  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 <daniel.van.v...@canonical.com>
+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
ubuntu-desktop@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-desktop

Reply via email to