diff --git a/.gitignore b/.gitignore
index f864c92..8fd4145 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/gtk+-3.24.30.tar.xz
+SOURCES/gtk+-3.24.31.tar.xz
diff --git a/.gtk3.metadata b/.gtk3.metadata
index 1ec4d7b..11e8da2 100644
--- a/.gtk3.metadata
+++ b/.gtk3.metadata
@@ -1 +1 @@
-b16d0ed86c613708b161eb96b56f4df1e52a1e48 SOURCES/gtk+-3.24.30.tar.xz
+4ff8fc4b9e42693aa661bb6e54089014146209b0 SOURCES/gtk+-3.24.31.tar.xz
diff --git a/SOURCES/0001-reftests-Enforce-default-settings.patch b/SOURCES/0001-reftests-Enforce-default-settings.patch
deleted file mode 100644
index e75895d..0000000
--- a/SOURCES/0001-reftests-Enforce-default-settings.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From b541ad48d1c7060e2d38205d4874675e27578b9b Mon Sep 17 00:00:00 2001
-From: Matthias Clasen <mclasen@redhat.com>
-Date: Mon, 19 Jul 2021 13:10:31 -0400
-Subject: [PATCH] reftests: Enforce default settings
-
-Set all settings to their default values, so we
-are less dependent on the environment to be set
-up just right. In particular, this fixes animations
-being disabled when we happen to run in a vm.
----
- testsuite/reftests/gtk-reftest.c | 36 ++++++++++++++++++++++++++++++++
- 1 file changed, 36 insertions(+)
-
-diff --git a/testsuite/reftests/gtk-reftest.c b/testsuite/reftests/gtk-reftest.c
-index 585e1c393d..1a51a9756b 100644
---- a/testsuite/reftests/gtk-reftest.c
-+++ b/testsuite/reftests/gtk-reftest.c
-@@ -368,6 +368,40 @@ add_test_for_file (GFile *file)
-   g_list_free_full (files, g_object_unref);
- }
- 
-+static void
-+enforce_default_settings (void)
-+{
-+  GtkSettings *settings;
-+  GTypeClass *klass;
-+  GParamSpec **pspecs;
-+  guint n_pspecs;
-+  int i;
-+
-+  settings = gtk_settings_get_default ();
-+
-+  klass = g_type_class_ref (G_OBJECT_TYPE (settings));
-+
-+  pspecs = g_object_class_list_properties (klass, &n_pspecs);
-+  for (i = 0; i < n_pspecs; i++)
-+    {
-+      GParamSpec *pspec = pspecs[i];
-+      const GValue *value;
-+
-+      if ((pspec->flags & G_PARAM_WRITABLE) == 0)
-+        continue;
-+
-+      if (pspec->value_type == G_TYPE_HASH_TABLE)
-+        continue;
-+
-+      value = g_param_spec_get_default_value (pspec);
-+      g_object_set_property (settings, pspec->name, value);
-+    }
-+
-+  g_free (pspecs);
-+
-+  g_type_class_unref (klass);
-+}
-+
- int
- main (int argc, char **argv)
- {
-@@ -382,6 +416,8 @@ main (int argc, char **argv)
-   if (!parse_command_line (&argc, &argv))
-     return 1;
- 
-+  enforce_default_settings ();
-+
-   if (arg_base_dir)
-     basedir = arg_base_dir;
-   else
--- 
-2.31.1
-
diff --git a/SOURCES/gtk3-3.24.30-entry-no-emoji-context-menu.patch b/SOURCES/gtk3-3.24.30-entry-no-emoji-context-menu.patch
new file mode 100644
index 0000000..162e2a5
--- /dev/null
+++ b/SOURCES/gtk3-3.24.30-entry-no-emoji-context-menu.patch
@@ -0,0 +1,41 @@
+From 12a00f024c16a4540d5f457389fada2a4886d884 Mon Sep 17 00:00:00 2001
+From: Matthias Clasen <mclasen@redhat.com>
+Date: Tue, 25 May 2021 16:07:58 -0400
+Subject: [PATCH] entry: Only offer Emoji if requested
+
+Only offer the "Insert Emoji" context menu when input
+hints explicitly suggest supporting Emoji.
+---
+ gtk/gtkentry.c    | 2 +-
+ gtk/gtktextview.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
+index a01684101f..1f5a790ccc 100644
+--- a/gtk/gtkentry.c
++++ b/gtk/gtkentry.c
+@@ -9591,7 +9591,7 @@ popup_targets_received (GtkClipboard     *clipboard,
+       gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+ 
+       if (info_entry_priv->show_emoji_icon ||
+-          (gtk_entry_get_input_hints (entry) & GTK_INPUT_HINT_NO_EMOJI) == 0)
++          (gtk_entry_get_input_hints (entry) & GTK_INPUT_HINT_EMOJI) != 0)
+         {
+           menuitem = gtk_menu_item_new_with_mnemonic (_("Insert _Emoji"));
+           gtk_widget_set_sensitive (menuitem,
+diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
+index e0b1e20e87..eb53843fa6 100644
+--- a/gtk/gtktextview.c
++++ b/gtk/gtktextview.c
+@@ -9521,7 +9521,7 @@ popup_targets_received (GtkClipboard     *clipboard,
+       gtk_widget_show (menuitem);
+       gtk_menu_shell_append (GTK_MENU_SHELL (priv->popup_menu), menuitem);
+ 
+-      if ((gtk_text_view_get_input_hints (text_view) & GTK_INPUT_HINT_NO_EMOJI) == 0)
++      if ((gtk_text_view_get_input_hints (text_view) & GTK_INPUT_HINT_EMOJI) != 0)
+         {
+           menuitem = gtk_menu_item_new_with_mnemonic (_("Insert _Emoji"));
+           gtk_widget_set_sensitive (menuitem, can_insert);
+-- 
+2.31.1
+
diff --git a/SOURCES/gtk3-3.24.31-meson-reftest.patch b/SOURCES/gtk3-3.24.31-meson-reftest.patch
new file mode 100644
index 0000000..16873e2
--- /dev/null
+++ b/SOURCES/gtk3-3.24.31-meson-reftest.patch
@@ -0,0 +1,53 @@
+From 7f295eeb324c3d793bdf302fa7ea9ebdd8a52bcf Mon Sep 17 00:00:00 2001
+From: David King <amigadave@amigadave.com>
+Date: Thu, 23 Dec 2021 10:53:57 +0000
+Subject: [PATCH] meson: Do not install reftests
+
+Match the testsuite in the main branch.
+---
+ testsuite/reftests/meson.build | 25 +------------------------
+ 1 file changed, 1 insertion(+), 24 deletions(-)
+
+diff --git a/testsuite/reftests/meson.build b/testsuite/reftests/meson.build
+index b4bf6784cc..2135ebb434 100644
+--- a/testsuite/reftests/meson.build
++++ b/testsuite/reftests/meson.build
+@@ -22,9 +22,7 @@ libreftest = shared_library('reftest',
+ 
+ gtk_reftest = executable('gtk-reftest', 'gtk-reftest.c',
+   link_with : [libgtkreftestprivate, libreftest],
+-  dependencies : libgtk_dep,
+-  install: get_option('installed_tests'),
+-  install_dir: installed_test_bindir)
++  dependencies : libgtk_dep)
+ 
+ test_data = [
+   '721800-0px-dotted-border.css',
+@@ -457,24 +455,3 @@ foreach testname : test_data
+          is_parallel: false)
+   endif
+ endforeach
+-
+-reftests_installed_tests = [
+-  'reftests-dark.test',
+-  'reftests-hc.test',
+-  'reftests-hci.test',
+-  'reftests.test',
+-]
+-
+-if get_option('installed_tests')
+-  test_cdata = configuration_data()
+-  test_cdata.set('libexecdir', gtk_libexecdir)
+-
+-  foreach t: reftests_installed_tests
+-    configure_file(input: '@0@.in'.format(t),
+-                   output: t,
+-                   configuration: test_cdata,
+-                   install_dir: installed_test_datadir)
+-  endforeach
+-
+-  install_data(test_data, install_dir: testexecdir)
+-endif
+-- 
+2.33.1
+
diff --git a/SOURCES/gtk3-3.24.31-meson.patch b/SOURCES/gtk3-3.24.31-meson.patch
new file mode 100644
index 0000000..0d97626
--- /dev/null
+++ b/SOURCES/gtk3-3.24.31-meson.patch
@@ -0,0 +1,316 @@
+From 9bad0a2d5e35fdd2d89efedae1298d7c3dd158a3 Mon Sep 17 00:00:00 2001
+From: David King <amigadave@amigadave.com>
+Date: Tue, 21 Dec 2021 10:09:29 +0000
+Subject: [PATCH 1/3] meson: Remove missing reftests
+
+Removed from autotools build in commit
+93e1f7f1ec709325fe9b0554b92add06ad988ae8.
+---
+ testsuite/reftests/meson.build | 7 -------
+ 1 file changed, 7 deletions(-)
+
+diff --git a/testsuite/reftests/meson.build b/testsuite/reftests/meson.build
+index 9bfe1bb698..b4bf6784cc 100644
+--- a/testsuite/reftests/meson.build
++++ b/testsuite/reftests/meson.build
+@@ -291,9 +291,6 @@ test_data = [
+   'label-text-shadow-clipping.css',
+   'label-text-shadow-clipping.ref.ui',
+   'label-text-shadow-clipping.ui',
+-  'label-text-shadow-changes-modify-clip.css',
+-  'label-text-shadow-changes-modify-clip.ref.ui',
+-  'label-text-shadow-changes-modify-clip.ui',
+   'label-width-chars-dont-shrink.ref.ui',
+   'label-width-chars-dont-shrink.ui',
+   'label-wrap-justify.ref.ui',
+@@ -405,10 +402,6 @@ test_data = [
+   'textview-margins.ui',
+   'textview-tags.ref.ui',
+   'textview-tags.ui',
+-  'toplevel-vs-popup.ref.ui',
+-  'toplevel-vs-popup.ui',
+-  'treeview-crash-too-wide.ref.ui',
+-  'treeview-crash-too-wide.ui',
+   'treeview-fixed-height.css',
+   'treeview-fixed-height.ref.ui',
+   'treeview-fixed-height.ui',
+-- 
+2.33.1
+
+
+From 2b566f0633a740cca2b30941231f0507de873002 Mon Sep 17 00:00:00 2001
+From: David King <amigadave@amigadave.com>
+Date: Tue, 21 Dec 2021 11:10:37 +0000
+Subject: [PATCH 2/3] meson: Install example schema XML
+
+---
+ examples/application10/meson.build | 4 +++-
+ examples/application5/meson.build  | 4 +++-
+ examples/application6/meson.build  | 4 +++-
+ examples/application7/meson.build  | 4 +++-
+ examples/application8/meson.build  | 4 +++-
+ examples/application9/meson.build  | 4 +++-
+ 6 files changed, 18 insertions(+), 6 deletions(-)
+
+diff --git a/examples/application10/meson.build b/examples/application10/meson.build
+index ce842ae794..417a64155e 100644
+--- a/examples/application10/meson.build
++++ b/examples/application10/meson.build
+@@ -5,7 +5,7 @@ app10_resources = gnome.compile_resources(
+   source_dir: '.'
+ )
+ 
+-app10_schemas = gnome.compile_schemas()
++app10_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
+ 
+ 
+ app10 = executable(
+@@ -21,3 +21,5 @@ app10 = executable(
+   app10_schemas,
+   dependencies: libgtk_dep
+ )
++
++install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
+diff --git a/examples/application5/meson.build b/examples/application5/meson.build
+index f0fed1ca59..8ecb41948e 100644
+--- a/examples/application5/meson.build
++++ b/examples/application5/meson.build
+@@ -5,7 +5,7 @@ app5_resources = gnome.compile_resources(
+   source_dir: '.'
+ )
+ 
+-app5_schemas = gnome.compile_schemas()
++app5_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
+ 
+ 
+ app5 = executable(
+@@ -19,3 +19,5 @@ app5 = executable(
+   app5_schemas,
+   dependencies: libgtk_dep
+ )
++
++install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
+diff --git a/examples/application6/meson.build b/examples/application6/meson.build
+index 2d923f35a3..8a172e2e26 100644
+--- a/examples/application6/meson.build
++++ b/examples/application6/meson.build
+@@ -5,7 +5,7 @@ app6_resources = gnome.compile_resources(
+   source_dir: '.'
+ )
+ 
+-app6_schemas = gnome.compile_schemas()
++app6_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
+ 
+ 
+ app6 = executable(
+@@ -21,3 +21,5 @@ app6 = executable(
+   app6_schemas,
+   dependencies: libgtk_dep
+ )
++
++install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
+diff --git a/examples/application7/meson.build b/examples/application7/meson.build
+index cc32f36ad0..4c46221085 100644
+--- a/examples/application7/meson.build
++++ b/examples/application7/meson.build
+@@ -5,7 +5,7 @@ app7_resources = gnome.compile_resources(
+   source_dir: '.'
+ )
+ 
+-app7_schemas = gnome.compile_schemas()
++app7_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
+ 
+ 
+ app7 = executable(
+@@ -21,3 +21,5 @@ app7 = executable(
+   app7_schemas,
+   dependencies: libgtk_dep
+ )
++
++install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
+diff --git a/examples/application8/meson.build b/examples/application8/meson.build
+index 1192f4d688..ee49034d2b 100644
+--- a/examples/application8/meson.build
++++ b/examples/application8/meson.build
+@@ -5,7 +5,7 @@ app8_resources = gnome.compile_resources(
+   source_dir: '.'
+ )
+ 
+-app8_schemas = gnome.compile_schemas()
++app8_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
+ 
+ 
+ app8 = executable(
+@@ -21,3 +21,5 @@ app8 = executable(
+   app8_schemas,
+   dependencies: libgtk_dep
+ )
++
++install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
+diff --git a/examples/application9/meson.build b/examples/application9/meson.build
+index fccee738cb..46b77c4d17 100644
+--- a/examples/application9/meson.build
++++ b/examples/application9/meson.build
+@@ -5,7 +5,7 @@ app9_resources = gnome.compile_resources(
+   source_dir: '.'
+ )
+ 
+-app9_schemas = gnome.compile_schemas()
++app9_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
+ 
+ 
+ app9 = executable(
+@@ -21,3 +21,5 @@ app9 = executable(
+   app9_schemas,
+   dependencies: libgtk_dep
+ )
++
++install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
+-- 
+2.33.1
+
+
+From e36849e6a397bc7e0356bd51583d79f821f9c3db Mon Sep 17 00:00:00 2001
+From: David King <amigadave@amigadave.com>
+Date: Tue, 21 Dec 2021 14:04:40 +0000
+Subject: [PATCH 3/3] Revert "meson: simplify builtin_immodules build option"
+
+This reverts commit 749a58ab26bc01381d66ccefdd3aa42a34353e70.
+
+This maintains feature parity with the autotools build.
+---
+ gtk/meson.build           |  2 +-
+ meson.build               | 30 ++++++++++++++++++++++++------
+ meson_options.txt         |  4 ++--
+ modules/input/meson.build |  2 +-
+ 4 files changed, 28 insertions(+), 10 deletions(-)
+
+diff --git a/gtk/meson.build b/gtk/meson.build
+index 9754686cca..12aa7db5c3 100644
+--- a/gtk/meson.build
++++ b/gtk/meson.build
+@@ -959,7 +959,7 @@ foreach l: immodules
+   cond = l.get(2, true)
+   cflags = l.get(3, [])
+ 
+-  if cond and builtin_immodules
++  if cond and (builtin_immodules.contains(name) or builtin_all_immodules)
+     gtk_cargs += ['-DINCLUDE_IM_@0@'.format(name.underscorify())]
+     mod = static_library('staticimmodule-@0@'.format(name),
+                          sources + gtk_dep_sources,
+diff --git a/meson.build b/meson.build
+index 16d1597116..15cca3de15 100644
+--- a/meson.build
++++ b/meson.build
+@@ -499,6 +499,8 @@ else
+   cdata.set_quoted('ISO_CODES_PREFIX', get_option('prefix'))
+ endif
+ 
++backend_immodules = []
++
+ pc_gdk_extra_libs = []
+ 
+ cairo_found_type = cairo_dep.type_name()
+@@ -554,6 +556,7 @@ if wayland_enabled
+   wlprotocolsdep = dependency('wayland-protocols', version: wayland_proto_req)
+   wlcursordep    = dependency('wayland-cursor', version: wayland_req)
+   wlegldep       = dependency('wayland-egl')
++  backend_immodules += ['wayland']
+ 
+   wayland_pkgs = [
+     'wayland-client', wayland_req,
+@@ -578,6 +581,8 @@ if x11_enabled
+   fontconfig_dep = dependency('fontconfig', fallback: ['fontconfig', 'fontconfig_dep'])
+   atkbridge_dep  = dependency('atk-bridge-2.0', version: at_spi2_atk_req)
+ 
++  backend_immodules += ['xim']
++
+   x11_pkgs = ['fontconfig', 'x11', 'xext', 'xi', 'xrandr']
+ 
+   if xcursor_dep.found()
+@@ -656,10 +661,12 @@ endif
+ 
+ if broadway_enabled
+   pc_gdk_extra_libs += ['-lz']
++  backend_immodules += ['broadway']
+ endif
+ 
+ if quartz_enabled
+   pc_gdk_extra_libs += ['-Wl,-framework,Cocoa', '-Wl,-framework,Carbon', '-Wl,-framework,CoreGraphics']
++  backend_immodules += ['quartz']
+ endif
+ 
+ extra_demo_ldflags = []
+@@ -674,6 +681,7 @@ if win32_enabled
+     pc_gdk_extra_libs += ['-Wl,-luuid']
+   endif
+   pc_gdk_extra_libs += ['-lwinmm', '-ldwmapi', '-lsetupapi', '-lcfgmgr32']
++  backend_immodules += ['ime']
+ 
+   # Check whether libepoxy is built with EGL support on Windows
+   win32_has_egl = epoxy_dep.get_variable(
+@@ -684,20 +692,30 @@ endif
+ 
+ # IMModules stuff-unfortunately we need to put items here
+ # as they can be built as modules or built directly into GTK
++builtin_all_immodules = false
++
+ builtin_modules_opt = get_option('builtin_immodules')
+-if builtin_modules_opt == 'auto'
++builtin_immodules = []
++
++if builtin_modules_opt == ''
+   if os_win32
+     # Current MSVC projects build all immodules directly into GTK by default,
+     # as does the mingw autotools build
+     message('IMModules are built into GTK for MSVC builds by default')
+-    builtin_immodules = true
++    builtin_immodules = ['all']
+   else
+-    builtin_immodules = false
++    builtin_immodules = ['none']
+   endif
+-elif builtin_modules_opt == 'yes'
+-  builtin_immodules = true
+ else
+-  builtin_immodules = false
++  builtin_immodules = builtin_modules_opt.split(',')
++endif
++
++if builtin_immodules.contains('none')
++  builtin_immodules = []
++elif builtin_immodules.contains('all')
++  builtin_all_immodules = true
++elif builtin_immodules.contains('backend')
++  builtin_immodules += backend_immodules
+ endif
+ 
+ proto_sources = [
+diff --git a/meson_options.txt b/meson_options.txt
+index 1ca55b1467..94099aa01e 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -45,5 +45,5 @@ option('installed_tests', type: 'boolean', value: 'false',
+   description : 'enable installed tests')
+ 
+ # input modules
+-option('builtin_immodules', type: 'combo', choices : ['yes', 'no', 'auto'],
+-       value: 'auto', description: 'Build immodules into GTK so/DLL')
++option('builtin_immodules', type: 'string',
++       value: '', description: 'Build specified immodules into GTK so/DLL (comma-separated list), "all", "none" or "backend"')
+diff --git a/modules/input/meson.build b/modules/input/meson.build
+index 7b201af894..95534b05ec 100644
+--- a/modules/input/meson.build
++++ b/modules/input/meson.build
+@@ -7,7 +7,7 @@ foreach l: immodules
+   cond = l.get(2, true)
+   cflags = l.get(3, [])
+ 
+-  if cond and not builtin_immodules
++  if cond and not (builtin_immodules.contains(name) or builtin_all_immodules)
+     shared_module('im-@0@'.format(name),
+                   immod_sources,
+                   c_args: common_cflags + cflags,
+-- 
+2.33.1
+
diff --git a/SOURCES/gtk3-3.24.31-treeview-a11y-leak-fix.patch b/SOURCES/gtk3-3.24.31-treeview-a11y-leak-fix.patch
new file mode 100644
index 0000000..f2dc206
--- /dev/null
+++ b/SOURCES/gtk3-3.24.31-treeview-a11y-leak-fix.patch
@@ -0,0 +1,27 @@
+From cc977be580b9a7c2683810fe36fe485ee8583ec0 Mon Sep 17 00:00:00 2001
+From: Matthias Clasen <mclasen@redhat.com>
+Date: Fri, 11 Feb 2022 18:39:55 -0500
+Subject: [PATCH] Fix a leak of cell accessibles
+
+gtk_container_cell_accessible_add_child is transfer none,
+so we need to drop the reference we hold, otherwise it
+leaks.
+---
+ gtk/a11y/gtktreeviewaccessible.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/gtk/a11y/gtktreeviewaccessible.c b/gtk/a11y/gtktreeviewaccessible.c
+index c1a2097a1e..c2b7e8add0 100644
+--- a/gtk/a11y/gtktreeviewaccessible.c
++++ b/gtk/a11y/gtktreeviewaccessible.c
+@@ -413,6 +413,7 @@ create_cell_accessible (GtkTreeView           *treeview,
+         {
+           cell = create_cell_accessible_for_renderer (l->data, GTK_WIDGET (treeview), ATK_OBJECT (container));
+           gtk_container_cell_accessible_add_child (container, cell);
++          g_object_unref (cell);
+         }
+ 
+       cell = GTK_CELL_ACCESSIBLE (container);
+-- 
+GitLab
+
diff --git a/SPECS/gtk3.spec b/SPECS/gtk3.spec
index 865c7db..f8fd520 100644
--- a/SPECS/gtk3.spec
+++ b/SPECS/gtk3.spec
@@ -18,25 +18,41 @@
 %global __provides_exclude_from ^%{_libdir}/gtk-3.0
 
 Name: gtk3
-Version: 3.24.30
-Release: 3%{?dist}
+Version: 3.24.31
+Release: 2%{?dist}
 Summary: GTK+ graphical user interface library
 
 License: LGPLv2+
 URL: http://www.gtk.org
 Source0: http://download.gnome.org/sources/gtk+/3.24/gtk+-%{version}.tar.xz
 
-# Upstream patch to make reftests work in a vm
-Patch1: 0001-reftests-Enforce-default-settings.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=2025439
+Patch0:  gtk3-3.24.30-entry-no-emoji-context-menu.patch
+
+# https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4273
+Patch1:  gtk3-3.24.31-meson.patch
+# https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4280
+Patch2:  gtk3-3.24.31-meson-reftest.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=2055013
+Patch3:  gtk3-3.24.31-treeview-a11y-leak-fix.patch
 
 BuildRequires: pkgconfig(atk) >= %{atk_version}
 BuildRequires: pkgconfig(atk-bridge-2.0)
-BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version}
-BuildRequires: pkgconfig(gobject-introspection-1.0)
+BuildRequires: pkgconfig(avahi-gobject)
 BuildRequires: pkgconfig(cairo) >= %{cairo_version}
 BuildRequires: pkgconfig(cairo-gobject) >= %{cairo_version}
-BuildRequires: pkgconfig(pango) >= %{pango_version}
+BuildRequires: pkgconfig(colord)
+BuildRequires: pkgconfig(egl)
+BuildRequires: pkgconfig(epoxy)
 BuildRequires: pkgconfig(gdk-pixbuf-2.0) >= %{gdk_pixbuf_version}
+BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version}
+BuildRequires: pkgconfig(gobject-introspection-1.0)
+BuildRequires: pkgconfig(pango) >= %{pango_version}
+BuildRequires: pkgconfig(tracker-sparql-3.0)
+BuildRequires: pkgconfig(wayland-client) >= %{wayland_version}
+BuildRequires: pkgconfig(wayland-cursor) >= %{wayland_version}
+BuildRequires: pkgconfig(wayland-egl) >= %{wayland_version}
+BuildRequires: pkgconfig(wayland-protocols) >= %{wayland_protocols_version}
 BuildRequires: pkgconfig(xi)
 BuildRequires: pkgconfig(xrandr) >= %{xrandr_version}
 BuildRequires: pkgconfig(xrender)
@@ -46,22 +62,12 @@ BuildRequires: pkgconfig(xfixes)
 BuildRequires: pkgconfig(xinerama)
 BuildRequires: pkgconfig(xcomposite)
 BuildRequires: pkgconfig(xdamage)
-BuildRequires: pkgconfig(epoxy)
-BuildRequires: gettext
-BuildRequires: gtk-doc
+BuildRequires: pkgconfig(xkbcommon)
 BuildRequires: cups-devel
-BuildRequires: pkgconfig(rest-0.7)
-BuildRequires: pkgconfig(json-glib-1.0)
-BuildRequires: pkgconfig(colord)
-BuildRequires: pkgconfig(avahi-gobject)
 BuildRequires: desktop-file-utils
-BuildRequires: pkgconfig(egl)
-BuildRequires: pkgconfig(wayland-client) >= %{wayland_version}
-BuildRequires: pkgconfig(wayland-cursor) >= %{wayland_version}
-BuildRequires: pkgconfig(wayland-egl) >= %{wayland_version}
-BuildRequires: pkgconfig(wayland-protocols) >= %{wayland_protocols_version}
-BuildRequires: pkgconfig(xkbcommon)
-BuildRequires: make
+BuildRequires: gettext
+BuildRequires: gtk-doc
+BuildRequires: meson
 
 # standard icons
 Requires: adwaita-icon-theme
@@ -89,6 +95,9 @@ Recommends: dconf%{?_isa}
 # For sound theme events in gtk3 apps
 Recommends: libcanberra-gtk3%{?_isa}
 
+# For Tracker search in the file chooser.
+Recommends: tracker-miners
+
 %description
 GTK+ is a multi-platform toolkit for creating graphical user
 interfaces. Offering a complete set of widgets, GTK+ is suitable for
@@ -154,31 +163,22 @@ the functionality of the installed %{name} package.
 
 %build
 export CFLAGS='-fno-strict-aliasing %optflags'
-(if ! test -x configure; then NOCONFIGURE=1 ./autogen.sh; CONFIGFLAGS=--enable-gtk-doc; fi;
- %configure $CONFIGFLAGS \
-        --enable-xkb \
-        --enable-xinerama \
-        --enable-xrandr \
-        --enable-xfixes \
-        --enable-xcomposite \
-        --enable-xdamage \
-        --enable-x11-backend \
-        --enable-wayland-backend \
+%meson \
 %if 0%{?with_broadway}
-        --enable-broadway-backend \
+        -Dbroadway_backend=true \
 %endif
-        --enable-colord \
-        --enable-installed-tests \
-        --with-included-immodules=wayland
-)
-
-# fight unused direct deps
-sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
-
-make %{?_smp_mflags}
+        -Dbuiltin_immodules=wayland,waylandgtk \
+        -Dcolord=yes \
+        -Dcloudproviders=false \
+        -Dgtk_doc=true \
+        -Dinstalled_tests=true \
+        -Dman=true \
+        -Dtracker3=true \
+        -Dxinerama=yes \
+%meson_build
 
 %install
-%make_install RUN_QUERY_IMMODULES_TEST=false
+%meson_install
 
 %find_lang gtk30
 %find_lang gtk30-properties
@@ -189,13 +189,6 @@ make %{?_smp_mflags}
 
 echo ".so man1/gtk-query-immodules-3.0.1" > $RPM_BUILD_ROOT%{_mandir}/man1/gtk-query-immodules-3.0-%{__isa_bits}.1
 
-# Remove unpackaged files
-find $RPM_BUILD_ROOT -name '*.la' -delete
-
-%if !0%{?with_broadway}
-rm $RPM_BUILD_ROOT%{_mandir}/man1/broadwayd.1*
-%endif
-
 touch $RPM_BUILD_ROOT%{_libdir}/gtk-3.0/%{bin_version}/immodules.cache
 
 mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/gtk-3.0
@@ -238,6 +231,8 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache &>/dev/null || :
 %{_datadir}/glib-2.0/schemas/org.gtk.Settings.EmojiChooser.gschema.xml
 %{_datadir}/glib-2.0/schemas/org.gtk.Settings.FileChooser.gschema.xml
 %{_datadir}/glib-2.0/schemas/org.gtk.exampleapp.gschema.xml
+%dir %{_datadir}/gtk-3.0
+%{_datadir}/gtk-3.0/emoji/
 %if 0%{?with_broadway}
 %{_bindir}/broadwayd
 %{_mandir}/man1/broadwayd.1*
@@ -289,7 +284,6 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache &>/dev/null || :
 %{_datadir}/gettext/
 %{_datadir}/gir-1.0
 %{_datadir}/glib-2.0/schemas/org.gtk.Demo.gschema.xml
-%dir %{_datadir}/gtk-3.0
 %{_datadir}/gtk-3.0/gtkbuilder.rng
 %{_datadir}/gtk-3.0/valgrind/
 %{_mandir}/man1/gtk3-demo.1*
@@ -308,6 +302,15 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache &>/dev/null || :
 %{_datadir}/installed-tests/
 
 %changelog
+* Thu Feb 17 2022 David King <amigadave@amigadave.com> - 3.24.31-2
+- Fix treeview a11y refcount leak (#2055013)
+
+* Thu Jan 13 2022 David King <amigadave@amigadave.com> - 3.24.31-1
+- Rebase to 3.24.31 (#2010192)
+
+* Thu Jan 13 2022 David King <amigadave@amigadave.com> - 3.24.30-4
+- No entry emoji context menu (#2025439)
+
 * Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 3.24.30-3
 - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
   Related: rhbz#1991688