Update to 3.32.1

This commit is contained in:
Florian Müllner 2019-04-17 21:31:07 +02:00
parent 238cfe5ac4
commit 6e450d5715
8 changed files with 7 additions and 545 deletions

1
.gitignore vendored
View File

@ -151,3 +151,4 @@ mutter-2.31.5.tar.bz2
/mutter-3.31.91.tar.xz
/mutter-3.31.92.tar.xz
/mutter-3.32.0.tar.xz
/mutter-3.32.1.tar.xz

View File

@ -1,180 +0,0 @@
From 91c323c9fd20bb3b6a194b10b7a26bf6045e391f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 12 Mar 2019 01:35:13 +0100
Subject: [PATCH] build: Don't use absolute paths with subdir keyword
Meson 0.50.0 made passing an absolute path to install_headers()'
subdir keyword a fatal error. This means we have to track both
relative (to includedir) paths for header subdirs and absolute
paths for generated headers now :-(
https://gitlab.gnome.org/GNOME/mutter/merge_requests/492
---
clutter/clutter/meson.build | 9 +++++----
clutter/meson.build | 3 ++-
cogl/cogl-gles2/meson.build | 4 ++--
cogl/cogl-pango/meson.build | 4 ++--
cogl/cogl-path/meson.build | 3 ++-
cogl/cogl/meson.build | 7 ++++---
cogl/meson.build | 3 ++-
src/meson.build | 3 ++-
src/meta/meson.build | 2 +-
9 files changed, 22 insertions(+), 16 deletions(-)
diff --git a/clutter/clutter/meson.build b/clutter/clutter/meson.build
index 879ea1664..671d790df 100644
--- a/clutter/clutter/meson.build
+++ b/clutter/clutter/meson.build
@@ -1,3 +1,4 @@
+clutter_clutter_includesubdir = join_paths(clutter_includesubdir, 'clutter')
clutter_clutter_includedir = join_paths(clutter_includedir, 'clutter')
clutter_headers = [
@@ -577,16 +578,16 @@ if have_introspection
endif
install_headers(clutter_headers,
- subdir: clutter_clutter_includedir)
+ subdir: clutter_clutter_includesubdir)
install_headers(cally_headers,
- subdir: join_paths(clutter_includedir, 'cally'))
+ subdir: join_paths(clutter_includesubdir, 'cally'))
install_headers(clutter_deprecated_headers,
- subdir: join_paths(clutter_clutter_includedir, 'deprecated'))
+ subdir: join_paths(clutter_clutter_includesubdir, 'deprecated'))
install_headers(clutter_x11_headers,
- subdir: join_paths(clutter_clutter_includedir, 'x11'))
+ subdir: join_paths(clutter_clutter_includesubdir, 'x11'))
pkg.generate(libmutter_clutter,
name: 'Mutters Clutter',
diff --git a/clutter/meson.build b/clutter/meson.build
index 053cfa751..1397be179 100644
--- a/clutter/meson.build
+++ b/clutter/meson.build
@@ -1,4 +1,5 @@
-clutter_includedir = join_paths(pkgincludedir, 'clutter')
+clutter_includesubdir = join_paths(pkgname, 'clutter')
+clutter_includedir = join_paths(includedir, clutter_includesubdir)
clutter_srcdir = join_paths(top_srcdir, 'clutter')
clutter_builddir = join_paths(builddir, 'clutter')
diff --git a/cogl/cogl-gles2/meson.build b/cogl/cogl-gles2/meson.build
index d446ca4c5..fbe3eb19f 100644
--- a/cogl/cogl-gles2/meson.build
+++ b/cogl/cogl-gles2/meson.build
@@ -27,9 +27,9 @@ libmutter_cogl_gles2 = shared_library('mutter-cogl-gles2-' + libmutter_api_versi
install: true,
)
-cogl_gles2_includedir = join_paths(cogl_includedir, 'cogl-gles2/GLES2')
+cogl_gles2_includesubdir = join_paths(cogl_includesubdir, 'cogl-gles2/GLES2')
install_headers(cogl_gles2_public_headers,
- subdir: cogl_gles2_includedir)
+ subdir: cogl_gles2_includesubdir)
pkg.generate(libmutter_cogl_gles2,
name: 'CoglGles2',
diff --git a/cogl/cogl-pango/meson.build b/cogl/cogl-pango/meson.build
index fb4d26142..787ec0132 100644
--- a/cogl/cogl-pango/meson.build
+++ b/cogl/cogl-pango/meson.build
@@ -70,8 +70,8 @@ if have_introspection
)
endif
-cogl_pango_includedir = join_paths(cogl_includedir, 'cogl-pango')
-install_headers(cogl_pango_public_headers, subdir: cogl_pango_includedir)
+cogl_pango_includesubdir = join_paths(cogl_includesubdir, 'cogl-pango')
+install_headers(cogl_pango_public_headers, subdir: cogl_pango_includesubdir)
pkg.generate(libmutter_cogl_pango,
name: 'CoglPango',
diff --git a/cogl/cogl-path/meson.build b/cogl/cogl-path/meson.build
index 6faba674e..e086a622f 100644
--- a/cogl/cogl-path/meson.build
+++ b/cogl/cogl-path/meson.build
@@ -1,3 +1,4 @@
+cogl_path_includesubdir = join_paths(cogl_includesubdir, 'cogl-path')
cogl_path_includedir = join_paths(cogl_includedir, 'cogl-path')
cogl_path_public_headers = [
@@ -76,7 +77,7 @@ libmutter_cogl_path_dep = declare_dependency(
)
install_headers(cogl_path_public_headers,
- subdir: cogl_path_includedir)
+ subdir: cogl_path_includesubdir)
pkg.generate(libmutter_cogl_path,
name: 'CoglPath',
diff --git a/cogl/cogl/meson.build b/cogl/cogl/meson.build
index 5d80e8750..6bc64e696 100644
--- a/cogl/cogl/meson.build
+++ b/cogl/cogl/meson.build
@@ -1,3 +1,4 @@
+cogl_cogl_includesubdir = join_paths(cogl_includesubdir, 'cogl')
cogl_cogl_includedir = join_paths(cogl_includedir, 'cogl')
cdata = configuration_data()
@@ -514,16 +515,16 @@ install_headers([
cogl_headers,
cogl_nonintrospected_headers,
],
- subdir: cogl_cogl_includedir)
+ subdir: cogl_cogl_includesubdir)
install_headers([
cogl_deprecated_headers,
cogl_deprecated_nonintrospected_headers,
],
- subdir: join_paths(cogl_cogl_includedir, 'deprecated'))
+ subdir: join_paths(cogl_cogl_includesubdir, 'deprecated'))
install_headers(cogl_gl_prototype_headers,
- subdir: join_paths(cogl_cogl_includedir, 'gl-prototypes'))
+ subdir: join_paths(cogl_cogl_includesubdir, 'gl-prototypes'))
pkg.generate(libmutter_cogl,
name: 'Cogl',
diff --git a/cogl/meson.build b/cogl/meson.build
index d76b86589..356d596f5 100644
--- a/cogl/meson.build
+++ b/cogl/meson.build
@@ -1,4 +1,5 @@
-cogl_includedir = join_paths(pkgincludedir, 'cogl')
+cogl_includesubdir = join_paths(pkgname, 'cogl')
+cogl_includedir = join_paths(includedir, cogl_includesubdir)
cogl_srcdir = join_paths(top_srcdir, 'cogl')
cogl_builddir = join_paths(builddir, 'cogl')
diff --git a/src/meson.build b/src/meson.build
index 8779c956e..9919b5cfb 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1,4 +1,5 @@
-mutter_includedir = join_paths(pkgincludedir, 'meta')
+mutter_includesubdir = join_paths(pkgname, 'meta')
+mutter_includedir = join_paths(includedir, mutter_includesubdir)
mutter_includes = [
include_directories('.'),
diff --git a/src/meta/meson.build b/src/meta/meson.build
index 53c4723a2..2bd50e4f7 100644
--- a/src/meta/meson.build
+++ b/src/meta/meson.build
@@ -48,7 +48,7 @@ if have_x11
endif
install_headers(mutter_public_headers,
- subdir: mutter_includedir
+ subdir: mutter_includesubdir
)
mutter_public_header_files = files(mutter_public_headers)
--
2.21.0

View File

@ -1,28 +0,0 @@
From 639be849cd80b38567f6abb0279bef59f17ac5ca Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Mon, 18 Mar 2019 11:59:26 +0100
Subject: [PATCH 1/3] core: Remove startup sequences after timeout
The complete/remove semantics were split to cater for presenting windows,
so we must now separately do both here.
Related: https://gitlab.gnome.org/GNOME/mutter/issues/501
---
src/core/startup-notification.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/core/startup-notification.c b/src/core/startup-notification.c
index 8bcb0f385..d2d0d1362 100644
--- a/src/core/startup-notification.c
+++ b/src/core/startup-notification.c
@@ -454,6 +454,7 @@ startup_sequence_timeout (void *data)
meta_startup_sequence_get_id (sequence));
meta_startup_sequence_complete (sequence);
+ meta_startup_notification_remove_sequence (sn, sequence);
}
g_slist_free (ctod.list);
--
2.21.0

