Hello community,

here is the log from the commit of package mutter.14060 for 
openSUSE:Leap:15.2:Update checked in at 2020-09-20 06:21:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2:Update/mutter.14060 (Old)
 and      /work/SRC/openSUSE:Leap:15.2:Update/.mutter.14060.new.4249 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mutter.14060"

Sun Sep 20 06:21:51 2020 rev:1 rq:835035 version:3.34.6

Changes:
--------
New Changes file:

--- /dev/null   2020-09-10 00:27:47.435250138 +0200
+++ /work/SRC/openSUSE:Leap:15.2:Update/.mutter.14060.new.4249/mutter.changes   
2020-09-20 06:21:58.083297162 +0200
@@ -0,0 +1,4146 @@
+-------------------------------------------------------------------
+Thu Aug 20 15:34:43 UTC 2020 - Frederic Crozat <[email protected]>
+
+- Add mutter-meson_options-Use-libGLESv2.so.2-for-COGL_DRIVER-gle.patch:
+  don't use libGLESv2.so but libGLESv2.so.2 for COGL driver
+  (boo#1175559 glgo#GNOME/mutter!1282).
+
+-------------------------------------------------------------------
+Wed May 13 00:06:08 UTC 2020 - [email protected]
+
+- Update to version 3.34.6:
+  + Fix various clipboard issues.
+  + Fix locate-pointer feature interfering with keybindings.
+  + Fix overview key on X11 when using multiple keyboard layouts.
+  + Preserve keyboard state on VT switch.
+  + Fixed crashes.
+  + Plugged memory leaks.
+  + Misc. bug fixes and cleanups.
+
+-------------------------------------------------------------------
+Fri May  1 20:33:03 UTC 2020 - Michael Gorse <[email protected]>
+
+- Enable SLE patches on Leap (jsc#SLE-11897).
+
+-------------------------------------------------------------------
+Wed Apr 01 11:02:28 UTC 2020 - [email protected]
+
+- Update to version 3.34.5:
+  + Fix visibility of initially hidden windows.
+  + Fix hardware cursor on GPU hotplug.
+  + Fix pasting images from wayland.
+  + Fixed crashes.
+  + Updated translations.
+- Switch to using explicit released tag in _service.
+
+-------------------------------------------------------------------
+Fri Mar 13 02:17:24 UTC 2020 - Alynx Zhou <[email protected]>
+
+- Add mutter-wayland-fix-keyboard-move-resize-window.patch:
+  move some common code out of X11 only code blocks to fix it
+  (bsc#1159976, glgo#GNOME/mutter!997).
+
+-------------------------------------------------------------------
+Mon Mar 02 10:50:18 UTC 2020 - Antonio Larrosa <[email protected]>
+
+- Build with pipewire 0.3.0:
+  * Add 0001-Update-to-PipeWire-0.3-API.patch
+
+-------------------------------------------------------------------
+Tue Feb 25 12:39:26 UTC 2020 - Dominique Leuenberger <[email protected]>
+
+- Rework mutter-fix-mesa20.patch: base it on mutter upstream commit
+  a444a4c.
+
+-------------------------------------------------------------------
+Mon Feb 24 15:19:59 UTC 2020 - Stefan Dirsch <[email protected]>
+
+- Add mutter-fix-mesa20.patch: fixes build against Mesa 20
+  (boo#1164688).
+
+-------------------------------------------------------------------
+Sun Feb 16 17:03:28 UTC 2020 - Bjørn Lie <[email protected]>
+
+- Update to version 3.34.4:
+  + Handle mode set race conditions more gracefully.
+  + Fix fallback to GLES2.
+  + Fix interoperation with wl_data_device_manager v1.
+  + Fix visual glitches with offscreen effects applied.
+  + Favor text over images in clipboard manager.
+  + Fixes crashes.
+  + Plugged memory leaks.
+  + Misc. bug fixes.
+  + Updated translations.
+
+-------------------------------------------------------------------
+Sat Jan 25 14:18:18 UTC 2020 - Dominique Leuenberger <[email protected]>
+
+- No longer recommend -lang: supplements are in use
+
+-------------------------------------------------------------------
+Sun Jan 05 14:34:37 UTC 2020 - [email protected]
+
+- Update to version 3.34.3+0:
+  * Bump version to 3.34.3
+
+-------------------------------------------------------------------
+Wed Jan 01 20:16:09 UTC 2020 - [email protected]
+
+- Update to version 3.34.2+2:
+  * clutter/stage: Fix picking of rectangles with negative
+    positions.
+
+-------------------------------------------------------------------
+Tue Dec 24 11:32:52 UTC 2019 - [email protected]
+
+- Update to version 3.34.2+1:
+  * screen-cast: Fix window recording on HiDPI
+
+-------------------------------------------------------------------
+Fri Dec 13 06:32:34 UTC 2019 - [email protected]
+
+- Update to version 3.34.2+0:
+  * Update British English translation
+  * backends/native: Fix double free of error
+  * kms-impl/simple: Fix meta_set_fallback_feedback_idle
+  * kms: Process impl idle callbacks before pre dispatch flush
+
+-------------------------------------------------------------------
+Tue Dec 10 10:26:41 UTC 2019 - Bjørn Lie <[email protected]>
+
+- Add explicit pkgconfig(fribidi) and pkgconfig(glib-2.0)
+  BuildRequires: meson checks for it.
+
+-------------------------------------------------------------------
+Mon Dec  2 10:38:04 UTC 2019 - Frederic Crozat <[email protected]>
+
+- Add mutter-disable-cvt-s390x.patch: do not search cvt on s390x,
+  it doesn't exist there (bsc#1158128).
+
+-------------------------------------------------------------------
+Mon Dec 02 10:09:22 UTC 2019 - [email protected]
+
+- Update to version 3.34.1+66:
+  * stack: Allow promoting transient windows to their parent's layer
+  * shaped-texture: Do not invalidate content on set_cogl_texture()
+  * cursor-tracker: Add API to keep the wayland pointer focus while hidden
+  * device-manager-x11: Ignore events if no source device is set
+  * clutter/cally-root: Use g_clear_signal_handler and fix a signal leak
+  * wayland: Move "ownership" of the DnD selection source to the data device
+  * wayland: Do not cancel data source on offer destruction
+  * wayland: Avoid redundant cancel() call
+  * wayland: Drop unused wl_signal structs
+
+-------------------------------------------------------------------
+Tue Nov 19 11:56:58 UTC 2019 - [email protected]
+
+- Update to version 3.34.1+57:
+  * cursor-renderer/native: Fix cursor drawing in combination with 
panel_orientation_transform
+  * output-kms: Fix "panel orientation" kms-prop being ignored on native 
outputs
+  * compositor: Plug cairo_region_t leak
+  * backends: Plug MetaKmsPageFlipData leak
+  * input-settings/x11: Add missing clutter_x11_trap_x_errors around 
XIGetProperty
+  * plugin-manager: Kill window effects on destroy
+  * plugins/default: Handle skipped animations
+  * wayland/surface: Don't double scale when getting absolute coordinates
+  * window-props: Don't set override redirect windows as top-level parent
+  * window-props: Don't look for parent multiple times
+  * window: Assert we only set a NULL workspace when unmanaging
+  * window: Warn if O-R window workspace state is used
+  * wayland/actor-surface: Always store away frame callbacks on commit
+  * ci: Fix checking out gnome-shell on stable branches
+  * x11-display: Don't unset the X11 focused window after setting one
+  * tests/monitor-unit-tests: Add another tiling window hot plug test
+  * window: Reset tile monitor number when untiling
+  * tests/monitor-unit-tests: Add window tiling hot plug test
+  * tests/runner: Move window shown synchronization to helper
+  * tests/monitor-unit-tests: Move test client sanity check into helper
+  * window: Always update tile monitor number on hot plug
+  * plugins/default: Clean up tile preview when closing display
+  * plugin/default: Init quark before using
+  * display: Add 'closing' signal
+  * renderer-native: Separate offscreen and shadowfb
+  * clutter/stage-view: Separate offscreen and shadowfb
+
+-------------------------------------------------------------------
+Wed Oct 30 15:43:16 UTC 2019 - [email protected]
+
+- Update to version 3.34.1+31:
+  * wayland: Check stylus serials on meta_wayland_seat_can_popup()
+  * x11: Limit touch replay pointer events to when replaying
+  * display: Move finishing of touch sequence to the backend
+  * x11: Update X11 focus before updating MetaDisplay focus
+
+-------------------------------------------------------------------
+Wed Oct 23 18:14:18 UTC 2019 - [email protected]
+
+- Update to version 3.34.1+27:
+  + wayland/surface: Reset buffer_destroy_handler_id.
+  + window-actor: Add a missing NULL-check.
+  + monitor-manager: check for underscan setting validity upfront.
+  + clutter/stage: Actually set key focus to an actor on key focus.
+  + clutter/actor: Save key-focus state and unset it before
+    destruction.
+  + dbus-session-watcher: Chain up to parent finalize().
+
+-------------------------------------------------------------------
+Thu Oct 17 08:03:06 UTC 2019 - Alynx Zhou <[email protected]>
+
+- Rebase patches:
+  + Update mutter-SLE-bell.patch
+  + Disable mutter-SLE-bsc984738-grab-display.patch
+
+-------------------------------------------------------------------
+Sun Oct 13 17:58:09 UTC 2019 - [email protected]
+
+- Update to version 3.34.1+21:
+  + x11: Map mimetypes back to selection atoms
++++ 3949 more lines (skipped)
++++ between /dev/null
++++ and 
/work/SRC/openSUSE:Leap:15.2:Update/.mutter.14060.new.4249/mutter.changes

New:
----
  0001-Update-to-PipeWire-0.3-API.patch
  _service
  _servicedata
  mutter-3.34.6.obscpio
  mutter-Lower-HIDPI_LIMIT-to-144.patch
  mutter-SLE-bell.patch
  mutter-SLE-bsc984738-grab-display.patch
  mutter-SLE-relax-some-constraints-on-CSD-windows.patch
  mutter-disable-cvt-s390x.patch
  mutter-fix-mesa20.patch
  mutter-meson_options-Use-libGLESv2.so.2-for-COGL_DRIVER-gle.patch
  mutter-wayland-fix-keyboard-move-resize-window.patch
  mutter.changes
  mutter.obsinfo
  mutter.spec

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mutter.spec ++++++
#
# spec file for package mutter
#
# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


# don't enable sysprof support by default
%bcond_with profiler

%define api_major 5
%define api_minor 0
%define libmutter libmutter-%{api_major}-%{api_minor}
Name:           mutter
Version:        3.34.6
Release:        0
Summary:        Window and compositing manager based on Clutter
License:        GPL-2.0-or-later
Group:          System/GUI/GNOME
URL:            https://www.gnome.org
Source:         %{name}-%{version}.tar.xz

# PATCH-FIX-OPENSUSE mutter-Lower-HIDPI_LIMIT-to-144.patch fate#326682, 
bsc#1125467 [email protected] -- Lower HIDPI_LIMIT to 144
Patch3:         mutter-Lower-HIDPI_LIMIT-to-144.patch
# PATCH-FIX-UPSTREAM mutter-disable-cvt-s390x.patch bsc#1158128 
[email protected] -- 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 [email protected] -- EGL: Include 
EGL/eglmesaext.h
Patch5:         mutter-fix-mesa20.patch
# PATCH-FIX-UPSTREAM 0001-Update-to-PipeWire-0.3-API.patch [email protected] -- 
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 [email protected] -- Fix window keyboard 
move/resize mode in wayland
Patch7:         mutter-wayland-fix-keyboard-move-resize-window.patch
# PATCH-FIX-UPSTREAM 
mutter-meson_options-Use-libGLESv2.so.2-for-COGL_DRIVER-gle.patch boo#1175559 
glgo#GNOME/mutter!1282 [email protected] -- Fix loading libGLESv2.so.2 
Patch8:         
mutter-meson_options-Use-libGLESv2.so.2-for-COGL_DRIVER-gle.patch
## SLE-only patches start at 1000
# PATCH-FEATURE-SLE mutter-SLE-bell.patch FATE#316042 bnc#889218 
[email protected] -- make audible bell work out of the box.
Patch1000:      mutter-SLE-bell.patch
# PATCH-FIX-SLE mutter-SLE-relax-some-constraints-on-CSD-windows.patch 
bnc#883491 [email protected] -- Relax some constraints on window positioning for 
CSD windows s.t. they can be placed at the very top of the monitor.
Patch1001:      mutter-SLE-relax-some-constraints-on-CSD-windows.patch
# PATCH-NEEDS-REBASE mutter-SLE-bsc984738-grab-display.patch bsc#984738 
bgo#769387 [email protected] -- Revert a upstream commit to avoid X11 race 
condition that results in wrong dialog sizes.
Patch1002:      mutter-SLE-bsc984738-grab-display.patch

BuildRequires:  Mesa-libGLESv3-devel
BuildRequires:  cmake
BuildRequires:  fdupes
BuildRequires:  meson
BuildRequires:  pkgconfig
BuildRequires:  translation-update-upstream
BuildRequires:  xorg-x11-server
BuildRequires:  xorg-x11-server-wayland
BuildRequires:  zenity
BuildRequires:  pkgconfig(cairo) >= 1.10.0
BuildRequires:  pkgconfig(egl)
BuildRequires:  pkgconfig(fribidi)
BuildRequires:  pkgconfig(gbm) >= 17.1
BuildRequires:  pkgconfig(gio-unix-2.0) >= 2.61.1
BuildRequires:  pkgconfig(glesv2)
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(gsettings-desktop-schemas) >= 3.33.0
BuildRequires:  pkgconfig(gtk+-3.0) >= 3.19.7
BuildRequires:  pkgconfig(gudev-1.0) >= 232
BuildRequires:  pkgconfig(json-glib-1.0)
BuildRequires:  pkgconfig(libcanberra-gtk3)
BuildRequires:  pkgconfig(libdrm) >= 2.4.83
BuildRequires:  pkgconfig(libinput)
BuildRequires:  pkgconfig(libpipewire-0.3) >= 0.3.0
BuildRequires:  pkgconfig(libstartup-notification-1.0)
BuildRequires:  pkgconfig(libsystemd)
BuildRequires:  pkgconfig(libudev) >= 136
BuildRequires:  pkgconfig(libwacom)
BuildRequires:  pkgconfig(pango) >= 1.2.0
BuildRequires:  pkgconfig(sm)
%if %{with profiler}
BuildRequires:  pkgconfig(sysprof-3)
BuildRequires:  pkgconfig(sysprof-capture-3)
%endif
BuildRequires:  pkgconfig(upower-glib) >= 0.99.0
BuildRequires:  pkgconfig(wayland-protocols) >= 1.18
BuildRequires:  pkgconfig(wayland-server) >= 1.13.0
BuildRequires:  pkgconfig(x11)
BuildRequires:  pkgconfig(x11-xcb)
BuildRequires:  pkgconfig(xau)
BuildRequires:  pkgconfig(xcb-randr)
BuildRequires:  pkgconfig(xcomposite) >= 0.2
BuildRequires:  pkgconfig(xcursor)
BuildRequires:  pkgconfig(xdamage)
BuildRequires:  pkgconfig(xext)
BuildRequires:  pkgconfig(xfixes)
BuildRequires:  pkgconfig(xi)
BuildRequires:  pkgconfig(xinerama)
BuildRequires:  pkgconfig(xkbcommon) >= 0.4.3
BuildRequires:  pkgconfig(xkbcommon-x11)
BuildRequires:  pkgconfig(xkbfile)
BuildRequires:  pkgconfig(xkeyboard-config)
BuildRequires:  pkgconfig(xrandr) >= 1.5.0
BuildRequires:  pkgconfig(xrender)
BuildRequires:  pkgconfig(xtst)
Requires:       zenity
Provides:       windowmanager
# Obsolete the now private typelib.
Obsoletes:      typelib-1_0-Meta-3_0

%description
Mutter is a window and compositing manager based on Clutter, forked
from Metacity.

%package -n %{libmutter}
Summary:        Window and compositing manager based on Clutter
# we need the gsettings schema; hopefully, they'll stay backwards compatible
# (since we can't require = version, to not break SLPP)
Group:          System/Libraries
Requires:       %{name}-data >= %{version}
# We need to obsolete the old mutter libs, as otherwise upgrading is impossible
# This makes me believe we should probably fold libmutter into the main package
# with the next update (3.30)
Obsoletes:      libmutter-1-0
Obsoletes:      libmutter0

%description -n %{libmutter}
Mutter is a window and compositing manager based on Clutter, forked
from Metacity.

This package contains a library for shared features.

%package data
Summary:        Data files for mutter, a window and compositing manager based 
on Clutter
Group:          System/GUI/GNOME
Requires:       %{name} = %{version}

%description data
Mutter is a window and compositing manager based on Clutter, forked
from Metacity.

This package contains data files needed by mutter and its library.

%package devel
Summary:        Development files for mutter, a window and compositing manager
Group:          Development/Libraries/GNOME
Requires:       %{libmutter} = %{version}
Requires:       %{name} = %{version}

%description devel
This subpackage contains libraries and header files for developing
applications that want to make use of the mutter library.

%lang_package

%prep
%setup -q
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1

# SLE-only patches and translations.
translation-update-upstream po mutter
%if 0%{?sle_version}
%patch1000 -p1
%patch1001 -p1
# %patch1002 -p1
%endif

%build
%define _lto_cflags %{nil}
%meson \
        -Degl_device=true \
        -Dcogl_tests=false \
        -Dclutter_tests=false \
        -Dtests=false \
        -Dinstalled_tests=false \
%if %{with profiler}
        -Dprofiler=true \
%else
        -Dprofiler=false \
%endif
        %{nil}
%meson_build

#%%check
#%%meson_test

%install
%meson_install
%find_lang %{name} %{?no_lang_C}
%fdupes %{buildroot}%{_prefix}

%post -n %{libmutter} -p /sbin/ldconfig
%postun -n %{libmutter} -p /sbin/ldconfig

%files
%license COPYING
%doc NEWS
%{_mandir}/man1/mutter.1%{?ext_man}
%{_bindir}/mutter
%{_libexecdir}/mutter-restart-helper
%{_datadir}/applications/mutter.desktop

# These so files are not split out since they are private to mutter
%{_libdir}/mutter-%{api_major}/libmutter-clutter-%{api_major}.so.*
%{_libdir}/mutter-%{api_major}/libmutter-cogl-pango-%{api_major}.so.*
%{_libdir}/mutter-%{api_major}/libmutter-cogl-path-%{api_major}.so.*
%{_libdir}/mutter-%{api_major}/libmutter-cogl-%{api_major}.so.*
%{_libdir}/mutter-%{api_major}/plugins/libdefault.so

# These typelibs are not split out since they are private to mutter
%{_libdir}/mutter-%{api_major}/Cally-%{api_major}.typelib
%{_libdir}/mutter-%{api_major}/Clutter-%{api_major}.typelib
%{_libdir}/mutter-%{api_major}/ClutterX11-%{api_major}.typelib
%{_libdir}/mutter-%{api_major}/Cogl-%{api_major}.typelib
%{_libdir}/mutter-%{api_major}/CoglPango-%{api_major}.typelib
%{_libdir}/mutter-%{api_major}/Meta-%{api_major}.typelib

%files -n %{libmutter}
%{_libdir}/libmutter-%{api_major}.so.*
%dir %{_libdir}/mutter-%{api_major}/
# users of libmutter need this directory
%dir %{_libdir}/mutter-%{api_major}/plugins/

%files data
# Do not depend on g-c-c just for a directory
%dir %{_datadir}/gnome-control-center
%dir %{_datadir}/gnome-control-center/keybindings
%{_datadir}/gnome-control-center/keybindings/50-mutter-windows.xml
%{_datadir}/gnome-control-center/keybindings/50-mutter-navigation.xml
%{_datadir}/gnome-control-center/keybindings/50-mutter-system.xml
%{_datadir}/gnome-control-center/keybindings/50-mutter-wayland.xml
%{_datadir}/GConf/gsettings/mutter-schemas.convert
%{_datadir}/glib-2.0/schemas/org.gnome.mutter.gschema.xml
%{_datadir}/glib-2.0/schemas/org.gnome.mutter.wayland.gschema.xml

%files devel
%{_includedir}/mutter-%{api_major}/
%{_libdir}/mutter-%{api_major}/Meta-%{api_major}.gir
%{_libdir}/mutter-%{api_major}/Cally-%{api_major}.gir
%{_libdir}/mutter-%{api_major}/Clutter-%{api_major}.gir
%{_libdir}/mutter-%{api_major}/ClutterX11-%{api_major}.gir
%{_libdir}/mutter-%{api_major}/Cogl-%{api_major}.gir
%{_libdir}/mutter-%{api_major}/CoglPango-%{api_major}.gir
%{_libdir}/mutter-%{api_major}/libmutter-clutter-%{api_major}.so
%{_libdir}/mutter-%{api_major}/libmutter-cogl-pango-%{api_major}.so
%{_libdir}/mutter-%{api_major}/libmutter-cogl-path-%{api_major}.so
%{_libdir}/mutter-%{api_major}/libmutter-cogl-%{api_major}.so
%{_libdir}/libmutter-%{api_major}.so
%{_libdir}/pkgconfig/libmutter-%{api_major}.pc
%{_libdir}/pkgconfig/mutter-clutter-%{api_major}.pc
%{_libdir}/pkgconfig/mutter-clutter-x11-%{api_major}.pc
%{_libdir}/pkgconfig/mutter-cogl-%{api_major}.pc
%{_libdir}/pkgconfig/mutter-cogl-pango-%{api_major}.pc
%{_libdir}/pkgconfig/mutter-cogl-path-%{api_major}.pc

%files lang -f %{name}.lang

%changelog
++++++ 0001-Update-to-PipeWire-0.3-API.patch ++++++
>From c5d2fc856a28b3a4f26ffffa420cbd9ff92875bb Mon Sep 17 00:00:00 2001
From: Wim Taymans <[email protected]>
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 <spa/param/props.h>
 #include <spa/param/format-utils.h>
 #include <spa/param/video/format-utils.h>
+#include <spa/utils/result.h>
 #include <stdint.h>
 #include <sys/mman.h>
 
@@ -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

++++++ _service ++++++
<services>
  <service name="obs_scm" mode="disabled">
    <param name="scm">git</param>
    <param name="url">https://gitlab.gnome.org/GNOME/mutter.git</param>
    <param name="revision">refs/tags/3.34.6</param>
    <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
    <param name="versionrewrite-pattern">(.*)\+0</param>
    <param name="versionrewrite-replacement">\1</param>
    <param name="changesgenerate">enable</param>
  </service>
  <service name="tar" mode="buildtime"/>
  <service name="recompress" mode="buildtime">
    <param name="file">*.tar</param>
    <param name="compression">xz</param>
  </service>
  <service name="set_version" mode="disabled" />
</services>


++++++ _servicedata ++++++
<servicedata>
<service name="tar_scm">
                <param 
name="url">https://gitlab.gnome.org/GNOME/mutter.git</param>
              <param 
name="changesrevision">48ffbb582404c1d52196eb6cc5f082c31ca4910c</param></service></servicedata>++++++
 mutter-Lower-HIDPI_LIMIT-to-144.patch ++++++
>From 1511039a96d158bcf4b731599ae3af3f98b9b166 Mon Sep 17 00:00:00 2001
From: Chingkai <[email protected]>
Date: Thu, 21 Feb 2019 12:39:52 +0800
Subject: [PATCH] monitor: Lower HIDPI_LIMIT to 144

---
 src/backends/meta-monitor.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
index 60f3674..e0db546 100644
--- a/src/backends/meta-monitor.c
+++ b/src/backends/meta-monitor.c
@@ -1476,7 +1476,7 @@ meta_monitor_calculate_crtc_pos (MetaMonitor         
*monitor,
 }
 
 /* The minimum resolution at which we turn on a window-scale of 2 */
-#define HIDPI_LIMIT 192
+#define HIDPI_LIMIT 144
 
 /*
  * The minimum screen height at which we turn on a window-scale of 2;
-- 
2.16.4

++++++ mutter-SLE-bell.patch ++++++
Index: mutter-3.34.1+24/src/meta/prefs.h
===================================================================
--- mutter-3.34.1+24.orig/src/meta/prefs.h
+++ mutter-3.34.1+24/src/meta/prefs.h
@@ -91,6 +91,7 @@ typedef enum
   META_PREF_WORKSPACE_NAMES,
   META_PREF_VISUAL_BELL,
   META_PREF_AUDIBLE_BELL,
+  META_PREF_AUDIBLE_BELL_FORCE_THROUGH_SERVER,
   META_PREF_VISUAL_BELL_TYPE,
   META_PREF_GNOME_ACCESSIBILITY,
   META_PREF_GNOME_ANIMATIONS,
@@ -479,6 +480,9 @@ META_EXPORT
 gboolean           meta_prefs_bell_is_audible      (void);
 
 META_EXPORT
+gboolean           meta_prefs_bell_force_through_server (void);
+
+META_EXPORT
 GDesktopVisualBellType meta_prefs_get_visual_bell_type (void);
 
 #endif
Index: mutter-3.34.1+24/src/core/prefs.c
===================================================================
--- mutter-3.34.1+24.orig/src/core/prefs.c
+++ mutter-3.34.1+24/src/core/prefs.c
@@ -99,6 +99,7 @@ static gboolean auto_raise_delay = 500;
 static gboolean focus_change_on_pointer_rest = FALSE;
 static gboolean bell_is_visible = FALSE;
 static gboolean bell_is_audible = TRUE;
+static gboolean bell_force_through_server = FALSE;
 static gboolean gnome_accessibility = FALSE;
 static gboolean gnome_animations = TRUE;
 static gboolean locate_pointer_is_enabled = FALSE;
@@ -346,6 +347,13 @@ static MetaBoolPreference preferences_bo
       &bell_is_audible, /* FIXME: change the name: it's confusing */
     },
     {
+      { "audible-bell-force-through-server",
+        SCHEMA_MUTTER,
+        META_PREF_AUDIBLE_BELL_FORCE_THROUGH_SERVER,
+      },
+      &bell_force_through_server,
+    },
+    {
       { KEY_GNOME_ACCESSIBILITY,
         SCHEMA_INTERFACE,
         META_PREF_GNOME_ACCESSIBILITY,
@@ -1654,6 +1662,9 @@ meta_preference_to_string (MetaPreferenc
     case META_PREF_AUDIBLE_BELL:
       return "AUDIBLE_BELL";
 
+    case META_PREF_AUDIBLE_BELL_FORCE_THROUGH_SERVER:
+      return "AUDIBLE_BELL_FORCE_THROUGH_SERVER";
+
     case META_PREF_VISUAL_BELL_TYPE:
       return "VISUAL_BELL_TYPE";
 
@@ -1929,6 +1940,12 @@ meta_prefs_bell_is_audible (void)
   return bell_is_audible;
 }
 
+gboolean
+meta_prefs_bell_force_through_server (void)
+{
+  return bell_force_through_server;
+}
+
 GDesktopVisualBellType
 meta_prefs_get_visual_bell_type (void)
 {
Index: mutter-3.34.1+24/src/core/bell.c
===================================================================
--- mutter-3.34.1+24.orig/src/core/bell.c
+++ mutter-3.34.1+24/src/core/bell.c
@@ -54,6 +54,11 @@
 #include "core/window-private.h"
 #include "meta/compositor.h"
 
+#include "meta/display.h"
+#include "meta/meta-x11-display.h"
+#include <X11/Xlib.h>
+#include <X11/XKBlib.h>
+
 G_DEFINE_TYPE (MetaBell, meta_bell, G_TYPE_OBJECT)
 
 enum
@@ -202,6 +207,14 @@ meta_bell_notify (MetaDisplay *display,
   if (meta_prefs_get_visual_bell ())
     bell_visual_notify (display, window);
 
+  if (meta_prefs_bell_force_through_server ())
+   {
+    MetaX11Display *x11_display = meta_display_get_x11_display (display);
+    Display *xdisplay = meta_x11_display_get_xdisplay (x11_display);
+    XkbForceBell (xdisplay, 100);
+    return TRUE;
+    }
+
   if (meta_prefs_bell_is_audible ())
     return bell_audible_notify (display, window);
 
Index: mutter-3.34.1+24/data/org.gnome.mutter.gschema.xml.in
===================================================================
--- mutter-3.34.1+24.orig/data/org.gnome.mutter.gschema.xml.in
+++ mutter-3.34.1+24/data/org.gnome.mutter.gschema.xml.in
@@ -137,6 +137,16 @@
       </description>
     </key>
 
+    <key name="audible-bell-force-through-server" type="b">
+      <default>false</default>
+      <summary>Force the System Bell through the X server only.</summary>
+      <description>
+        Force the System Bell through the X server only for systems that
+        do not want to go through the sound card - for example that don't
+        have speakers.
+      </description>
+    </key>
+
     <child name="keybindings" schema="org.gnome.mutter.keybindings"/>
 
   </schema>
++++++ mutter-SLE-bsc984738-grab-display.patch ++++++
diff --git a/src/core/display-private.h b/src/core/display-private.h
index 531c6f7..aaa90ec 100644
--- a/src/core/display-private.h
+++ b/src/core/display-private.h
@@ -174,6 +174,8 @@ struct _MetaDisplay
   GHashTable *stamps;
   GHashTable *wayland_windows;
 
+  int server_grab_count;
+
   /* serials of leave/unmap events that may
    * correspond to an enter event we should
    * ignore
@@ -322,6 +324,8 @@ struct _MetaDisplayClass
 gboolean      meta_display_open                (void);
 void          meta_display_close               (MetaDisplay *display,
                                                 guint32      timestamp);
+void          meta_display_grab                (MetaDisplay *display);
+void          meta_display_ungrab              (MetaDisplay *display);
 
 void          meta_display_unmanage_windows_for_screen (MetaDisplay *display,
                                                         MetaScreen  *screen,
diff --git a/src/core/display.c b/src/core/display.c
index 4c7a00e..87e3307 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -585,6 +585,7 @@ meta_display_open (void)
   display->focus_serial = 0;
   display->server_focus_window = None;
   display->server_focus_serial = 0;
+  display->server_grab_count = 0;
 
   display->mouse_mode = TRUE; /* Only relevant for mouse or sloppy focus */
   display->allow_terminal_deactivation = TRUE; /* Only relevant for when a
@@ -1130,6 +1131,50 @@ meta_display_close (MetaDisplay *display,
   meta_quit (META_EXIT_SUCCESS);
 }
 
+/* Grab/ungrab routines taken from fvwm.
+ * Calling this function will cause X to ignore all other clients until
+ * you ungrab. This may not be quite as bad as it sounds, yet there is
+ * agreement that avoiding server grabs except when they are clearly needed
+ * is a good thing.
+ *
+ * If you do use such grabs, please clearly explain the necessity for their
+ * usage in a comment. Try to keep their scope extremely limited. In
+ * particular, try to avoid emitting any signals or notifications while
+ * a grab is active (if the signal receiver tries to block on an X request
+ * from another client at this point, you will have a deadlock).
+ */
+void
+meta_display_grab (MetaDisplay *display)
+{
+  if (display->server_grab_count == 0)
+    {
+      XGrabServer (display->xdisplay);
+    }
+  display->server_grab_count += 1;
+  meta_verbose ("Grabbing display, grab count now %d\n",
+                display->server_grab_count);
+}
+
+void
+meta_display_ungrab (MetaDisplay *display)
+{
+  if (display->server_grab_count == 0)
+    meta_bug ("Ungrabbed non-grabbed server\n");
+
+  display->server_grab_count -= 1;
+  if (display->server_grab_count == 0)
+    {
+      /* FIXME we want to purge all pending "queued" stuff
+       * at this point, such as window hide/show
+       */
+      XUngrabServer (display->xdisplay);
+      XFlush (display->xdisplay);
+    }
+
+  meta_verbose ("Ungrabbing display, grab count now %d\n",
+                display->server_grab_count);
+}
+
 /**
  * meta_display_for_x_display:
  * @xdisplay: An X display
@@ -1516,7 +1561,7 @@ request_xserver_input_focus_change (MetaDisplay *display,
    * we know which is which by making two requests that the server will
    * process at the same time.
    */
-  XGrabServer (display->xdisplay);
+  meta_display_grab (display);
 
   serial = XNextRequest (display->xdisplay);
 
@@ -1529,8 +1574,7 @@ request_xserver_input_focus_change (MetaDisplay *display,
                    display->atom__MUTTER_FOCUS_SET,
                    XA_STRING, 8, PropModeAppend, NULL, 0);
 
-  XUngrabServer (display->xdisplay);
-  XFlush (display->xdisplay);
+  meta_display_ungrab (display);
 
   meta_display_update_focus_window (display,
                                     meta_window,
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index ed34aea..a989200 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -979,6 +979,9 @@ meta_display_grab_window_buttons (MetaDisplay *display,
 {
   MetaKeyBindingManager *keys = &display->key_binding_manager;
 
+  if (display->server_grab_count > 0)
+    return;
+
   /* Grab Alt + button1 for moving window.
    * Grab Alt + button2 for resizing window.
    * Grab Alt + button3 for popping up window menu.
@@ -1015,6 +1018,9 @@ meta_display_ungrab_window_buttons (MetaDisplay *display,
 {
   MetaKeyBindingManager *keys = &display->key_binding_manager;
 
+  if (display->server_grab_count > 0)
+    return;
+
   if (keys->window_grab_modifiers == 0)
     return;
 
@@ -1041,6 +1047,9 @@ meta_display_grab_focus_window_button (MetaDisplay 
*display,
 {
   MetaKeyBindingManager *keys = &display->key_binding_manager;
 
+  if (display->server_grab_count > 0)
+    return;
+
   /* Grab button 1 for activating unfocused windows */
   meta_verbose ("Grabbing unfocused window buttons for %s\n", window->desc);
 
@@ -1080,6 +1089,9 @@ meta_display_ungrab_focus_window_button (MetaDisplay 
*display,
 {
   MetaKeyBindingManager *keys = &display->key_binding_manager;
 
+  if (display->server_grab_count > 0)
+    return;
+
   meta_verbose ("Ungrabbing unfocused window buttons for %s\n", window->desc);
 
   if (!window->have_focus_click_grab)
@@ -1309,6 +1321,9 @@ meta_window_grab_keys (MetaWindow  *window)
   MetaDisplay *display = window->display;
   MetaKeyBindingManager *keys = &display->key_binding_manager;
 
+  if (display->server_grab_count > 0)
+    return;
+
   if (window->all_keys_grabbed)
     return;
 
@@ -1348,6 +1363,9 @@ meta_window_ungrab_keys (MetaWindow  *window)
       MetaDisplay *display = window->display;
       MetaKeyBindingManager *keys = &display->key_binding_manager;
 
+      if (display->server_grab_count > 0)
+        return;
+
       if (window->grab_on_frame &&
           window->frame != NULL)
         change_window_keygrabs (keys, window->frame->xwindow, FALSE);
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
index 3d47f0d..5ea1213 100644
--- a/src/x11/window-x11.c
+++ b/src/x11/window-x11.c
@@ -507,6 +507,8 @@ meta_window_x11_manage (MetaWindow *window)
 
   meta_icon_cache_init (&priv->icon_cache);
 
+  meta_display_grab (display);
+
   meta_display_register_x_window (display, &window->xwindow, window);
 
   /* assign the window to its group, or create a new group if needed */
@@ -565,6 +567,13 @@ meta_window_x11_manage (MetaWindow *window)
 
   meta_window_x11_update_shape_region (window);
   meta_window_x11_update_input_region (window);
+
+  meta_display_ungrab (display);
+
+  /* Perform operations prevented by grab */
+  if (window->frame)
+    meta_display_grab_window_buttons (display, window->frame->xwindow);
+  meta_window_grab_keys (window);
 }
 
 static void
++++++ mutter-SLE-relax-some-constraints-on-CSD-windows.patch ++++++
Index: mutter-3.23.2/src/core/constraints.c
===================================================================
--- mutter-3.23.2.orig/src/core/constraints.c
+++ mutter-3.23.2/src/core/constraints.c
@@ -1466,6 +1466,12 @@ constrain_to_single_monitor (MetaWindow
 }
 
 static gboolean
+constraint_is_sle_classic(void){
+  char * session_mode = (char *) g_getenv ("GNOME_SHELL_SESSION_MODE");
+  return g_strcmp0("sle-classic", session_mode) == 0;
+}
+
+static gboolean
 constrain_fully_onscreen (MetaWindow         *window,
                           ConstraintInfo     *info,
                           ConstraintPriority  priority,
@@ -1481,6 +1487,11 @@ constrain_fully_onscreen (MetaWindow
   if (window->type == META_WINDOW_DESKTOP ||
       window->type == META_WINDOW_DOCK    ||
       window->fullscreen                  ||
+      /* in SLE Classic, there is no top bar and to avoid issues like
+       * bnc#883491, remove some constraints on CSD windows, which tends to 
have
+       * invisible wrapper box. Do the same for "constrain_titlebar_visible".
+       */
+      (constraint_is_sle_classic() && !window->decorated) ||
       !window->require_fully_onscreen     ||
       info->is_user_action                ||
       meta_window_get_placement_rule (window))
@@ -1518,11 +1529,12 @@ constrain_titlebar_visible (MetaWindow
    * is only meant for normal windows (e.g. we don't want docks to be shoved
    * "onscreen" by their own strut).
    */
-  if (window->type == META_WINDOW_DESKTOP ||
-      window->type == META_WINDOW_DOCK    ||
-      window->fullscreen                  ||
-      !window->require_titlebar_visible   ||
-      unconstrained_user_action           ||
+  if (window->type == META_WINDOW_DESKTOP                 ||
+      window->type == META_WINDOW_DOCK                    ||
+      window->fullscreen                                  ||
+      (constraint_is_sle_classic() && !window->decorated) ||
+      !window->require_titlebar_visible                   ||
+      unconstrained_user_action                           ||
       meta_window_get_placement_rule (window))
     return TRUE;
 
++++++ mutter-disable-cvt-s390x.patch ++++++
Index: mutter-3.34.1+27/src/meson.build
===================================================================
--- mutter-3.34.1+27.orig/src/meson.build       2019-10-21 15:03:25.000000000 
+0200
+++ mutter-3.34.1+27/src/meson.build    2019-12-02 13:30:20.320685900 +0100
@@ -722,6 +722,7 @@
 endif
 
 if have_native_backend
+  if host_machine.cpu_family() != 's390x'
   cvt = find_program('cvt')
 
   gen_default_modes = find_program('backends/native/gen-default-modes.py')
@@ -729,6 +730,9 @@
     output: 'meta-default-modes.h',
     command: [gen_default_modes, '@OUTPUT@']
   )
+  else
+    default_modes_h = 'backends/native/meta-default-modes.h'
+  endif
   mutter_built_sources += default_modes_h
 
   gdbus_codegen = find_program('gdbus-codegen')
Index: mutter-3.34.1+27/src/backends/native/meta-default-modes.h
===================================================================
--- /dev/null   1970-01-01 00:00:00.000000000 +0000
+++ mutter-3.34.1+27/src/backends/native/meta-default-modes.h   2019-12-02 
13:09:44.832632052 +0100
@@ -0,0 +1,57 @@
+/* Generated by gen-default-modes.py */
+
+static const drmModeModeInfo meta_default_landscape_drm_mode_infos[] = {
+{ 38250, 800, 832, 912, 1024, 0, 600, 603, 607, 624, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"800x600_60.00" },
+{ 63500, 1024, 1072, 1176, 1328, 0, 768, 771, 775, 798, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1024x768_60.00" },
+{ 81750, 1152, 1216, 1336, 1520, 0, 864, 867, 871, 897, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1152x864_60.00" },
+{ 101250, 1280, 1360, 1488, 1696, 0, 960, 963, 967, 996, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1280x960_60.00" },
+{ 121750, 1400, 1488, 1632, 1864, 0, 1050, 1053, 1057, 1089, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1400x1050_60.00" },
+{ 129000, 1440, 1528, 1680, 1920, 0, 1080, 1083, 1087, 1120, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1440x1080_60.00" },
+{ 161000, 1600, 1712, 1880, 2160, 0, 1200, 1203, 1207, 1245, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1600x1200_60.00" },
+{ 233500, 1920, 2064, 2264, 2608, 0, 1440, 1443, 1447, 1493, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1920x1440_60.00" },
+{ 267250, 2048, 2208, 2424, 2800, 0, 1536, 1539, 1543, 1592, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"2048x1536_60.00" },
+{ 83500, 1280, 1352, 1480, 1680, 0, 800, 803, 809, 831, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1280x800_60.00" },
+{ 106500, 1440, 1528, 1672, 1904, 0, 900, 903, 909, 934, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1440x900_60.00" },
+{ 146250, 1680, 1784, 1960, 2240, 0, 1050, 1053, 1059, 1089, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1680x1050_60.00" },
+{ 193250, 1920, 2056, 2256, 2592, 0, 1200, 1203, 1209, 1245, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1920x1200_60.00" },
+{ 348500, 2560, 2760, 3032, 3504, 0, 1600, 1603, 1609, 1658, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"2560x1600_60.00" },
+{ 74500, 1280, 1344, 1472, 1664, 0, 720, 723, 728, 748, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1280x720_60.00" },
+{ 85250, 1368, 1440, 1576, 1784, 0, 768, 771, 781, 798, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1368x768_60.00" },
+{ 118250, 1600, 1696, 1856, 2112, 0, 900, 903, 908, 934, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1600x900_60.00" },
+{ 173000, 1920, 2048, 2248, 2576, 0, 1080, 1083, 1088, 1120, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1920x1080_60.00" },
+{ 197000, 2048, 2184, 2400, 2752, 0, 1152, 1155, 1160, 1195, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"2048x1152_60.00" },
+{ 312250, 2560, 2752, 3024, 3488, 0, 1440, 1443, 1448, 1493, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"2560x1440_60.00" },
+{ 396250, 2880, 3096, 3408, 3936, 0, 1620, 1623, 1628, 1679, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"2880x1620_60.00" },
+{ 492000, 3200, 3456, 3800, 4400, 0, 1800, 1803, 1808, 1865, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"3200x1800_60.00" },
+{ 712750, 3840, 4160, 4576, 5312, 0, 2160, 2163, 2168, 2237, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"3840x2160_60.00" },
+{ 813000, 4096, 4440, 4888, 5680, 0, 2304, 2307, 2312, 2386, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"4096x2304_60.00" },
+{ 1276500, 5120, 5560, 6128, 7136, 0, 2880, 2883, 2888, 2982, 0, 0, 
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC, DRM_MODE_TYPE_DEFAULT, 
"5120x2880_60.00" },
+};
+
+static const drmModeModeInfo meta_default_portrait_drm_mode_infos[] = {
+{ 38250, 600, 603, 607, 624, 0, 800, 832, 912, 1024, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"600x800_60.00" },
+{ 63500, 768, 771, 775, 798, 0, 1024, 1072, 1176, 1328, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"768x1024_60.00" },
+{ 81750, 864, 867, 871, 897, 0, 1152, 1216, 1336, 1520, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"864x1152_60.00" },
+{ 101250, 960, 963, 967, 996, 0, 1280, 1360, 1488, 1696, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"960x1280_60.00" },
+{ 121750, 1050, 1053, 1057, 1089, 0, 1400, 1488, 1632, 1864, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1050x1400_60.00" },
+{ 129000, 1080, 1083, 1087, 1120, 0, 1440, 1528, 1680, 1920, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1080x1440_60.00" },
+{ 161000, 1200, 1203, 1207, 1245, 0, 1600, 1712, 1880, 2160, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1200x1600_60.00" },
+{ 233500, 1440, 1443, 1447, 1493, 0, 1920, 2064, 2264, 2608, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1440x1920_60.00" },
+{ 267250, 1536, 1539, 1543, 1592, 0, 2048, 2208, 2424, 2800, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1536x2048_60.00" },
+{ 83500, 800, 803, 809, 831, 0, 1280, 1352, 1480, 1680, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"800x1280_60.00" },
+{ 106500, 900, 903, 909, 934, 0, 1440, 1528, 1672, 1904, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"900x1440_60.00" },
+{ 146250, 1050, 1053, 1059, 1089, 0, 1680, 1784, 1960, 2240, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1050x1680_60.00" },
+{ 193250, 1200, 1203, 1209, 1245, 0, 1920, 2056, 2256, 2592, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1200x1920_60.00" },
+{ 348500, 1600, 1603, 1609, 1658, 0, 2560, 2760, 3032, 3504, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1600x2560_60.00" },
+{ 74500, 720, 723, 728, 748, 0, 1280, 1344, 1472, 1664, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"720x1280_60.00" },
+{ 85250, 768, 771, 781, 798, 0, 1368, 1440, 1576, 1784, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"768x1368_60.00" },
+{ 118250, 900, 903, 908, 934, 0, 1600, 1696, 1856, 2112, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"900x1600_60.00" },
+{ 173000, 1080, 1083, 1088, 1120, 0, 1920, 2048, 2248, 2576, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1080x1920_60.00" },
+{ 197000, 1152, 1155, 1160, 1195, 0, 2048, 2184, 2400, 2752, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1152x2048_60.00" },
+{ 312250, 1440, 1443, 1448, 1493, 0, 2560, 2752, 3024, 3488, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1440x2560_60.00" },
+{ 396250, 1620, 1623, 1628, 1679, 0, 2880, 3096, 3408, 3936, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1620x2880_60.00" },
+{ 492000, 1800, 1803, 1808, 1865, 0, 3200, 3456, 3800, 4400, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"1800x3200_60.00" },
+{ 712750, 2160, 2163, 2168, 2237, 0, 3840, 4160, 4576, 5312, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"2160x3840_60.00" },
+{ 813000, 2304, 2307, 2312, 2386, 0, 4096, 4440, 4888, 5680, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"2304x4096_60.00" },
+{ 1276500, 2880, 2883, 2888, 2982, 0, 5120, 5560, 6128, 7136, 0, 0, 
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, DRM_MODE_TYPE_DEFAULT, 
"2880x5120_60.00" },
+};
++++++ mutter-fix-mesa20.patch ++++++
>From a444a4c5f58ea516ad3cd9d6ddc0056c3ca9bc90 Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <[email protected]>
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 <EGL/egl.h>\n#include <EGL/eglext.h>'
+  cogl_egl_includes_string = '#include <EGL/egl.h>\n#include 
<EGL/eglext.h>\n#include <EGL/eglmesaext.h>'
 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 <EGL/egl.h>
 #include <EGL/eglext.h>
+#include <EGL/eglmesaext.h>
 
 /*
  * 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 <EGL/egl.h>
 #include <EGL/eglext.h>
+#include <EGL/eglmesaext.h>
 #include <gio/gio.h>
 #include <glib.h>
 #include <glib-object.h>
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 <EGL/egl.h>
 #include <EGL/eglext.h>
+#include <EGL/eglmesaext.h>
 #include <glib-object.h>
 
 #define META_EGL_ERROR meta_egl_error_quark ()
-- 
2.24.1


++++++ mutter-meson_options-Use-libGLESv2.so.2-for-COGL_DRIVER-gle.patch ++++++
>From dfe33897db0989635e4a789290dd2a73da39ca5c Mon Sep 17 00:00:00 2001
From: Daniel van Vugt <[email protected]>
Date: Tue, 9 Jun 2020 18:25:59 +0800
Subject: [PATCH] meson_options: Use libGLESv2.so.2 for COGL_DRIVER=gles2, not
 libGLESv2.so

The former is present on any system that supports OpenGL|ES 2. The latter
is just provided in developer packages. Since we access the library via
`g_module_open` it's safe to just rely on `libGLESv2.so.2`.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1282

https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1298
---
 meson_options.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meson_options.txt b/meson_options.txt
index 75a1961e4..655ef433f 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -12,7 +12,7 @@ option('opengl_libname',
 
 option('gles2_libname',
   type: 'string',
-  value: 'libGLESv2.so',
+  value: 'libGLESv2.so.2',
   description: 'GLESv2 library file name'
 )
 
-- 
2.26.2
++++++ mutter-wayland-fix-keyboard-move-resize-window.patch ++++++
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;
++++++ mutter.obsinfo ++++++
name: mutter
version: 3.34.6
mtime: 1588259587
commit: 48ffbb582404c1d52196eb6cc5f082c31ca4910c


Reply via email to