diff --git a/0001-Update-to-PipeWire-0.3-API.patch b/0001-Update-to-PipeWire-0.3-API.patch deleted file mode 100644 index 9749fe5..0000000 --- a/0001-Update-to-PipeWire-0.3-API.patch +++ /dev/null @@ -1,561 +0,0 @@ -From c5d2fc856a28b3a4f26ffffa420cbd9ff92875bb Mon Sep 17 00:00:00 2001 -From: Wim Taymans -Date: Tue, 14 Jan 2020 09:44:45 +0100 -Subject: [PATCH] screen-cast: Update to PipeWire 0.3 API - -Update to 0.3 API - -[jadahl: update Dockerfile to include new enough pipewire] - -Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/1051 - -https://gitlab.gnome.org/GNOME/mutter/merge_requests/1062 ---- - .gitlab-ci/Dockerfile | 3 + - meson.build | 4 +- - src/backends/meta-screen-cast-stream-src.c | 255 ++++++++------------- - 3 files changed, 104 insertions(+), 158 deletions(-) - -diff --git a/.gitlab-ci/Dockerfile b/.gitlab-ci/Dockerfile -index 9accc9756..393c76394 100644 ---- a/.gitlab-ci/Dockerfile -+++ b/.gitlab-ci/Dockerfile -#@@ -11,6 +11,7 @@ RUN dnf -y update && dnf -y upgrade && \ -# dnf install -y 'dnf-command(builddep)' && \ -# dnf install -y 'dnf-command(copr)' && \ -# dnf copr enable -y fmuellner/gnome-shell-ci && \ -#+ dnf copr enable -y jadahl/mutter-ci && \ -# dnf -y update && dnf -y upgrade && \ -# -# dnf builddep -y mutter && \ -@@ -27,4 +27,6 @@ RUN dnf -y update && dnf -y upgrade && \ - dnf remove -y gnome-bluetooth-libs-devel dbus-glib-devel upower-devel python3-devel && \ - dnf remove -y --noautoremove mutter mutter-devel && \ - -+ dnf upgrade -y 'pkgconfig(libpipewire-0.3)' && \ -+ - dnf clean all -diff --git a/meson.build b/meson.build -index daa6cc6fb..e071a5e40 100644 ---- a/meson.build -+++ b/meson.build -@@ -50,7 +50,7 @@ libinput_req = '>= 1.7' - gbm_req = '>= 10.3' - - # screen cast version requirements --libpipewire_req = '>= 0.2.5' -+libpipewire_req = '>= 0.3.0' - - gnome = import('gnome') - pkg = import('pkgconfig') -@@ -241,7 +241,7 @@ endif - - have_remote_desktop = get_option('remote_desktop') - if have_remote_desktop -- libpipewire_dep = dependency('libpipewire-0.2', version: libpipewire_req) -+ libpipewire_dep = dependency('libpipewire-0.3', version: libpipewire_req) - endif - - have_introspection = get_option('introspection') -diff --git a/src/backends/meta-screen-cast-stream-src.c b/src/backends/meta-screen-cast-stream-src.c -index 82c5cba43..ba1ce94a7 100644 ---- a/src/backends/meta-screen-cast-stream-src.c -+++ b/src/backends/meta-screen-cast-stream-src.c -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -62,15 +63,6 @@ enum - - static guint signals[N_SIGNALS]; - --typedef struct _MetaSpaType --{ -- struct spa_type_media_type media_type; -- struct spa_type_media_subtype media_subtype; -- struct spa_type_format_video format_video; -- struct spa_type_video_format video_format; -- uint32_t meta_cursor; --} MetaSpaType; -- - typedef struct _MetaPipeWireSource - { - GSource base; -@@ -82,19 +74,19 @@ typedef struct _MetaScreenCastStreamSrcPrivate - { - MetaScreenCastStream *stream; - -+ struct pw_context *pipewire_context; - struct pw_core *pipewire_core; -- struct pw_remote *pipewire_remote; -- struct pw_type *pipewire_type; - MetaPipeWireSource *pipewire_source; -- struct spa_hook pipewire_remote_listener; -+ struct spa_hook pipewire_core_listener; - - gboolean is_enabled; - - struct pw_stream *pipewire_stream; - struct spa_hook pipewire_stream_listener; -+ uint32_t node_id; - -- MetaSpaType spa_type; - struct spa_video_info_raw video_format; -+ int video_stride; - - uint64_t last_frame_timestamp_us; - -@@ -112,8 +104,6 @@ G_DEFINE_TYPE_WITH_CODE (MetaScreenCastStreamSrc, - meta_screen_cast_stream_src_init_initable_iface) - G_ADD_PRIVATE (MetaScreenCastStreamSrc)) - --#define PROP_RANGE(min, max) 2, (min), (max) -- - static void - meta_screen_cast_stream_src_get_specs (MetaScreenCastStreamSrc *src, - int *width, -@@ -286,9 +276,6 @@ meta_screen_cast_stream_src_set_empty_cursor_sprite_metadata (MetaScreenCastStre - int x, - int y) - { -- MetaScreenCastStreamSrcPrivate *priv = -- meta_screen_cast_stream_src_get_instance_private (src); -- MetaSpaType *spa_type = &priv->spa_type; - struct spa_meta_bitmap *spa_meta_bitmap; - - spa_meta_cursor->id = 1; -@@ -300,7 +287,7 @@ meta_screen_cast_stream_src_set_empty_cursor_sprite_metadata (MetaScreenCastStre - spa_meta_bitmap = SPA_MEMBER (spa_meta_cursor, - spa_meta_cursor->bitmap_offset, - struct spa_meta_bitmap); -- spa_meta_bitmap->format = spa_type->video_format.RGBA; -+ spa_meta_bitmap->format = SPA_VIDEO_FORMAT_RGBA; - spa_meta_bitmap->offset = sizeof (struct spa_meta_bitmap); - - spa_meta_cursor->hotspot.x = 0; -@@ -317,9 +304,6 @@ meta_screen_cast_stream_src_set_cursor_sprite_metadata (MetaScreenCastStreamSrc - int y, - float scale) - { -- MetaScreenCastStreamSrcPrivate *priv = -- meta_screen_cast_stream_src_get_instance_private (src); -- MetaSpaType *spa_type = &priv->spa_type; - CoglTexture *cursor_texture; - struct spa_meta_bitmap *spa_meta_bitmap; - int hotspot_x, hotspot_y; -@@ -346,7 +330,7 @@ meta_screen_cast_stream_src_set_cursor_sprite_metadata (MetaScreenCastStreamSrc - spa_meta_bitmap = SPA_MEMBER (spa_meta_cursor, - spa_meta_cursor->bitmap_offset, - struct spa_meta_bitmap); -- spa_meta_bitmap->format = spa_type->video_format.RGBA; -+ spa_meta_bitmap->format = SPA_VIDEO_FORMAT_RGBA; - spa_meta_bitmap->offset = sizeof (struct spa_meta_bitmap); - - meta_cursor_sprite_get_hotspot (cursor_sprite, &hotspot_x, &hotspot_y); -@@ -382,12 +366,10 @@ static void - add_cursor_metadata (MetaScreenCastStreamSrc *src, - struct spa_buffer *spa_buffer) - { -- MetaScreenCastStreamSrcPrivate *priv = -- meta_screen_cast_stream_src_get_instance_private (src); -- MetaSpaType *spa_type = &priv->spa_type; - struct spa_meta_cursor *spa_meta_cursor; - -- spa_meta_cursor = spa_buffer_find_meta (spa_buffer, spa_type->meta_cursor); -+ spa_meta_cursor = spa_buffer_find_meta_data (spa_buffer, SPA_META_Cursor, -+ sizeof (*spa_meta_cursor)); - if (spa_meta_cursor) - meta_screen_cast_stream_src_set_cursor_metadata (src, spa_meta_cursor); - } -@@ -447,14 +429,14 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src) - { - data = spa_buffer->datas[0].data; - } -- else if (spa_buffer->datas[0].type == priv->pipewire_type->data.MemFd) -+ else if (spa_buffer->datas[0].type == SPA_DATA_MemFd) - { - map = mmap (NULL, spa_buffer->datas[0].maxsize + spa_buffer->datas[0].mapoffset, - PROT_READ | PROT_WRITE, MAP_SHARED, - spa_buffer->datas[0].fd, 0); - if (map == MAP_FAILED) - { -- g_warning ("Failed to mmap pipewire stream buffer: %s\n", -+ g_warning ("Failed to mmap pipewire stream buffer: %s", - strerror (errno)); - return; - } -@@ -469,28 +451,30 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src) - - if (meta_screen_cast_stream_src_record_frame (src, data)) - { -- struct spa_meta_video_crop *spa_meta_video_crop; -+ struct spa_meta_region *spa_meta_video_crop; - - spa_buffer->datas[0].chunk->size = spa_buffer->datas[0].maxsize; -+ spa_buffer->datas[0].chunk->stride = priv->video_stride; - - /* Update VideoCrop if needed */ - spa_meta_video_crop = -- spa_buffer_find_meta (spa_buffer, priv->pipewire_type->meta.VideoCrop); -+ spa_buffer_find_meta_data (spa_buffer, SPA_META_VideoCrop, -+ sizeof (*spa_meta_video_crop)); - if (spa_meta_video_crop) - { - if (meta_screen_cast_stream_src_get_videocrop (src, &crop_rect)) - { -- spa_meta_video_crop->x = crop_rect.x; -- spa_meta_video_crop->y = crop_rect.y; -- spa_meta_video_crop->width = crop_rect.width; -- spa_meta_video_crop->height = crop_rect.height; -+ spa_meta_video_crop->region.position.x = crop_rect.x; -+ spa_meta_video_crop->region.position.y = crop_rect.y; -+ spa_meta_video_crop->region.size.width = crop_rect.width; -+ spa_meta_video_crop->region.size.height = crop_rect.height; - } - else - { -- spa_meta_video_crop->x = 0; -- spa_meta_video_crop->y = 0; -- spa_meta_video_crop->width = priv->stream_width; -- spa_meta_video_crop->height = priv->stream_height; -+ spa_meta_video_crop->region.position.x = 0; -+ spa_meta_video_crop->region.position.y = 0; -+ spa_meta_video_crop->region.size.width = priv->stream_width; -+ spa_meta_video_crop->region.size.height = priv->stream_height; - } - } - } -@@ -555,7 +539,6 @@ on_stream_state_changed (void *data, - MetaScreenCastStreamSrc *src = data; - MetaScreenCastStreamSrcPrivate *priv = - meta_screen_cast_stream_src_get_instance_private (src); -- uint32_t node_id; - - switch (state) - { -@@ -563,14 +546,12 @@ on_stream_state_changed (void *data, - g_warning ("pipewire stream error: %s", error_message); - meta_screen_cast_stream_src_notify_closed (src); - break; -- case PW_STREAM_STATE_CONFIGURE: -- node_id = pw_stream_get_node_id (priv->pipewire_stream); -- g_signal_emit (src, signals[READY], 0, (unsigned int) node_id); -- break; -- case PW_STREAM_STATE_UNCONNECTED: -- case PW_STREAM_STATE_CONNECTING: -- case PW_STREAM_STATE_READY: - case PW_STREAM_STATE_PAUSED: -+ if (priv->node_id == SPA_ID_INVALID && priv->pipewire_stream) -+ { -+ priv->node_id = pw_stream_get_node_id (priv->pipewire_stream); -+ g_signal_emit (src, signals[READY], 0, (unsigned int) priv->node_id); -+ } - if (meta_screen_cast_stream_src_is_enabled (src)) - meta_screen_cast_stream_src_disable (src); - break; -@@ -578,68 +559,69 @@ on_stream_state_changed (void *data, - if (!meta_screen_cast_stream_src_is_enabled (src)) - meta_screen_cast_stream_src_enable (src); - break; -+ case PW_STREAM_STATE_UNCONNECTED: -+ case PW_STREAM_STATE_CONNECTING: -+ break; - } - } - - static void --on_stream_format_changed (void *data, -- const struct spa_pod *format) -+on_stream_param_changed (void *data, -+ uint32_t id, -+ const struct spa_pod *format) - { - MetaScreenCastStreamSrc *src = data; - MetaScreenCastStreamSrcPrivate *priv = - meta_screen_cast_stream_src_get_instance_private (src); -- struct pw_type *pipewire_type = priv->pipewire_type; - uint8_t params_buffer[1024]; - int32_t width, height, stride, size; - struct spa_pod_builder pod_builder; - const struct spa_pod *params[3]; - const int bpp = 4; - -- if (!format) -- { -- pw_stream_finish_format (priv->pipewire_stream, 0, NULL, 0); -- return; -- } -+ if (!format || id != SPA_PARAM_Format) -+ return; - - spa_format_video_raw_parse (format, -- &priv->video_format, -- &priv->spa_type.format_video); -+ &priv->video_format); - - width = priv->video_format.size.width; - height = priv->video_format.size.height; - stride = SPA_ROUND_UP_N (width * bpp, 4); - size = height * stride; - -+ priv->video_stride = stride; -+ - pod_builder = SPA_POD_BUILDER_INIT (params_buffer, sizeof (params_buffer)); - -- params[0] = spa_pod_builder_object ( -+ params[0] = spa_pod_builder_add_object ( - &pod_builder, -- pipewire_type->param.idBuffers, pipewire_type->param_buffers.Buffers, -- ":", pipewire_type->param_buffers.size, "i", size, -- ":", pipewire_type->param_buffers.stride, "i", stride, -- ":", pipewire_type->param_buffers.buffers, "iru", 16, PROP_RANGE (2, 16), -- ":", pipewire_type->param_buffers.align, "i", 16); -- -- params[1] = spa_pod_builder_object ( -+ SPA_TYPE_OBJECT_ParamBuffers, SPA_PARAM_Buffers, -+ SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int (16, 2, 16), -+ SPA_PARAM_BUFFERS_blocks, SPA_POD_Int (1), -+ SPA_PARAM_BUFFERS_size, SPA_POD_Int (size), -+ SPA_PARAM_BUFFERS_stride, SPA_POD_Int (stride), -+ SPA_PARAM_BUFFERS_align, SPA_POD_Int (16)); -+ -+ params[1] = spa_pod_builder_add_object ( - &pod_builder, -- pipewire_type->param.idMeta, pipewire_type->param_meta.Meta, -- ":", pipewire_type->param_meta.type, "I", pipewire_type->meta.VideoCrop, -- ":", pipewire_type->param_meta.size, "i", sizeof (struct spa_meta_video_crop)); -+ SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, -+ SPA_PARAM_META_type, SPA_POD_Id (SPA_META_VideoCrop), -+ SPA_PARAM_META_size, SPA_POD_Int (sizeof (struct spa_meta_region))); - -- params[2] = spa_pod_builder_object ( -+ params[2] = spa_pod_builder_add_object ( - &pod_builder, -- pipewire_type->param.idMeta, pipewire_type->param_meta.Meta, -- ":", pipewire_type->param_meta.type, "I", priv->spa_type.meta_cursor, -- ":", pipewire_type->param_meta.size, "i", CURSOR_META_SIZE (64, 64)); -+ SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, -+ SPA_PARAM_META_type, SPA_POD_Id (SPA_META_Cursor), -+ SPA_PARAM_META_size, SPA_POD_Int (CURSOR_META_SIZE (64, 64))); - -- pw_stream_finish_format (priv->pipewire_stream, 0, -- params, G_N_ELEMENTS (params)); -+ pw_stream_update_params (priv->pipewire_stream, params, G_N_ELEMENTS (params)); - } - - static const struct pw_stream_events stream_events = { - PW_VERSION_STREAM_EVENTS, - .state_changed = on_stream_state_changed, -- .format_changed = on_stream_format_changed, -+ .param_changed = on_stream_param_changed, - }; - - static struct pw_stream * -@@ -652,8 +634,6 @@ create_pipewire_stream (MetaScreenCastStreamSrc *src, - uint8_t buffer[1024]; - struct spa_pod_builder pod_builder = - SPA_POD_BUILDER_INIT (buffer, sizeof (buffer)); -- MetaSpaType *spa_type = &priv->spa_type; -- struct pw_type *pipewire_type = priv->pipewire_type; - float frame_rate; - MetaFraction frame_rate_fraction; - struct spa_fraction max_framerate; -@@ -661,7 +641,9 @@ create_pipewire_stream (MetaScreenCastStreamSrc *src, - const struct spa_pod *params[1]; - int result; - -- pipewire_stream = pw_stream_new (priv->pipewire_remote, -+ priv->node_id = SPA_ID_INVALID; -+ -+ pipewire_stream = pw_stream_new (priv->pipewire_core, - "meta-screen-cast-src", - NULL); - if (!pipewire_stream) -@@ -682,17 +664,17 @@ create_pipewire_stream (MetaScreenCastStreamSrc *src, - max_framerate = SPA_FRACTION (frame_rate_fraction.num, - frame_rate_fraction.denom); - -- params[0] = spa_pod_builder_object ( -+ params[0] = spa_pod_builder_add_object ( - &pod_builder, -- pipewire_type->param.idEnumFormat, pipewire_type->spa_format, -- "I", spa_type->media_type.video, -- "I", spa_type->media_subtype.raw, -- ":", spa_type->format_video.format, "I", spa_type->video_format.BGRx, -- ":", spa_type->format_video.size, "R", &SPA_RECTANGLE (priv->stream_width, -- priv->stream_height), -- ":", spa_type->format_video.framerate, "F", &SPA_FRACTION (0, 1), -- ":", spa_type->format_video.max_framerate, "Fru", &max_framerate, -- PROP_RANGE (&min_framerate, -+ SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat, -+ SPA_FORMAT_mediaType, SPA_POD_Id (SPA_MEDIA_TYPE_video), -+ SPA_FORMAT_mediaSubtype, SPA_POD_Id (SPA_MEDIA_SUBTYPE_raw), -+ SPA_FORMAT_VIDEO_format, SPA_POD_Id (SPA_VIDEO_FORMAT_BGRx), -+ SPA_FORMAT_VIDEO_size, SPA_POD_Rectangle (&SPA_RECTANGLE (priv->stream_width, -+ priv->stream_height)), -+ SPA_FORMAT_VIDEO_framerate, SPA_POD_Fraction (&SPA_FRACTION (0, 1)), -+ SPA_FORMAT_VIDEO_maxFramerate, SPA_POD_CHOICE_RANGE_Fraction (&max_framerate, -+ &min_framerate, - &max_framerate)); - - pw_stream_add_listener (pipewire_stream, -@@ -702,7 +684,7 @@ create_pipewire_stream (MetaScreenCastStreamSrc *src, - - result = pw_stream_connect (pipewire_stream, - PW_DIRECTION_OUTPUT, -- NULL, -+ SPA_ID_INVALID, - (PW_STREAM_FLAG_DRIVER | - PW_STREAM_FLAG_MAP_BUFFERS), - params, G_N_ELEMENTS (params)); -@@ -717,40 +699,18 @@ create_pipewire_stream (MetaScreenCastStreamSrc *src, - } - - static void --on_state_changed (void *data, -- enum pw_remote_state old, -- enum pw_remote_state state, -- const char *error_message) -+on_core_error (void *data, -+ uint32_t id, -+ int seq, -+ int res, -+ const char *message) - { - MetaScreenCastStreamSrc *src = data; -- MetaScreenCastStreamSrcPrivate *priv = -- meta_screen_cast_stream_src_get_instance_private (src); -- struct pw_stream *pipewire_stream; -- GError *error = NULL; - -- switch (state) -- { -- case PW_REMOTE_STATE_ERROR: -- g_warning ("pipewire remote error: %s\n", error_message); -- meta_screen_cast_stream_src_notify_closed (src); -- break; -- case PW_REMOTE_STATE_CONNECTED: -- pipewire_stream = create_pipewire_stream (src, &error); -- if (!pipewire_stream) -- { -- g_warning ("Could not create pipewire stream: %s", error->message); -- g_error_free (error); -- meta_screen_cast_stream_src_notify_closed (src); -- } -- else -- { -- priv->pipewire_stream = pipewire_stream; -- } -- break; -- case PW_REMOTE_STATE_UNCONNECTED: -- case PW_REMOTE_STATE_CONNECTING: -- break; -- } -+ g_warning ("pipewire remote error: id:%u %s", id, message); -+ -+ if (id == PW_ID_CORE && res == -EPIPE) -+ meta_screen_cast_stream_src_notify_closed (src); - } - - static gboolean -@@ -793,17 +753,6 @@ static GSourceFuncs pipewire_source_funcs = - pipewire_loop_source_finalize - }; - --static void --init_spa_type (MetaSpaType *type, -- struct spa_type_map *map) --{ -- spa_type_media_type_map (map, &type->media_type); -- spa_type_media_subtype_map (map, &type->media_subtype); -- spa_type_format_video_map (map, &type->format_video); -- spa_type_video_format_map (map, &type->video_format); -- type->meta_cursor = spa_type_map_get_id(map, SPA_TYPE_META__Cursor); --} -- - static MetaPipeWireSource * - create_pipewire_source (void) - { -@@ -829,9 +778,9 @@ create_pipewire_source (void) - return pipewire_source; - } - --static const struct pw_remote_events remote_events = { -- PW_VERSION_REMOTE_EVENTS, -- .state_changed = on_state_changed, -+static const struct pw_core_events core_events = { -+ PW_VERSION_CORE_EVENTS, -+ .error = on_core_error, - }; - - static gboolean -@@ -851,37 +800,31 @@ meta_screen_cast_stream_src_initable_init (GInitable *initable, - return FALSE; - } - -- priv->pipewire_core = pw_core_new (priv->pipewire_source->pipewire_loop, -- NULL); -- if (!priv->pipewire_core) -+ priv->pipewire_context = pw_context_new (priv->pipewire_source->pipewire_loop, -+ NULL, 0); -+ if (!priv->pipewire_context) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, -- "Failed to create pipewire core"); -+ "Failed to create pipewire context"); - return FALSE; - } - -- priv->pipewire_remote = pw_remote_new (priv->pipewire_core, NULL, 0); -- if (!priv->pipewire_remote) -+ priv->pipewire_core = pw_context_connect (priv->pipewire_context, NULL, 0); -+ if (!priv->pipewire_core) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, -- "Couldn't creat pipewire remote"); -+ "Couldn't connect pipewire context"); - return FALSE; - } - -- pw_remote_add_listener (priv->pipewire_remote, -- &priv->pipewire_remote_listener, -- &remote_events, -- src); -+ pw_core_add_listener (priv->pipewire_core, -+ &priv->pipewire_core_listener, -+ &core_events, -+ src); - -- priv->pipewire_type = pw_core_get_type (priv->pipewire_core); -- init_spa_type (&priv->spa_type, priv->pipewire_type->map); -- -- if (pw_remote_connect (priv->pipewire_remote) != 0) -- { -- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, -- "Couldn't connect pipewire remote"); -- return FALSE; -- } -+ priv->pipewire_stream = create_pipewire_stream (src, error); -+ if (!priv->pipewire_stream) -+ return FALSE; - - return TRUE; - } -@@ -912,8 +855,8 @@ meta_screen_cast_stream_src_finalize (GObject *object) - meta_screen_cast_stream_src_disable (src); - - g_clear_pointer (&priv->pipewire_stream, pw_stream_destroy); -- g_clear_pointer (&priv->pipewire_remote, pw_remote_destroy); -- g_clear_pointer (&priv->pipewire_core, pw_core_destroy); -+ g_clear_pointer (&priv->pipewire_core, pw_core_disconnect); -+ g_clear_pointer (&priv->pipewire_context, pw_context_destroy); - g_source_destroy (&priv->pipewire_source->base); - - G_OBJECT_CLASS (meta_screen_cast_stream_src_parent_class)->finalize (object); --- -2.24.1 - diff --git a/_service b/_service index eedaa95..5c67613 100644 --- a/_service +++ b/_service @@ -2,7 +2,7 @@ git https://gitlab.gnome.org/GNOME/mutter.git - refs/tags/3.34.5 + refs/tags/3.36.1 @PARENT_TAG@+@TAG_OFFSET@ (.*)\+0 \1 @@ -15,5 +15,3 @@ - - diff --git a/_servicedata b/_servicedata index 06de151..d808096 100644 --- a/_servicedata +++ b/_servicedata @@ -1,4 +1,4 @@ https://gitlab.gnome.org/GNOME/mutter.git - 1a3dfd8110cbdbf752b3431ef3a1aa1f684d05e9 \ No newline at end of file + 52e5d6fc948ecd7d78c3bddf2cff13eb3c386f4c diff --git a/mutter-3.34.5.obscpio b/mutter-3.34.5.obscpio deleted file mode 100644 index 669324f..0000000 --- a/mutter-3.34.5.obscpio +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6ef9056b90308bff793cc7563065b7528e7b09ebf7cd8886deb1d8a4b3655754 -size 25434125 diff --git a/mutter-3.36.1.obscpio b/mutter-3.36.1.obscpio new file mode 100644 index 0000000..e011c86 --- /dev/null +++ b/mutter-3.36.1.obscpio @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63751f164e5160be9e79d9bce6194d09863db35cc1073dffdc6c19470ab7f428 +size 24182797 diff --git a/mutter-fix-mesa20.patch b/mutter-fix-mesa20.patch deleted file mode 100644 index 20f1f68..0000000 --- a/mutter-fix-mesa20.patch +++ /dev/null @@ -1,69 +0,0 @@ -From a444a4c5f58ea516ad3cd9d6ddc0056c3ca9bc90 Mon Sep 17 00:00:00 2001 -From: "Jan Alexander Steffens (heftig)" -Date: Sun, 20 Oct 2019 12:04:31 +0200 -Subject: [PATCH] EGL: Include EGL/eglmesaext.h - -The eglext.h shipped by libglvnd does not include the Mesa extensions, -unlike the header shipped in Mesa. - -Fixes https://gitlab.gnome.org/GNOME/mutter/issues/876 ---- - cogl/cogl/meson.build | 2 +- - src/backends/meta-egl-ext.h | 1 + - src/backends/meta-egl.c | 1 + - src/backends/meta-egl.h | 1 + - 4 files changed, 4 insertions(+), 1 deletion(-) - -diff --git a/cogl/cogl/meson.build b/cogl/cogl/meson.build -index 261955796..b0e66bff3 100644 ---- a/cogl/cogl/meson.build -+++ b/cogl/cogl/meson.build -@@ -48,7 +48,7 @@ cogl_gl_header_h = configure_file( - built_headers += [cogl_gl_header_h] - - if have_egl -- cogl_egl_includes_string = '#include \n#include ' -+ cogl_egl_includes_string = '#include \n#include \n#include ' - else - cogl_egl_includes_string = '' - endif -diff --git a/src/backends/meta-egl-ext.h b/src/backends/meta-egl-ext.h -index 8705e7d5b..db0b74f76 100644 ---- a/src/backends/meta-egl-ext.h -+++ b/src/backends/meta-egl-ext.h -@@ -29,6 +29,7 @@ - - #include - #include -+#include - - /* - * This is a little different to the tests shipped with EGL implementations, -diff --git a/src/backends/meta-egl.c b/src/backends/meta-egl.c -index 6554be935..fdeff4f77 100644 ---- a/src/backends/meta-egl.c -+++ b/src/backends/meta-egl.c -@@ -27,6 +27,7 @@ - - #include - #include -+#include - #include - #include - #include -diff --git a/src/backends/meta-egl.h b/src/backends/meta-egl.h -index f2a816445..4591e7d85 100644 ---- a/src/backends/meta-egl.h -+++ b/src/backends/meta-egl.h -@@ -28,6 +28,7 @@ - - #include - #include -+#include - #include - - #define META_EGL_ERROR meta_egl_error_quark () --- -2.24.1 - - diff --git a/mutter-wayland-fix-keyboard-move-resize-window.patch b/mutter-wayland-fix-keyboard-move-resize-window.patch deleted file mode 100644 index 8cc23d4..0000000 --- a/mutter-wayland-fix-keyboard-move-resize-window.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff --git a/src/core/keybindings.c b/src/core/keybindings.c -index b86272541..b995075fb 100644 ---- a/src/core/keybindings.c -+++ b/src/core/keybindings.c -@@ -1820,12 +1820,12 @@ meta_window_grab_all_keys (MetaWindow *window, - meta_topic (META_DEBUG_KEYBINDINGS, - "Grabbing all keys on window %s\n", window->desc); - retval = grab_keyboard (grabwindow, timestamp, XIGrabModeAsync); -- if (retval) -- { -- window->keys_grabbed = FALSE; -- window->all_keys_grabbed = TRUE; -- window->grab_on_frame = window->frame != NULL; -- } -+ } -+ if (retval) -+ { -+ window->keys_grabbed = FALSE; -+ window->all_keys_grabbed = TRUE; -+ window->grab_on_frame = window->frame != NULL; - } - - return retval; -@@ -1835,9 +1835,10 @@ void - meta_window_ungrab_all_keys (MetaWindow *window, - guint32 timestamp) - { -- if (!meta_is_wayland_compositor () && window->all_keys_grabbed) -+ if (window->all_keys_grabbed) - { -- ungrab_keyboard (timestamp); -+ if (!meta_is_wayland_compositor()) -+ ungrab_keyboard (timestamp); - - window->grab_on_frame = FALSE; - window->all_keys_grabbed = FALSE; diff --git a/mutter.changes b/mutter.changes index e1198c0..1573f92 100644 --- a/mutter.changes +++ b/mutter.changes @@ -1,3 +1,150 @@ +------------------------------------------------------------------- +Fri Apr 17 03:36:02 UTC 2020 - bjorn.lie@gmail.com + +- Update to version 3.36.1: + + Fix hardware cursor on GPU hotplug. + + Fix black areas around XWayland windows when resizing. + + Fix applying wrong scale to monitors on X11. + + Fix moving/resizing windows via keyboard on wayland. + + Fix locate-pointer feature interfering with keybindings. + + Add support for middle-click emulation. + + Fix freeze when moving cursor between scaled monitors. + + Fix popup misplacement with focus-follows-mouse. + + Fix misplaced cursor in preedit strings. + + Support mirroring with proprietary Nvidia driver. + + Support tablets with multiple mode switch buttons in a group. + + Ignore foreground color for color glyphs (emojis). + + Allow pad mode switches while showing OSD. + + Fix positioning of OSD for display-attached tablets. + + Respect configured RANDR panning on X11. + + Use correct texture filtering with scaled displays. + + Fix cursor hotspots in virtual machines. + + Fix build with GLES and no GL. + + Work around Firefox bug when copying images on wayland. + + Fix wrong cursor rotation on rotated displays. + + Fix glitches in window screencasts. + + Fix IM support for deleting surrounding text. + + Fix map animation of maximized windows. + + Fixed crashes. + + Misc. bug fixes and cleanups. + + Updated translations. +- Stop passing %%define _lto_cflags %%{nil}: No longer needed. +- Drop mutter-wayland-fix-keyboard-move-resize-window.patch: Fixed + upstream. + +------------------------------------------------------------------- +Fri Apr 17 03:36:00 UTC 2020 - bjorn.lie@gmail.com + +- Update to version 3.36.0: + + Fix placement of popup windows in multi-monitor setups. + + Fix invisible mouse cursor on some hardware. + + Updated translations. + +------------------------------------------------------------------- +Fri Apr 17 03:35:54 UTC 2020 - dimstar@opensuse.org + +- Update to version 3.35.92: + + Fix visibility of initially hidden windows. + + Avoid flicker when (un)redirecting windows. + + Let BindConstraints update the preferred size. + + Learn about GLES3. + + Ping windows on every window focus. + + Remove overhead from hot code paths. + + Allow remote desktop services to inhibit animations. + + Update screen-cast code to PipeWire 0.3 API. + + Make check-alive timeouts configurable. + + Make each stage view correspond to a single CRTC. + + Implement scaled/transformed hardware cursors. + + Use DMA buffers for screencasting if possible. + + Make Xwayland startup asynchronous. + + Fix clipping glitches in long text entries. + + Add side channel for starting required X11 services. + + Support synchronized wayland popup moving. + + Fixed crashes. + + Plugged memory leaks. + + Misc. bug fixes and cleanups. + + Updated translations. +- Pass -Dxwayland_initfd=disabled to meson, we are not ready for + this feature yet in openSUSE, and leaving it to auto breaks + wayland sessions. + +------------------------------------------------------------------- +Fri Apr 17 03:35:53 UTC 2020 - Dominique Leuenberger + +- Update to version 3.35.91+37: + + clutter/actor: Add CLUTTER_OFFSCREEN_REDIRECT_ON_IDLE + + screen-cast: Update to PipeWire 0.3 API + + window-actor: Make culling of opaque windows X11 only + + renderer-native: Use hardware acceleration check in generic + layer + + remote-access-handle: Expose disable-animations property + + screen-cast-session: Add 'disable-animations' property + + wayland: DND and Metawindow fixes. + + clutter: Make clutter_contraint_update_preferred_size() public + + bind-constraint: Update the preferred size + + surface-actor-x11: Avoid flicker when (un)redirecting windows + + window-actor: Don't show actor until meta_window_actor_show() + + settings: Improve logging of enabled experimental features + + Updated translations. +- Drop 0001-Update-to-PipeWire-0.3-API.patch: Fixed upstream. + +------------------------------------------------------------------- +Fri Apr 17 03:35:51 UTC 2020 - Dominique Leuenberger + +- Update to version 3.35.91: + + Honor accelerometer orientation on monitor config changes. + + Enable culling for integer-scaled actors. + + Add ClutterSeat::touch-mode property. + + Fix mis-scaling when streaming windows. + + Make the cursor renderer use the transactional KMS API. + + Advertise MetaMonitor as wl_output. + + Fix culling of XWayland windows. + + Only consider enabled effects when disabling culling. + + Misc. bug fixes and cleanups. + +------------------------------------------------------------------- +Fri Apr 17 03:35:50 UTC 2020 - Dominique Leuenberger + +- Update to version 3.35.90: + + Cull out clip region. + + Always enable tap-to-click/drag on opaque Wacom tablets. + + Fix visual glitches with offscreen effects applied. + + Fix "sticky corner" in multi-head setups. + + Fix black shadows around XWayland windows during resizes. + + Zero-copy path for GPU-less secondary GPUs. + + Cancel DND on Esc. + + Sync XWayland window shadows to frame during resizes. + + Add support for per-monitor workareas. + + Ensure newly mapped wayland windows receive ENTER event. + + Add ClutterSeat object. + + Honour CLUTTER_ACTOR_NO_LAYOUT flag more efficiently. + + Fix interoperation with wl_data_device_manager v1. + + Favor text over images in clipboard manager. + + Apply monitor scale after background texture creation. + + Plugged memory leaks. + + Fixed crashes. + + Misc. bug fixes and cleanups. +- Changes from version 3.35.3: + + backends/native: Correct dy value in pinch gesture event. + + Upload clipping rectangles in parallel. + + More cogl API cleanups. + + Fix window recording on HiDPI. + + Fix top-left pixel being insensitive to clicks. + + Misc. bug fixes and cleanups. +- Changes from version 3.35.1: + + Fix immediate screen blank after releaseing inhibitor. + + Respond to frame callbacks regardless of damage. + + Fix Night Light on wayland. + + Fix various copy+paste/DND regressions. + + Misc. bug fixes and cleanups. + + Updated translations. +- Drop mutter-fix-mesa20.patch: fixed upstream. +- Add pkgconfig(graphene-gobject-1.0) BuildRequires: new + dependency. +- Drop cmake BuildRequires: mutter uses meson. No need for a 2nd + build system. +- Bump api_major to 6, following upstream changes. + ------------------------------------------------------------------- Wed Apr 01 11:02:28 UTC 2020 - bjorn.lie@gmail.com diff --git a/mutter.obsinfo b/mutter.obsinfo index 7ddfcaf..2ff8a31 100644 --- a/mutter.obsinfo +++ b/mutter.obsinfo @@ -1,5 +1,5 @@ name: mutter -version: 3.34.5 -mtime: 1585610220 -commit: 1a3dfd8110cbdbf752b3431ef3a1aa1f684d05e9 +version: 3.36.1 +mtime: 1585596543 +commit: 52e5d6fc948ecd7d78c3bddf2cff13eb3c386f4c diff --git a/mutter.spec b/mutter.spec index e6b8820..6cba1c2 100644 --- a/mutter.spec +++ b/mutter.spec @@ -19,11 +19,11 @@ # don't enable sysprof support by default %bcond_with profiler -%define api_major 5 +%define api_major 6 %define api_minor 0 %define libmutter libmutter-%{api_major}-%{api_minor} Name: mutter -Version: 3.34.5 +Version: 3.36.1 Release: 0 Summary: Window and compositing manager based on Clutter License: GPL-2.0-or-later @@ -35,12 +35,7 @@ Source: %{name}-%{version}.tar.xz Patch3: mutter-Lower-HIDPI_LIMIT-to-144.patch # PATCH-FIX-UPSTREAM mutter-disable-cvt-s390x.patch bsc#1158128 fcrozat@suse.com -- Do not search for cvt on s390x, it doesn't exist there Patch4: mutter-disable-cvt-s390x.patch -# PATCH-FIX-UPSTREAM mutter-fix-mesa20.patch sndirsch@suse.de -- EGL: Include EGL/eglmesaext.h -Patch5: mutter-fix-mesa20.patch -# PATCH-FIX-UPSTREAM 0001-Update-to-PipeWire-0.3-API.patch alarrosa@suse.de -- Port mutter to build with pipewire 0.3.0 -Patch6: 0001-Update-to-PipeWire-0.3-API.patch -# PATCH-FIX-UPSTREAM mutter-wayland-fix-keyboard-move-resize-window.patch bsc#1159976, glgo#GNOME/mutter!997 alynx.zhou@suse.com -- Fix window keyboard move/resize mode in wayland -Patch7: mutter-wayland-fix-keyboard-move-resize-window.patch + ## SLE-only patches start at 1000 # PATCH-FEATURE-SLE mutter-SLE-bell.patch FATE#316042 bnc#889218 idonmez@suse.com -- make audible bell work out of the box. Patch1000: mutter-SLE-bell.patch @@ -50,7 +45,6 @@ Patch1001: mutter-SLE-relax-some-constraints-on-CSD-windows.patch Patch1002: mutter-SLE-bsc984738-grab-display.patch BuildRequires: Mesa-libGLESv3-devel -BuildRequires: cmake BuildRequires: fdupes BuildRequires: meson BuildRequires: pkgconfig @@ -68,6 +62,7 @@ BuildRequires: pkgconfig(glib-2.0) >= 2.61.1 BuildRequires: pkgconfig(gnome-desktop-3.0) BuildRequires: pkgconfig(gnome-settings-daemon) BuildRequires: pkgconfig(gobject-introspection-1.0) >= 0.9.5 +BuildRequires: pkgconfig(graphene-gobject-1.0) BuildRequires: pkgconfig(gsettings-desktop-schemas) >= 3.33.0 BuildRequires: pkgconfig(gtk+-3.0) >= 3.19.7 BuildRequires: pkgconfig(gudev-1.0) >= 232 @@ -161,9 +156,6 @@ applications that want to make use of the mutter library. %setup -q %patch3 -p1 %patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 # SLE-only patches and translations. translation-update-upstream po mutter @@ -174,13 +166,13 @@ translation-update-upstream po mutter %endif %build -%define _lto_cflags %{nil} %meson \ -Degl_device=true \ -Dcogl_tests=false \ -Dclutter_tests=false \ -Dtests=false \ -Dinstalled_tests=false \ + -Dxwayland_initfd=disabled \ %if %{with profiler} -Dprofiler=true \ %else