diff --git a/SOURCES/0001-backends-Only-apply-EDID-based-tablet-mapping-heuris.patch b/SOURCES/0001-backends-Only-apply-EDID-based-tablet-mapping-heuris.patch
new file mode 100644
index 0000000..68f1397
--- /dev/null
+++ b/SOURCES/0001-backends-Only-apply-EDID-based-tablet-mapping-heuris.patch
@@ -0,0 +1,34 @@
+From ba25271408a32a2a73a82acc6e094a611001c9f0 Mon Sep 17 00:00:00 2001
+From: Carlos Garnacho <carlosg@gnome.org>
+Date: Fri, 16 Dec 2022 23:06:33 +0100
+Subject: [PATCH] backends: Only apply EDID-based tablet mapping heuristic on
+ integrated devices
+
+These are the ones attached to a display, thus they are the ones that may need
+help from this heuristic. Non-integrated tablets (e.g. Intuos) will default to
+the span of all monitors.
+
+Fixes mapping of opaque tablets if a display-integrated tablet of the same
+brand is also plugged in.
+
+Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2767>
+---
+ src/backends/meta-input-mapper.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/backends/meta-input-mapper.c b/src/backends/meta-input-mapper.c
+index cc75f14e8..71d193e5f 100644
+--- a/src/backends/meta-input-mapper.c
++++ b/src/backends/meta-input-mapper.c
+@@ -455,7 +455,7 @@ guess_candidates (MetaInputMapper     *mapper,
+ 
+       g_assert (META_IS_MONITOR (l->data));
+ 
+-      if (match_edid (input, l->data, &edid_match))
++      if (integrated && match_edid (input, l->data, &edid_match))
+         match.score |= 1 << edid_match;
+ 
+       if (integrated && match_size (input, l->data))
+-- 
+2.38.1
+
diff --git a/SOURCES/0001-clutter-text-Don-t-query-preferred-size-without-allo.patch b/SOURCES/0001-clutter-text-Don-t-query-preferred-size-without-allo.patch
new file mode 100644
index 0000000..90c09f5
--- /dev/null
+++ b/SOURCES/0001-clutter-text-Don-t-query-preferred-size-without-allo.patch
@@ -0,0 +1,52 @@
+From 5cd66485cdd99068dab0f57d7f64d3ef294b0037 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
+Date: Wed, 4 Aug 2021 19:30:10 +0200
+Subject: [PATCH] clutter/text: Don't query preferred size without allocation
+
+The size request functions query the resource scale, which hits
+an assert if headless. The returned sizes are already only used
+when clutter_actor_has_allocation() is true, so this doesn't
+change the condition for calling either redraw or relayout.
+
+https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4522
+
+Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1956>
+---
+ clutter/clutter/clutter-text.c | 17 +++++++++++------
+ 1 file changed, 11 insertions(+), 6 deletions(-)
+
+diff --git a/clutter/clutter/clutter-text.c b/clutter/clutter/clutter-text.c
+index 45c7eac56b..80e53ea32f 100644
+--- a/clutter/clutter/clutter-text.c
++++ b/clutter/clutter/clutter-text.c
+@@ -4797,16 +4797,21 @@ static void
+ clutter_text_queue_redraw_or_relayout (ClutterText *self)
+ {
+   ClutterActor *actor = CLUTTER_ACTOR (self);
+-  gfloat preferred_width;
+-  gfloat preferred_height;
++  float preferred_width = -1.;
++  float preferred_height = -1.;
+ 
+   clutter_text_dirty_cache (self);
+ 
+-  /* we're using our private implementations here to avoid the caching done by ClutterActor */
+-  clutter_text_get_preferred_width (actor, -1, NULL, &preferred_width);
+-  clutter_text_get_preferred_height (actor, preferred_width, NULL, &preferred_height);
++  if (clutter_actor_has_allocation (actor))
++    {
++      /* we're using our private implementations here to avoid the caching done by ClutterActor */
++      clutter_text_get_preferred_width (actor, -1, NULL, &preferred_width);
++      clutter_text_get_preferred_height (actor, preferred_width, NULL,
++                                         &preferred_height);
++    }
+ 
+-  if (clutter_actor_has_allocation (actor) &&
++  if (preferred_width > 0 &&
++      preferred_height > 0 &&
+       fabsf (preferred_width - clutter_actor_get_width (actor)) <= 0.001 &&
+       fabsf (preferred_height - clutter_actor_get_height (actor)) <= 0.001)
+     clutter_text_queue_redraw (actor);
+-- 
+2.31.1
+
diff --git a/SOURCES/0001-gpu-kms-Report-that-we-can-have-outputs-if-we-have-c.patch b/SOURCES/0001-gpu-kms-Report-that-we-can-have-outputs-if-we-have-c.patch
new file mode 100644
index 0000000..37712b8
--- /dev/null
+++ b/SOURCES/0001-gpu-kms-Report-that-we-can-have-outputs-if-we-have-c.patch
@@ -0,0 +1,45 @@
+From 168a47c9ebefaeca6cc25fcbc0d41ac50c16f400 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
+Date: Wed, 1 Feb 2023 10:07:53 +0100
+Subject: [PATCH] gpu/kms: Report that we can have outputs if we have
+ connectors
+
+As part of https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/525
+(introduction of transactional KMS API), the logic determining whether a
+GPU can have outputs was changed from whether any connectors existed to
+whether any connected connectors existed. That effectively meant that we
+wouldn't attempt to start at all if there were no monitors connected
+while starting up.
+
+This was unintentional, so lets revert back the expected behavior.
+---
+ src/backends/native/meta-gpu-kms.c | 13 +------------
+ 1 file changed, 1 insertion(+), 12 deletions(-)
+
+diff --git a/src/backends/native/meta-gpu-kms.c b/src/backends/native/meta-gpu-kms.c
+index e81c90a022..2756bddb26 100644
+--- a/src/backends/native/meta-gpu-kms.c
++++ b/src/backends/native/meta-gpu-kms.c
+@@ -399,18 +399,7 @@ meta_gpu_kms_read_current (MetaGpu  *gpu,
+ gboolean
+ meta_gpu_kms_can_have_outputs (MetaGpuKms *gpu_kms)
+ {
+-  GList *l;
+-  int n_connected_connectors = 0;
+-
+-  for (l = meta_kms_device_get_connectors (gpu_kms->kms_device); l; l = l->next)
+-    {
+-      MetaKmsConnector *kms_connector = l->data;
+-
+-      if (meta_kms_connector_get_current_state (kms_connector))
+-        n_connected_connectors++;
+-    }
+-
+-  return n_connected_connectors > 0;
++  return !!meta_kms_device_get_connectors (gpu_kms->kms_device);
+ }
+ 
+ MetaGpuKms *
+-- 
+2.39.1
+
diff --git a/SOURCES/0001-output-kms-Add-more-heuristics-to-decide-when-to-off.patch b/SOURCES/0001-output-kms-Add-more-heuristics-to-decide-when-to-off.patch
new file mode 100644
index 0000000..5547719
--- /dev/null
+++ b/SOURCES/0001-output-kms-Add-more-heuristics-to-decide-when-to-off.patch
@@ -0,0 +1,107 @@
+From 86000c32d64cea7be2e6ed911cb9ea5df1306c0e Mon Sep 17 00:00:00 2001
+From: Mario Limonciello <mario.limonciello@amd.com>
+Date: Thu, 18 Aug 2022 13:36:20 -0500
+Subject: [PATCH 1/2] output/kms: Add more heuristics to decide when to offer
+ fallback modes
+
+If the panel is connected via eDP and supports more than one mode
+at different resolutions don't try to add more.
+
+Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2586>
+(cherry picked from commit 96aa0fb8536eca579ceb1b17d83e19cf9e3e9e81)
+(cherry picked from commit 877cc3eb7d44e2886395151f763ec09bea350444)
+---
+ src/backends/native/meta-output-kms.c | 56 +++++++++++++++++++++------
+ 1 file changed, 44 insertions(+), 12 deletions(-)
+
+diff --git a/src/backends/native/meta-output-kms.c b/src/backends/native/meta-output-kms.c
+index f35cdf04e1..9adc20bfd9 100644
+--- a/src/backends/native/meta-output-kms.c
++++ b/src/backends/native/meta-output-kms.c
+@@ -224,6 +224,45 @@ compare_modes (const void *one,
+                     meta_crtc_mode_get_name (crtc_mode_two));
+ }
+ 
++static gboolean
++are_all_modes_equally_sized (MetaOutputInfo *output_info)
++{
++  const MetaCrtcModeInfo *base =
++    meta_crtc_mode_get_info (output_info->modes[0]);
++  int i;
++
++  for (i = 1; i < output_info->n_modes; i++)
++    {
++      const MetaCrtcModeInfo *mode_info =
++        meta_crtc_mode_get_info (output_info->modes[i]);
++
++      if (base->width != mode_info->width ||
++          base->height != mode_info->height)
++        return FALSE;
++    }
++
++  return TRUE;
++}
++
++static void
++maybe_add_fallback_modes (const MetaKmsConnectorState *connector_state,
++                          MetaOutputInfo              *output_info,
++                          MetaGpuKms                  *gpu_kms,
++                          MetaKmsConnector            *kms_connector)
++{
++  if (!connector_state->has_scaling)
++    return;
++
++  if (output_info->connector_type == DRM_MODE_CONNECTOR_eDP &&
++      !are_all_modes_equally_sized (output_info))
++    return;
++
++  meta_topic (META_DEBUG_KMS, "Adding common modes to connector %u on %s",
++              meta_kms_connector_get_id (kms_connector),
++              meta_gpu_kms_get_file_path (gpu_kms));
++  add_common_modes (output_info, gpu_kms);
++}
++
+ static gboolean
+ init_output_modes (MetaOutputInfo    *output_info,
+                    MetaGpuKms        *gpu_kms,
+@@ -252,14 +291,7 @@ init_output_modes (MetaOutputInfo    *output_info,
+         output_info->preferred_mode = output_info->modes[i];
+     }
+ 
+-  if (connector_state->has_scaling)
+-    {
+-      meta_topic (META_DEBUG_KMS, "Adding common modes to connector %u on %s",
+-                  meta_kms_connector_get_id (kms_connector),
+-                  meta_gpu_kms_get_file_path (gpu_kms));
+-      add_common_modes (output_info, gpu_kms);
+-    }
+-
++  maybe_add_fallback_modes (connector_state, output_info, gpu_kms, kms_connector);
+   if (!output_info->modes)
+     {
+       g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+@@ -322,6 +354,10 @@ meta_output_kms_new (MetaGpuKms        *gpu_kms,
+       output_info->height_mm = connector_state->height_mm;
+     }
+ 
++  drm_connector_type = meta_kms_connector_get_connector_type (kms_connector);
++  output_info->connector_type =
++    meta_kms_connector_type_from_drm (drm_connector_type);
++
+   if (!init_output_modes (output_info, gpu_kms, kms_connector, error))
+     return NULL;
+ 
+@@ -349,10 +385,6 @@ meta_output_kms_new (MetaGpuKms        *gpu_kms,
+ 
+   meta_output_info_parse_edid (output_info, connector_state->edid_data);
+ 
+-  drm_connector_type = meta_kms_connector_get_connector_type (kms_connector);
+-  output_info->connector_type =
+-    meta_kms_connector_type_from_drm (drm_connector_type);
+-
+   output_info->tile_info = connector_state->tile_info;
+ 
+   output = g_object_new (META_TYPE_OUTPUT_KMS,
+-- 
+2.37.1
+
diff --git a/SOURCES/0002-output-kms-Don-t-attemp-to-add-common-modes-on-conne.patch b/SOURCES/0002-output-kms-Don-t-attemp-to-add-common-modes-on-conne.patch
new file mode 100644
index 0000000..38bc543
--- /dev/null
+++ b/SOURCES/0002-output-kms-Don-t-attemp-to-add-common-modes-on-conne.patch
@@ -0,0 +1,47 @@
+From cd8b90a7a7185c3f177469d1a37654a9e8539cd1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
+Date: Thu, 29 Sep 2022 14:23:55 +0200
+Subject: [PATCH 2/2] output/kms: Don't attemp to add common modes on
+ connectors without modes
+
+We have no way to sanely add safe modes if there are no modes we can
+compare with, thus don't try.
+
+Fixes the following crash:
+
+ #0 are_all_modes_equally_sized at ../src/backends/native/meta-output-kms.c:284
+ #1 maybe_add_fallback_modes at ../src/backends/native/meta-output-kms.c:310
+ #2 init_output_modes at ../src/backends/native/meta-output-kms.c:347
+ #3 meta_output_kms_new at ../src/backends/native/meta-output-kms.c:414
+ #4 init_outputs at ../src/backends/native/meta-gpu-kms.c:332
+ #5 meta_gpu_kms_read_current at ../src/backends/native/meta-gpu-kms.c:368
+ #6 meta_gpu_kms_new at ../src/backends/native/meta-gpu-kms.c:403
+ #7 create_gpu_from_udev_device at ../src/backends/native/meta-backend-native.c:461
+ #8 init_gpus at ../src/backends/native/meta-backend-native.c:551
+ #9 meta_backend_native_initable_init at ../src/backends/native/meta-backend-native.c:632
+
+Fixes: 877cc3eb7d44e2886395151f763ec09bea350444
+Related: https://bugzilla.redhat.com/show_bug.cgi?id=2127801
+Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2646>
+(cherry picked from commit 2c8adb19660cb2cd53381372833e088962437d3b)
+---
+ src/backends/native/meta-output-kms.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/backends/native/meta-output-kms.c b/src/backends/native/meta-output-kms.c
+index 9adc20bfd9..058ab7c053 100644
+--- a/src/backends/native/meta-output-kms.c
++++ b/src/backends/native/meta-output-kms.c
+@@ -250,6 +250,9 @@ maybe_add_fallback_modes (const MetaKmsConnectorState *connector_state,
+                           MetaGpuKms                  *gpu_kms,
+                           MetaKmsConnector            *kms_connector)
+ {
++  if (!connector_state->modes)
++    return;
++
+   if (!connector_state->has_scaling)
+     return;
+ 
+-- 
+2.37.1
+
diff --git a/SOURCES/legacy-x11-input-configuration.patch b/SOURCES/legacy-x11-input-configuration.patch
index 597e0d7..7084e6d 100644
--- a/SOURCES/legacy-x11-input-configuration.patch
+++ b/SOURCES/legacy-x11-input-configuration.patch
@@ -1,4 +1,4 @@
-From 705818340dec181335b48ab73d6411e639daaeae Mon Sep 17 00:00:00 2001
+From 22fe64732e11199901d4a35f9d3c63d5d6deb3a3 Mon Sep 17 00:00:00 2001
 From: Carlos Garnacho <carlosg@gnome.org>
 Date: Tue, 1 Jun 2021 11:44:20 +0200
 Subject: [PATCH 1/6] backends/x11: Support synaptics configuration
@@ -6,11 +6,11 @@ Subject: [PATCH 1/6] backends/x11: Support synaptics configuration
 The code is taken mostly as-is from g-s-d, so we can drag the
 dead horse a bit longer.
 ---
- src/backends/x11/meta-input-settings-x11.c | 275 +++++++++++++++++++++
- 1 file changed, 275 insertions(+)
+ src/backends/x11/meta-input-settings-x11.c | 274 +++++++++++++++++++++
+ 1 file changed, 274 insertions(+)
 
 diff --git a/src/backends/x11/meta-input-settings-x11.c b/src/backends/x11/meta-input-settings-x11.c
-index 96390285a6..0631fd2fee 100644
+index 371e2f60e..426056390 100644
 --- a/src/backends/x11/meta-input-settings-x11.c
 +++ b/src/backends/x11/meta-input-settings-x11.c
 @@ -26,6 +26,7 @@
@@ -21,7 +21,7 @@ index 96390285a6..0631fd2fee 100644
  #include <string.h>
  #include <X11/Xatom.h>
  #include <X11/extensions/XInput2.h>
-@@ -165,6 +166,184 @@ change_property (ClutterInputDevice *device,
+@@ -165,6 +166,183 @@ change_property (ClutterInputDevice *device,
    meta_XFree (data_ret);
  }
  
@@ -45,7 +45,6 @@ index 96390285a6..0631fd2fee 100644
 +                                  gboolean            left_handed)
 +{
 +  MetaDisplay *display = meta_get_display ();
-+  MetaX11Display *x11_display = display ? display->x11_display : NULL;
 +  MetaBackend *backend = meta_get_backend ();
 +  Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
 +  int device_id;
@@ -71,8 +70,7 @@ index 96390285a6..0631fd2fee 100644
 +                   XA_INTEGER, 8, tap_action, 7);
 +  meta_XFree (tap_action);
 +
-+  if (x11_display)
-+    meta_x11_error_trap_push (x11_display);
++  clutter_x11_trap_x_errors();
 +  buttons = g_new (guchar, buttons_capacity);
 +  n_buttons = XGetDeviceButtonMapping (xdisplay, xdevice,
 +                                       buttons, buttons_capacity);
@@ -92,7 +90,7 @@ index 96390285a6..0631fd2fee 100644
 +  XSetDeviceButtonMapping (xdisplay, xdevice, buttons, n_buttons);
 +  g_free (buttons);
 +
-+  if (x11_display && meta_x11_error_trap_pop_with_return (x11_display))
++  if (clutter_x11_untrap_x_errors())
 +    {
 +      g_warning ("Could not set synaptics touchpad left-handed for %s",
 +                 clutter_input_device_get_device_name (device));
@@ -107,7 +105,6 @@ index 96390285a6..0631fd2fee 100644
 +                        gdouble             speed)
 +{
 +  MetaDisplay *display = meta_get_display ();
-+  MetaX11Display *x11_display = display ? display->x11_display : NULL;
 +  MetaBackend *backend = meta_get_backend ();
 +  Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
 +  int device_id;
@@ -122,7 +119,10 @@ index 96390285a6..0631fd2fee 100644
 +  if (!xdevice)
 +    return;
 +  /* Get the list of feedbacks for the device */
++  clutter_x11_trap_x_errors();
 +  states = XGetFeedbackControl (xdisplay, xdevice, &num_feedbacks);
++  if (clutter_x11_untrap_x_errors())
++    return;
 +  if (!states)
 +    return;
 +
@@ -167,8 +167,7 @@ index 96390285a6..0631fd2fee 100644
 +      denominator = -1;
 +    }
 +
-+  if (x11_display)
-+    meta_x11_error_trap_push (x11_display);
++  clutter_x11_trap_x_errors();
 +
 +  state = (XFeedbackState *) states;
 +
@@ -193,7 +192,7 @@ index 96390285a6..0631fd2fee 100644
 +      state = (XFeedbackState *) ((char *) state + state->length);
 +    }
 +
-+  if (x11_display && meta_x11_error_trap_pop_with_return (x11_display))
++  if (clutter_x11_untrap_x_errors())
 +    {
 +      g_warning ("Could not set synaptics touchpad acceleration for %s",
 +                 clutter_input_device_get_device_name (device));
@@ -206,7 +205,7 @@ index 96390285a6..0631fd2fee 100644
  static void
  meta_input_settings_x11_set_send_events (MetaInputSettings        *settings,
                                           ClutterInputDevice       *device,
-@@ -173,6 +352,13 @@ meta_input_settings_x11_set_send_events (MetaInputSettings        *settings,
+@@ -173,6 +351,13 @@ meta_input_settings_x11_set_send_events (MetaInputSettings        *settings,
    guchar values[2] = { 0 }; /* disabled, disabled-on-external-mouse */
    guchar *available;
  
@@ -220,7 +219,7 @@ index 96390285a6..0631fd2fee 100644
    available = get_property (device, "libinput Send Events Modes Available",
                              XA_INTEGER, 8, 2);
    if (!available)
-@@ -225,6 +411,12 @@ meta_input_settings_x11_set_speed (MetaInputSettings  *settings,
+@@ -225,6 +410,12 @@ meta_input_settings_x11_set_speed (MetaInputSettings  *settings,
    Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
    gfloat value = speed;
  
@@ -233,7 +232,7 @@ index 96390285a6..0631fd2fee 100644
    change_property (device, "libinput Accel Speed",
                     XInternAtom (xdisplay, "FLOAT", False),
                     32, &value, 1);
-@@ -251,6 +443,19 @@ meta_input_settings_x11_set_left_handed (MetaInputSettings  *settings,
+@@ -251,6 +442,19 @@ meta_input_settings_x11_set_left_handed (MetaInputSettings  *settings,
    else
      {
        value = enabled ? 1 : 0;
@@ -253,7 +252,7 @@ index 96390285a6..0631fd2fee 100644
        change_property (device, "libinput Left Handed Enabled",
                         XA_INTEGER, 8, &value, 1);
      }
-@@ -274,6 +479,20 @@ meta_input_settings_x11_set_tap_enabled (MetaInputSettings  *settings,
+@@ -274,6 +478,20 @@ meta_input_settings_x11_set_tap_enabled (MetaInputSettings  *settings,
  {
    guchar value = (enabled) ? 1 : 0;
  
@@ -274,7 +273,7 @@ index 96390285a6..0631fd2fee 100644
    change_property (device, "libinput Tapping Enabled",
                     XA_INTEGER, 8, &value, 1);
  }
-@@ -307,6 +526,27 @@ meta_input_settings_x11_set_invert_scroll (MetaInputSettings  *settings,
+@@ -307,6 +525,27 @@ meta_input_settings_x11_set_invert_scroll (MetaInputSettings  *settings,
  {
    guchar value = (inverted) ? 1 : 0;
  
@@ -302,7 +301,7 @@ index 96390285a6..0631fd2fee 100644
    change_property (device, "libinput Natural Scrolling Enabled",
                     XA_INTEGER, 8, &value, 1);
  }
-@@ -320,6 +560,41 @@ change_scroll_method (ClutterInputDevice           *device,
+@@ -320,6 +559,41 @@ change_scroll_method (ClutterInputDevice           *device,
    guchar *current = NULL;
    guchar *available = NULL;
  
@@ -345,10 +344,10 @@ index 96390285a6..0631fd2fee 100644
                              XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
    if (!available || !available[method])
 -- 
-2.31.1
+2.36.1
 
 
-From 50c4733acf56b3b67a2706d32f5c455cb51f9458 Mon Sep 17 00:00:00 2001
+From 963ff120898e7e42d80d5761753e76adcf16c132 Mon Sep 17 00:00:00 2001
 From: Carlos Garnacho <carlosg@gnome.org>
 Date: Tue, 13 Feb 2018 11:44:40 +0100
 Subject: [PATCH 2/6] clutter: Extend touchpad device property check for
@@ -361,7 +360,7 @@ to get the device type may fall short.
  1 file changed, 15 insertions(+), 2 deletions(-)
 
 diff --git a/src/backends/x11/meta-seat-x11.c b/src/backends/x11/meta-seat-x11.c
-index d43834bd7b..73938e22e0 100644
+index d43834bd7..73938e22e 100644
 --- a/src/backends/x11/meta-seat-x11.c
 +++ b/src/backends/x11/meta-seat-x11.c
 @@ -246,7 +246,8 @@ is_touch_device (XIAnyClassInfo         **classes,
@@ -403,10 +402,10 @@ index d43834bd7b..73938e22e0 100644
  get_device_ids (XIDeviceInfo  *info,
                  char         **vendor_id,
 -- 
-2.31.1
+2.36.1
 
 
-From 307970305d11cdca1b97c53c85bda8b809ff4f0f Mon Sep 17 00:00:00 2001
+From 86cc1b46dae01da619980af826eb9bf81cf31143 Mon Sep 17 00:00:00 2001
 From: Rui Matos <tiagomatos@gmail.com>
 Date: Mon, 9 Oct 2017 18:39:52 +0200
 Subject: [PATCH 3/6] backends/x11: Add a synaptics check for two finger scroll
@@ -421,10 +420,10 @@ isn't.
  1 file changed, 11 insertions(+)
 
 diff --git a/src/backends/x11/meta-input-settings-x11.c b/src/backends/x11/meta-input-settings-x11.c
-index 0631fd2fee..2ac080127c 100644
+index 426056390..db2b2a4fb 100644
 --- a/src/backends/x11/meta-input-settings-x11.c
 +++ b/src/backends/x11/meta-input-settings-x11.c
-@@ -638,6 +638,17 @@ meta_input_settings_x11_has_two_finger_scroll (MetaInputSettings  *settings,
+@@ -637,6 +637,17 @@ meta_input_settings_x11_has_two_finger_scroll (MetaInputSettings  *settings,
    guchar *available = NULL;
    gboolean has_two_finger = TRUE;
  
@@ -443,10 +442,10 @@ index 0631fd2fee..2ac080127c 100644
                              XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
    if (!available || !available[SCROLL_METHOD_FIELD_2FG])
 -- 
-2.31.1
+2.36.1
 
 
-From cba31f88ddbfb7355de1daa34397aba8e8607765 Mon Sep 17 00:00:00 2001
+From 32e2da07eeb1f9edcf03751285a756ab1acca6a8 Mon Sep 17 00:00:00 2001
 From: Rui Matos <tiagomatos@gmail.com>
 Date: Mon, 9 Oct 2017 18:55:56 +0200
 Subject: [PATCH 4/6] backends/x11: Add disable while typing support for
@@ -459,7 +458,7 @@ syndaemon when the synaptics driver is being used.
  1 file changed, 112 insertions(+)
 
 diff --git a/src/backends/x11/meta-input-settings-x11.c b/src/backends/x11/meta-input-settings-x11.c
-index 2ac080127c..2658b82172 100644
+index db2b2a4fb..bf9d769e9 100644
 --- a/src/backends/x11/meta-input-settings-x11.c
 +++ b/src/backends/x11/meta-input-settings-x11.c
 @@ -35,6 +35,9 @@
@@ -481,7 +480,7 @@ index 2ac080127c..2658b82172 100644
  } MetaInputSettingsX11Private;
  
  G_DEFINE_TYPE_WITH_PRIVATE (MetaInputSettingsX11, meta_input_settings_x11,
-@@ -344,6 +349,107 @@ change_synaptics_speed (ClutterInputDevice *device,
+@@ -343,6 +348,107 @@ change_synaptics_speed (ClutterInputDevice *device,
    XCloseDevice (xdisplay, xdevice);
  }
  
@@ -589,7 +588,7 @@ index 2ac080127c..2658b82172 100644
  static void
  meta_input_settings_x11_set_send_events (MetaInputSettings        *settings,
                                           ClutterInputDevice       *device,
-@@ -468,6 +574,12 @@ meta_input_settings_x11_set_disable_while_typing (MetaInputSettings  *settings,
+@@ -467,6 +573,12 @@ meta_input_settings_x11_set_disable_while_typing (MetaInputSettings  *settings,
  {
    guchar value = (enabled) ? 1 : 0;
  
@@ -603,10 +602,10 @@ index 2ac080127c..2658b82172 100644
                     XA_INTEGER, 8, &value, 1);
  }
 -- 
-2.31.1
+2.36.1
 
 
-From 354d34263534d0c7a5c7f7169d8b4a3dba79491c Mon Sep 17 00:00:00 2001
+From 6da0bfe86f416d3cfc5cc6993e8e2f6ca255e85a Mon Sep 17 00:00:00 2001
 From: Carlos Garnacho <carlosg@gnome.org>
 Date: Wed, 13 Jun 2018 13:48:24 +0200
 Subject: [PATCH 5/6] clutter: Only reset scroll axes on slave devices
@@ -617,7 +616,7 @@ As a plus, unknown source device IDs will just warn instead of crash.
  1 file changed, 3 insertions(+), 1 deletion(-)
 
 diff --git a/src/backends/x11/meta-seat-x11.c b/src/backends/x11/meta-seat-x11.c
-index 73938e22e0..6d2c7d3740 100644
+index 73938e22e..6d2c7d374 100644
 --- a/src/backends/x11/meta-seat-x11.c
 +++ b/src/backends/x11/meta-seat-x11.c
 @@ -2362,7 +2362,9 @@ meta_seat_x11_translate_event (MetaSeatX11  *seat,
@@ -632,10 +631,10 @@ index 73938e22e0..6d2c7d3740 100644
          clutter_event_set_device (event, device);
          clutter_event_set_source_device (event, source_device);
 -- 
-2.31.1
+2.36.1
 
 
-From b7f94b5dd09953d5a4c8aee1b79491d71f8c1e0e Mon Sep 17 00:00:00 2001
+From da60cf38c7fcec68f8e79a8a3a174e551c07a64a Mon Sep 17 00:00:00 2001
 From: Rui Matos <tiagomatos@gmail.com>
 Date: Tue, 10 Oct 2017 19:07:27 +0200
 Subject: [PATCH 6/6] backends/x11: Support plain old X device configuration
@@ -647,10 +646,10 @@ bits specific for xorg-x11-drv-evdev devices.
  1 file changed, 75 insertions(+), 23 deletions(-)
 
 diff --git a/src/backends/x11/meta-input-settings-x11.c b/src/backends/x11/meta-input-settings-x11.c
-index 2658b82172..80bc33c6b5 100644
+index bf9d769e9..49dcb74f1 100644
 --- a/src/backends/x11/meta-input-settings-x11.c
 +++ b/src/backends/x11/meta-input-settings-x11.c
-@@ -185,10 +185,23 @@ is_device_synaptics (ClutterInputDevice *device)
+@@ -185,17 +185,30 @@ is_device_synaptics (ClutterInputDevice *device)
    return TRUE;
  }
  
@@ -676,8 +675,7 @@ index 2658b82172..80bc33c6b5 100644
 +                             gboolean            left_handed)
  {
    MetaDisplay *display = meta_get_display ();
-   MetaX11Display *x11_display = display ? display->x11_display : NULL;
-@@ -196,7 +209,7 @@ change_synaptics_tap_left_handed (ClutterInputDevice *device,
+   MetaBackend *backend = meta_get_backend ();
    Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
    int device_id;
    XDevice *xdevice;
@@ -686,7 +684,7 @@ index 2658b82172..80bc33c6b5 100644
    guint buttons_capacity = 16, n_buttons;
  
    device_id = meta_input_device_x11_get_device_id (device);
-@@ -204,19 +217,6 @@ change_synaptics_tap_left_handed (ClutterInputDevice *device,
+@@ -203,19 +216,6 @@ change_synaptics_tap_left_handed (ClutterInputDevice *device,
    if (!xdevice)
      return;
  
@@ -703,12 +701,12 @@ index 2658b82172..80bc33c6b5 100644
 -                   XA_INTEGER, 8, tap_action, 7);
 -  meta_XFree (tap_action);
 -
-   if (x11_display)
-     meta_x11_error_trap_push (x11_display);
+   clutter_x11_trap_x_errors();
    buttons = g_new (guchar, buttons_capacity);
-@@ -240,17 +240,39 @@ change_synaptics_tap_left_handed (ClutterInputDevice *device,
+   n_buttons = XGetDeviceButtonMapping (xdisplay, xdevice,
+@@ -238,17 +238,39 @@ change_synaptics_tap_left_handed (ClutterInputDevice *device,
  
-   if (x11_display && meta_x11_error_trap_pop_with_return (x11_display))
+   if (clutter_x11_untrap_x_errors())
      {
 -      g_warning ("Could not set synaptics touchpad left-handed for %s",
 +      g_warning ("Could not set left-handed for %s",
@@ -749,8 +747,8 @@ index 2658b82172..80bc33c6b5 100644
 +                       gdouble             speed)
  {
    MetaDisplay *display = meta_get_display ();
-   MetaX11Display *x11_display = display ? display->x11_display : NULL;
-@@ -349,6 +371,23 @@ change_synaptics_speed (ClutterInputDevice *device,
+   MetaBackend *backend = meta_get_backend ();
+@@ -348,6 +370,23 @@ change_synaptics_speed (ClutterInputDevice *device,
    XCloseDevice (xdisplay, xdevice);
  }
  
@@ -774,7 +772,7 @@ index 2658b82172..80bc33c6b5 100644
  /* Ensure that syndaemon dies together with us, to avoid running several of
   * them */
  static void
-@@ -517,9 +556,10 @@ meta_input_settings_x11_set_speed (MetaInputSettings  *settings,
+@@ -516,9 +555,10 @@ meta_input_settings_x11_set_speed (MetaInputSettings  *settings,
    Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
    gfloat value = speed;
  
@@ -787,7 +785,7 @@ index 2658b82172..80bc33c6b5 100644
        return;
      }
  
-@@ -561,6 +601,11 @@ meta_input_settings_x11_set_left_handed (MetaInputSettings  *settings,
+@@ -560,6 +600,11 @@ meta_input_settings_x11_set_left_handed (MetaInputSettings  *settings,
            g_object_unref (settings);
            return;
          }
@@ -799,7 +797,7 @@ index 2658b82172..80bc33c6b5 100644
  
        change_property (device, "libinput Left Handed Enabled",
                         XA_INTEGER, 8, &value, 1);
-@@ -778,7 +823,14 @@ meta_input_settings_x11_set_scroll_button (MetaInputSettings  *settings,
+@@ -777,7 +822,14 @@ meta_input_settings_x11_set_scroll_button (MetaInputSettings  *settings,
  {
    gchar lock = button_lock;
  
@@ -815,5 +813,5 @@ index 2658b82172..80bc33c6b5 100644
                     XA_CARDINAL, 32, &button, 1);
    change_property (device, "libinput Button Scrolling Button Lock Enabled",
 -- 
-2.31.1
+2.36.1
 
diff --git a/SPECS/mutter.spec b/SPECS/mutter.spec
index a4c13d8..89de75f 100644
--- a/SPECS/mutter.spec
+++ b/SPECS/mutter.spec
@@ -10,7 +10,7 @@
 
 Name:          mutter
 Version:       40.9
-Release:       9%{?dist}
+Release:       14%{?dist}
 Summary:       Window and compositing manager based on Clutter
 
 License:       GPLv2+
@@ -101,6 +101,16 @@ Patch40: 0001-events-Pass-CurrentTime-to-XIAllowEvents-when-unfree.patch
 # Backport night light availability property (#2057154)
 Patch41: 0001-monitor-manager-Add-NightLightSupported-property-to-.patch
 
+# Don't add common modes if panel already has (#2125032)
+Patch42: 0001-output-kms-Add-more-heuristics-to-decide-when-to-off.patch
+Patch43: 0002-output-kms-Don-t-attemp-to-add-common-modes-on-conne.patch
+
+Patch44: 0001-backends-Only-apply-EDID-based-tablet-mapping-heuris.patch
+
+# Allow starting headless again (#2116363)
+Patch45: 0001-gpu-kms-Report-that-we-can-have-outputs-if-we-have-c.patch
+Patch46: 0001-clutter-text-Don-t-query-preferred-size-without-allo.patch
+
 BuildRequires: chrpath
 BuildRequires: pango-devel
 BuildRequires: startup-notification-devel
@@ -191,6 +201,7 @@ behaviors to meet the needs of the environment.
 %package devel
 Summary: Development package for %{name}
 Requires: %{name}%{?_isa} = %{version}-%{release}
+Requires: mesa-libEGL-devel
 
 %description devel
 Header files and libraries for developing Mutter plugins. Also includes
@@ -247,6 +258,26 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
 %{_datadir}/mutter-%{mutter_api_version}/tests
 
 %changelog
+* Wed Feb 01 2023 Jonas Ådahl <jadahl@redhat.com>) - 40.9-14
+- Allow starting headless again
+  Resolves: #2116363
+
+* Tue Jan 03 2023 Carlos Garnacho <cgarnach@redhat.com>) - 40.9-13
+- Do not apply EDID mapping heuristics to non-integrated tablets
+  Resolves: #2047341
+
+* Tue Dec 06 2022 Jonas Ådahl <jadahl@redhat.com>) - 40.9-12
+- Add missing dependency for mutter-devel
+  Resolves: #2004832
+
+* Tue Dec 06 2022 Olivier Fourdan <ofourdan@redhat.com> - 40.9-11
+- Fix downstream synaptics patches breaking xdmcp
+  Resolves: #2092452
+
+* Thu Oct 20 2022 Jonas Ådahl <jadahl@redhat.com>) - 40.9-10
+- Don't add common modes if panel already has
+  Resolves: #2125032
+
 * Tue Aug 16 2022 Jonas Ådahl <jadahl@redhat.com>) - 40.9-9
 - Backport night light availability property
   Resolves: #2057154
@@ -315,7 +346,7 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
 - Fixes a race in wl_seat capabilities
   Resolves: #2003032
 
-* Wed Aug 27 2021 Florian Müllner <fmuellner@redhat.com> - 40.4-2
+* Fri Aug 27 2021 Florian Müllner <fmuellner@redhat.com> - 40.4-2
 - Remove firstboot(windowmanager) provide
   Resolves: #1975355