View File

@ -1,127 +0,0 @@
From 63124e3e8a675725c729d4a99b994a83517a5c1a Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Thu, 18 Oct 2018 02:08:24 +0200
Subject: [PATCH] wayland: Defer text_input.done on an idle
IBus naturally doesn't know how to implement the text-input protocol,
and some input methods emit event streams that are incompatible with the
protocol, if not assumed to be part of an grouped series of events. As
IBus doesn't have any API to let us know about such groupings, let's
fake it by adding a specially crafted idle callback.
The idle callback has a known limitation; if there is an idle callback
with a higher priority, that either doesn't remove itself, or
reschedules itself before the next idle, we'll never get triggered.
This, however, is unlikely to actually be the bigger problem in such
situations, as it'd likely mean we'd have a 100% CPU bug.
https://gitlab.gnome.org/GNOME/gtk/issues/1365
---
src/wayland/meta-wayland-text-input.c | 60 ++++++++++++++++++++++++---
1 file changed, 54 insertions(+), 6 deletions(-)
diff --git a/src/wayland/meta-wayland-text-input.c b/src/wayland/meta-wayland-text-input.c
index 8681430217..0493760bd1 100644
--- a/src/wayland/meta-wayland-text-input.c
+++ b/src/wayland/meta-wayland-text-input.c
@@ -70,6 +70,8 @@ struct _MetaWaylandTextInput
uint32_t content_type_purpose;
uint32_t text_change_cause;
gboolean enabled;
+
+ guint done_idle_id;
};
struct _MetaWaylandTextInputFocus
@@ -114,6 +116,52 @@ increment_serial (MetaWaylandTextInput *text_input,
GUINT_TO_POINTER (serial + 1));
}
+static gboolean
+done_idle_cb (gpointer user_data)
+{
+ ClutterInputFocus *focus = user_data;
+ MetaWaylandTextInput *text_input;
+ struct wl_resource *resource;
+
+ text_input = META_WAYLAND_TEXT_INPUT_FOCUS (focus)->text_input;
+
+ wl_resource_for_each (resource, &text_input->focus_resource_list)
+ {
+ zwp_text_input_v3_send_done (resource,
+ lookup_serial (text_input, resource));
+ }
+
+ text_input->done_idle_id = 0;
+ return G_SOURCE_REMOVE;
+}
+
+static void
+meta_wayland_text_input_focus_defer_done (ClutterInputFocus *focus)
+{
+ MetaWaylandTextInput *text_input;
+
+ text_input = META_WAYLAND_TEXT_INPUT_FOCUS (focus)->text_input;
+
+ if (text_input->done_idle_id != 0)
+ return;
+
+ /* This operates on 3 principles:
+ * - GDBus uses G_PRIORITY_DEFAULT to put messages in the thread default main
+ * context.
+ * - All relevant ClutterInputFocus methods are ultimately backed by
+ * DBus methods inside IBus.
+ * - We want to run .done after them all. The slightly lower
+ * G_PRIORITY_DEFAULT + 1 priority should ensure we at least group
+ * all messages seen so far.
+ *
+ * FIXME: .done may be delayed indefinitely if there's a high enough
+ * priority idle source in the main loop. It's unlikely that
+ * recurring idles run at this high priority though.
+ */
+ text_input->done_idle_id = g_idle_add_full (G_PRIORITY_DEFAULT + 1,
+ done_idle_cb, focus, NULL);
+}
+
static void
meta_wayland_text_input_focus_delete_surrounding (ClutterInputFocus *focus,
guint cursor,
@@ -127,9 +175,9 @@ meta_wayland_text_input_focus_delete_surrounding (ClutterInputFocus *focus,
wl_resource_for_each (resource, &text_input->focus_resource_list)
{
zwp_text_input_v3_send_delete_surrounding_text (resource, cursor, len);
- zwp_text_input_v3_send_done (resource,
- lookup_serial (text_input, resource));
}
+
+ meta_wayland_text_input_focus_defer_done (focus);
}
static void
@@ -145,9 +193,9 @@ meta_wayland_text_input_focus_commit_text (ClutterInputFocus *focus,
{
zwp_text_input_v3_send_preedit_string (resource, NULL, 0, 0);
zwp_text_input_v3_send_commit_string (resource, text);
- zwp_text_input_v3_send_done (resource,
- lookup_serial (text_input, resource));
}
+
+ meta_wayland_text_input_focus_defer_done (focus);
}
static void
@@ -163,9 +211,9 @@ meta_wayland_text_input_focus_set_preedit_text (ClutterInputFocus *focus,
wl_resource_for_each (resource, &text_input->focus_resource_list)
{
zwp_text_input_v3_send_preedit_string (resource, text, cursor, cursor);
- zwp_text_input_v3_send_done (resource,
- lookup_serial (text_input, resource));
}
+
+ meta_wayland_text_input_focus_defer_done (focus);
}
static void
--
2.19.1

View File

@ -1,130 +0,0 @@
From 1074040be3b89ffa7d6fb15a3c1ef35e141e15d1 Mon Sep 17 00:00:00 2001
From: Pekka Paalanen <pekka.paalanen@collabora.com>
Date: Wed, 3 Apr 2019 13:11:45 +0300
Subject: [PATCH 2/3] renderer/native: Make EGL initialization failure not
fatal
The failure to initialize EGL does not necessarily mean the KMS device cannot
be used. The device could still be used as a "secondary GPU" with the CPU copy
mode.
If meta_renderer_native_create_renderer_gpu_data () fails,
meta_renderer_native_get_gpu_data () will return NULL, which may cause crashes.
This patch removes most of the failures, but does not fix the NULL dereferences
that will still happen if creating gpu data fails.
This patch reorders create_renderer_gpu_data_gbm () so that it fails hard only
if GBM device cannot be created, and otherwise always returns an initialized
gpu data structure. Users of the gpu data structure are responsible for
checking egl_display validity.
The GBM device creation failure is a hard failure because presumably GBM is
necessary for cursors.
Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/542
https://gitlab.gnome.org/GNOME/mutter/merge_requests/521
---
src/backends/native/meta-renderer-native.c | 62 ++++++++++++++--------
1 file changed, 40 insertions(+), 22 deletions(-)
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
index 771ca0872..c7483f3cd 100644
--- a/src/backends/native/meta-renderer-native.c
+++ b/src/backends/native/meta-renderer-native.c
@@ -3698,16 +3698,13 @@ gpu_kms_is_hardware_rendering (MetaRendererNative *renderer_native,
return data->secondary.is_hardware_rendering;
}
-static MetaRendererNativeGpuData *
-create_renderer_gpu_data_gbm (MetaRendererNative *renderer_native,
- MetaGpuKms *gpu_kms,
- GError **error)
+static EGLDisplay
+init_gbm_egl_display (MetaRendererNative *renderer_native,
+ struct gbm_device *gbm_device,
+ GError **error)
{
MetaEgl *egl = meta_renderer_native_get_egl (renderer_native);
- struct gbm_device *gbm_device;
EGLDisplay egl_display;
- int kms_fd;
- MetaRendererNativeGpuData *renderer_gpu_data;
if (!meta_egl_has_extensions (egl, EGL_NO_DISPLAY, NULL,
"EGL_MESA_platform_gbm",
@@ -3719,9 +3716,31 @@ create_renderer_gpu_data_gbm (MetaRendererNative *renderer_native,
g_set_error (error, G_IO_ERROR,
G_IO_ERROR_FAILED,
"Missing extension for GBM renderer: EGL_KHR_platform_gbm");
- return NULL;
+ return EGL_NO_DISPLAY;
}
+ egl_display = meta_egl_get_platform_display (egl,
+ EGL_PLATFORM_GBM_KHR,
+ gbm_device, NULL, error);
+ if (egl_display == EGL_NO_DISPLAY)
+ return EGL_NO_DISPLAY;
+
+ if (!meta_egl_initialize (egl, egl_display, error))
+ return EGL_NO_DISPLAY;
+
+ return egl_display;
+}
+
+static MetaRendererNativeGpuData *
+create_renderer_gpu_data_gbm (MetaRendererNative *renderer_native,
+ MetaGpuKms *gpu_kms,
+ GError **error)
+{
+ struct gbm_device *gbm_device;
+ int kms_fd;
+ MetaRendererNativeGpuData *renderer_gpu_data;
+ g_autoptr (GError) local_error = NULL;
+
kms_fd = meta_gpu_kms_get_fd (gpu_kms);
gbm_device = gbm_create_device (kms_fd);
@@ -3733,26 +3752,25 @@ create_renderer_gpu_data_gbm (MetaRendererNative *renderer_native,
return NULL;
}
- egl_display = meta_egl_get_platform_display (egl,
- EGL_PLATFORM_GBM_KHR,
- gbm_device, NULL, error);
- if (egl_display == EGL_NO_DISPLAY)
- {
- gbm_device_destroy (gbm_device);
- return NULL;
- }
-
- if (!meta_egl_initialize (egl, egl_display, error))
- return NULL;
-
renderer_gpu_data = meta_create_renderer_native_gpu_data (gpu_kms);
renderer_gpu_data->renderer_native = renderer_native;
renderer_gpu_data->gbm.device = gbm_device;
renderer_gpu_data->mode = META_RENDERER_NATIVE_MODE_GBM;
- renderer_gpu_data->egl_display = egl_display;
- init_secondary_gpu_data (renderer_gpu_data);
+ renderer_gpu_data->egl_display = init_gbm_egl_display (renderer_native,
+ gbm_device,
+ &local_error);
+ if (renderer_gpu_data->egl_display == EGL_NO_DISPLAY)
+ {
+ g_debug ("GBM EGL init for %s failed: %s",
+ meta_gpu_kms_get_file_path (gpu_kms),
+ local_error->message);
+ init_secondary_gpu_data_cpu (renderer_gpu_data);
+ return renderer_gpu_data;
+ }
+
+ init_secondary_gpu_data (renderer_gpu_data);
return renderer_gpu_data;
}
--
2.21.0

View File

@ -1,59 +0,0 @@
From b09318fd75e1d4644381e7080105da18726bbdb9 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Mon, 15 Apr 2019 14:55:45 +0200
Subject: [PATCH 3/3] wayland/output: Set user data of xdg_output resource
mutter would randomly crash in `send_xdg_output_events()` when changing
the fractional scaling:
wl_resource_post_event ()
zxdg_output_v1_send_logical_size ()
send_xdg_output_events ()
wayland_output_update_for_output ()
meta_wayland_compositor_update_outputs ()
on_monitors_changed ()
g_closure_invoke ()
signal_emit_unlocked_R ()
g_signal_emit_valist ()
_signal_emit ()
meta_monitor_manager_notify_monitors_changed ()
meta_monitor_manager_rebuild ()
This is because the xdg-output resource got freed but wasn't removed
from the list of resources.
Fix this by setting the user data of the xdg-output resource to the
corresponding `MetaWaylandOutput` so that the xdg-output resource
destructor can remove it from the list of resources.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/538
---
src/wayland/meta-wayland-outputs.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/wayland/meta-wayland-outputs.c b/src/wayland/meta-wayland-outputs.c
index 7695d86af..099e87ab9 100644
--- a/src/wayland/meta-wayland-outputs.c
+++ b/src/wayland/meta-wayland-outputs.c
@@ -624,14 +624,14 @@ meta_xdg_output_manager_get_xdg_output (struct wl_client *client,
wl_resource_get_version (resource),
id);
- wl_resource_set_implementation (xdg_output_resource,
- &meta_xdg_output_interface,
- NULL, meta_xdg_output_destructor);
-
wayland_output = wl_resource_get_user_data (output);
if (!wayland_output)
return;
+ wl_resource_set_implementation (xdg_output_resource,
+ &meta_xdg_output_interface,
+ wayland_output, meta_xdg_output_destructor);
+
wayland_output->xdg_output_resources =
g_list_prepend (wayland_output->xdg_output_resources, xdg_output_resource);
--
2.21.0

View File

@ -7,8 +7,8 @@
%global mutter_api_version 4
Name: mutter
Version: 3.32.0
Release: 4%{?dist}
Version: 3.32.1
Release: 1%{?dist}
Summary: Window and compositing manager based on Clutter
License: GPLv2+
@ -19,24 +19,6 @@ Source0: http://download.gnome.org/sources/%{name}/3.32/%{name}-%{version}
# Work-around for OpenJDK's compliance test
Patch0: 0001-window-actor-Special-case-shaped-Java-windows.patch
# Fix building with meson >= 0.50.0
Patch1: 0001-build-Don-t-use-absolute-paths-with-subdir-keyword.patch
# Backport work-around for hangul text input bug (rhbz#1632981)
Patch2: 0001-wayland-Defer-text_input.done-on-an-idle.patch
# https://gitlab.gnome.org/GNOME/mutter/merge_requests/498 fixes
# https://gitlab.gnome.org/GNOME/mutter/issues/501 /
# https://bugzilla.redhat.com/show_bug.cgi?id=1692135
Patch3: 0001-core-Remove-startup-sequences-after-timeout.patch
# https://gitlab.gnome.org/GNOME/mutter/merge_requests/521 fixes
# https://gitlab.gnome.org/GNOME/mutter/issues/542 (crasher)
Patch4: 0002-renderer-native-Make-EGL-initialization-failure-not-.patch
# https://gitlab.gnome.org/GNOME/mutter/merge_requests/538 (crash fix)
Patch5: 0003-wayland-output-Set-user-data-of-xdg_output-resource.patch
BuildRequires: chrpath
BuildRequires: pango-devel
BuildRequires: startup-notification-devel
@ -178,6 +160,9 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
%{_datadir}/mutter-%{mutter_api_version}/tests
%changelog
* Wed Apr 17 2019 Florian Müllner <fmuellner@redhat.com> - 3.32.1-1
- Update to 3.32.1
* Wed Apr 17 2019 Adam Williamson <awilliam@redhat.com> - 3.32.0-4
- Backport MR #498 for spinner bug, plus two crasher fixes
Resolves: #1692135

View File

@ -1 +1 @@
SHA512 (mutter-3.32.0.tar.xz) = 7f26e7f752a5cedbe066b05b34eec8c4086aee1a7cbd787fad3e9b9c3a440fc8a74ada2440717a115bb69bb0781184f01e55bbbdfaa20f58d060ce6102895de1
SHA512 (mutter-3.32.1.tar.xz) = c3573340d8c5128cff68196f0fdd8593093ad1870765ca0a1f8f5ce400b4d1f90ec7c95084e747a90c3170b9840d8c4f722496d2e8c25846d579b85702160e05