diff --git a/SOURCES/0001-display-Make-check-alive-timeout-configureable.patch b/SOURCES/0001-display-Make-check-alive-timeout-configureable.patch
new file mode 100644
index 0000000..e0dfabe
--- /dev/null
+++ b/SOURCES/0001-display-Make-check-alive-timeout-configureable.patch
@@ -0,0 +1,248 @@
+From 7f6f326a1bb96aad0b7aea9c4d7e257bf53c026c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
+Date: Fri, 21 Feb 2020 21:03:16 +0100
+Subject: [PATCH] display: Make check-alive timeout configureable
+
+The check-alive feature is there for the user to be able to terminate
+frozen applications more easily. However, sometimes applications are
+implemented in a way where they fail to be reply to ping requests in a
+timely manner, resulting in that, to the compositor, they are
+indistinguishable from clients that have frozen indefinitely.
+
+When using an application that has these issues, the GUI showed in
+response to the failure to respond to ping requests can become annoying,
+as it disrupts the visual presentation of the application.
+
+To allow users to work-around these issues, add a setting allowing them
+to configure the timeout waited until an application is considered
+frozen, or disabling the check completely.
+
+https://gitlab.gnome.org/GNOME/mutter/merge_requests/1080
+---
+ data/org.gnome.mutter.gschema.xml.in | 10 ++++
+ src/core/display.c                   | 18 ++++----
+ src/core/prefs.c                     | 68 ++++++++++++++++++++++++++++
+ src/meta/prefs.h                     |  3 ++
+ 4 files changed, 90 insertions(+), 9 deletions(-)
+
+diff --git a/data/org.gnome.mutter.gschema.xml.in b/data/org.gnome.mutter.gschema.xml.in
+index 6cbd9c1b5..4d37b1488 100644
+--- a/data/org.gnome.mutter.gschema.xml.in
++++ b/data/org.gnome.mutter.gschema.xml.in
+@@ -123,6 +123,16 @@
+       </description>
+     </key>
+ 
++    <key name="check-alive-timeout" type="u">
++      <default>5000</default>
++      <summary>Timeout for check-alive ping</summary>
++      <description>
++        Number of milliseconds a client has to respond to a ping request in
++        order to not be detected as frozen. Using 0 will disable the alive check
++        completely.
++      </description>
++    </key>
++
+     <child name="keybindings" schema="org.gnome.mutter.keybindings"/>
+ 
+   </schema>
+diff --git a/src/core/display.c b/src/core/display.c
+index eb7dc43b6..c30a03385 100644
+--- a/src/core/display.c
++++ b/src/core/display.c
+@@ -1923,12 +1923,6 @@ meta_set_syncing (gboolean setting)
+     }
+ }
+ 
+-/*
+- * How long, in milliseconds, we should wait after pinging a window
+- * before deciding it's not going to get back to us.
+- */
+-#define PING_TIMEOUT_DELAY 5000
+-
+ /**
+  * meta_display_ping_timeout:
+  * @data: All the information about this ping. It is a #MetaPingData
+@@ -1986,6 +1980,11 @@ meta_display_ping_window (MetaWindow *window,
+ {
+   MetaDisplay *display = window->display;
+   MetaPingData *ping_data;
++  unsigned int check_alive_timeout;
++
++  check_alive_timeout = meta_prefs_get_check_alive_timeout ();
++  if (check_alive_timeout == 0)
++    return;
+ 
+   if (serial == 0)
+     {
+@@ -1999,9 +1998,10 @@ meta_display_ping_window (MetaWindow *window,
+   ping_data = g_new (MetaPingData, 1);
+   ping_data->window = window;
+   ping_data->serial = serial;
+-  ping_data->ping_timeout_id = g_timeout_add (PING_TIMEOUT_DELAY,
+-					      meta_display_ping_timeout,
+-					      ping_data);
++  ping_data->ping_timeout_id =
++    g_timeout_add (check_alive_timeout,
++                   meta_display_ping_timeout,
++                   ping_data);
+   g_source_set_name_by_id (ping_data->ping_timeout_id, "[mutter] meta_display_ping_timeout");
+ 
+   display->pending_pings = g_slist_prepend (display->pending_pings, ping_data);
+diff --git a/src/core/prefs.c b/src/core/prefs.c
+index 3f0db8afc..4892406ce 100644
+--- a/src/core/prefs.c
++++ b/src/core/prefs.c
+@@ -99,6 +99,7 @@ static gboolean bell_is_visible = FALSE;
+ static gboolean bell_is_audible = TRUE;
+ static gboolean gnome_accessibility = FALSE;
+ static gboolean gnome_animations = TRUE;
++static unsigned int check_alive_timeout = 5000;
+ static char *cursor_theme = NULL;
+ /* cursor_size will, when running as an X11 compositing window manager, be the
+  * actual cursor size, multiplied with the global window scaling factor. On
+@@ -213,6 +214,12 @@ typedef struct
+   gint *target;
+ } MetaIntPreference;
+ 
++typedef struct
++{
++  MetaBasePreference base;
++  unsigned int *target;
++} MetaUintPreference;
++
+ 
+ /* All preferences that are not keybindings must be listed here,
+  * plus in the GSettings schemas and the MetaPreference enum.
+@@ -491,6 +498,18 @@ static MetaIntPreference preferences_int[] =
+     { { NULL, 0, 0 }, NULL },
+   };
+ 
++static MetaUintPreference preferences_uint[] =
++  {
++    {
++      { "check-alive-timeout",
++        SCHEMA_MUTTER,
++        META_PREF_CHECK_ALIVE_TIMEOUT,
++      },
++      &check_alive_timeout,
++    },
++    { { NULL, 0, 0 }, NULL },
++  };
++
+ static void
+ handle_preference_init_enum (void)
+ {
+@@ -613,6 +632,21 @@ handle_preference_init_int (void)
+     }
+ }
+ 
++static void
++handle_preference_init_uint (void)
++{
++  MetaUintPreference *cursor = preferences_uint;
++
++  while (cursor->base.key != NULL)
++    {
++      if (cursor->target)
++        *cursor->target = g_settings_get_uint (SETTINGS (cursor->base.schema),
++                                               cursor->base.key);
++
++      ++cursor;
++    }
++}
++
+ static void
+ handle_preference_update_enum (GSettings *settings,
+                                gchar *key)
+@@ -788,6 +822,28 @@ handle_preference_update_int (GSettings *settings,
+     }
+ }
+ 
++static void
++handle_preference_update_uint (GSettings *settings,
++                               char *key)
++{
++  MetaUintPreference *cursor = preferences_uint;
++  unsigned int new_value;
++
++  while (cursor->base.key && strcmp (key, cursor->base.key) != 0)
++    ++cursor;
++
++  if (!cursor->base.key || !cursor->target)
++    return;
++
++  new_value = g_settings_get_uint (SETTINGS (cursor->base.schema), key);
++
++  if (*cursor->target != new_value)
++    {
++      *cursor->target = new_value;
++      queue_changed (cursor->base.pref);
++    }
++}
++
+ 
+ /****************************************************************************/
+ /* Listeners.                                                               */
+@@ -964,6 +1020,7 @@ meta_prefs_init (void)
+   handle_preference_init_string ();
+   handle_preference_init_string_array ();
+   handle_preference_init_int ();
++  handle_preference_init_uint ();
+ 
+   init_bindings ();
+ }
+@@ -1017,6 +1074,8 @@ settings_changed (GSettings *settings,
+     handle_preference_update_bool (settings, key);
+   else if (g_variant_type_equal (type, G_VARIANT_TYPE_INT32))
+     handle_preference_update_int (settings, key);
++  else if (g_variant_type_equal (type, G_VARIANT_TYPE_UINT32))
++    handle_preference_update_uint (settings, key);
+   else if (g_variant_type_equal (type, G_VARIANT_TYPE_STRING_ARRAY))
+     handle_preference_update_string_array (settings, key);
+   else if (g_variant_type_equal (type, G_VARIANT_TYPE_STRING))
+@@ -1640,6 +1699,9 @@ meta_preference_to_string (MetaPreference pref)
+ 
+     case META_PREF_AUTO_MAXIMIZE:
+       return "AUTO_MAXIMIZE";
++
++    case META_PREF_CHECK_ALIVE_TIMEOUT:
++      return "CHECK_ALIVE_TIMEOUT";
+     }
+ 
+   return "(unknown)";
+@@ -1966,6 +2028,12 @@ meta_prefs_get_overlay_binding (MetaKeyCombo *combo)
+   *combo = overlay_key_combo;
+ }
+ 
++unsigned int
++meta_prefs_get_check_alive_timeout (void)
++{
++  return check_alive_timeout;
++}
++
+ const char *
+ meta_prefs_get_iso_next_group_option (void)
+ {
+diff --git a/src/meta/prefs.h b/src/meta/prefs.h
+index 9664b5c07..f42d1c63c 100644
+--- a/src/meta/prefs.h
++++ b/src/meta/prefs.h
+@@ -103,6 +103,7 @@ typedef enum
+   META_PREF_AUTO_MAXIMIZE,
+   META_PREF_CENTER_NEW_WINDOWS,
+   META_PREF_DRAG_THRESHOLD,
++  META_PREF_CHECK_ALIVE_TIMEOUT,
+ } MetaPreference;
+ 
+ typedef void (* MetaPrefsChangedFunc) (MetaPreference pref,
+@@ -475,4 +476,6 @@ gboolean           meta_prefs_bell_is_audible      (void);
+ META_EXPORT
+ GDesktopVisualBellType meta_prefs_get_visual_bell_type (void);
+ 
++unsigned int meta_prefs_get_check_alive_timeout (void);
++
+ #endif
+-- 
+2.28.0
+
diff --git a/SPECS/mutter.spec b/SPECS/mutter.spec
index 4600dc9..bca01b2 100644
--- a/SPECS/mutter.spec
+++ b/SPECS/mutter.spec
@@ -8,7 +8,7 @@
 
 Name:          mutter
 Version:       3.32.2
-Release:       50%{?dist}
+Release:       51%{?dist}
 Summary:       Window and compositing manager based on Clutter
 
 License:       GPLv2+
@@ -162,6 +162,9 @@ Patch503: 0002-gpu-kms-Reset-CRTC-mode-and-output-list-if-no-resour.patch
 # Add tile based shadow buffer damage tracking (#1670273)
 Patch504: shadow-buffer-tile-damage.patch
 
+# Add PING_TIMEOUT_DELAY to mutter MetaPreferences (#1886034)
+Patch505: 0001-display-Make-check-alive-timeout-configureable.patch
+
 BuildRequires: chrpath
 BuildRequires: pango-devel
 BuildRequires: startup-notification-devel
@@ -303,6 +306,10 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
 %{_datadir}/mutter-%{mutter_api_version}/tests
 
 %changelog
+* Mon Dec 07 2020 Jonas Ådahl <jadahl@redhat.com> - 3.32.2-51
+- Add PING_TIMEOUT_DELAY to mutter MetaPreferences
+  Resolves: #1886034
+
 * Thu Nov 26 2020 Jonas Ådahl <jadahl@redhat.com> - 3.32.2-50
 - Fix GLX stereo buffer rebase error
   Resolves: #1889528