import CS mutter-40.9-24.el9

This commit is contained in:
eabdullin 2025-03-11 07:49:35 +00:00
parent c3b6b4ccc6
commit 6208210bb9
10 changed files with 710 additions and 3 deletions

View File

@ -0,0 +1,51 @@
From d71294da2282fe9a82cc8661d3110c8020a5069a Mon Sep 17 00:00:00 2001
From: Jocelyn Falempe <jfalempe@redhat.com>
Date: Wed, 13 Mar 2024 15:34:14 +0100
Subject: [PATCH] backend/native: Use drmModeCloseFB for flicker-free login
When logging in from gdm to gnome, the main plane is deactivated, and
leads to the screen going blank before gnome is able to enable it
again.
Using the new CloseFB ioctl, allows to keep the gdm login screen
displayed until gnome-shell replace it.
Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com>
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3659>
(cherry picked from commit a775241efd8b840e7789077fb2224f0df2361d54)
---
meson.build | 3 ++-
src/backends/native/meta-drm-buffer.c | 4 +++-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/meson.build b/meson.build
index 613aa67792..0c342ed335 100644
--- a/meson.build
+++ b/meson.build
@@ -45,7 +45,8 @@ wayland_protocols_req = '>= 1.19'
# native backend version requirements
libinput_req = '>= 1.15.0'
-gbm_req = '>= 17.3'
+gbm_req = '>= 21.3'
+libdrm_req = '>= 2.4.118'
# screen cast version requirements
libpipewire_req = '>= 0.3.21'
diff --git a/src/backends/native/meta-drm-buffer.c b/src/backends/native/meta-drm-buffer.c
index a0f8055b31..c650484552 100644
--- a/src/backends/native/meta-drm-buffer.c
+++ b/src/backends/native/meta-drm-buffer.c
@@ -211,7 +211,9 @@ rm_fb_in_impl (MetaKmsImpl *impl,
int ret;
fd = meta_kms_impl_device_get_fd (impl_device);
- ret = drmModeRmFB (fd, fb_id);
+ ret = drmModeCloseFB (fd, fb_id);
+ if (ret == -EINVAL)
+ ret = drmModeRmFB (fd, fb_id);
if (ret != 0)
g_warning ("drmModeRmFB: %s", g_strerror (-ret));
--
2.44.0.501.g19981daefd.dirty

View File

@ -0,0 +1,26 @@
From 088644fb1773b64ca45dec497589517e1774eac1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Tue, 27 Aug 2024 11:33:14 +0200
Subject: [PATCH 1/5] display: Make cgroup constructor local
This silences a warning about a missing function declaration.
---
src/core/display.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/core/display.c b/src/core/display.c
index 4c9038e627..97f591a876 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -1619,7 +1619,7 @@ extract_app_id_from_cgroup (const char *cgroup)
return g_steal_pointer (&app_id);
}
-MetaCGroup*
+static MetaCGroup*
meta_cgroup_new (const char *path)
{
MetaCGroup *cgroup;
--
2.44.0.501.g19981daefd.dirty

View File

@ -0,0 +1,48 @@
From 0fe26e5b6d1e6f03a99623edf6a6f4c6caa2e142 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@redhat.com>
Date: Tue, 15 Oct 2024 14:56:33 +0200
Subject: [PATCH 1/2] wayland/wl-shell: Make sure created window has a proper
size
The wl_shell_window construction is a bit messy, and was not properly
resizing when a window was created after a buffer was attached. This,
when the window was the dummy window in wl-paste, caused a SIGFPE as the
window was incorrectly assumed to be 0x0, i.e. size being 0.
---
src/wayland/meta-wayland-wl-shell.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/wayland/meta-wayland-wl-shell.c b/src/wayland/meta-wayland-wl-shell.c
index 964c185b23..51d88cea2b 100644
--- a/src/wayland/meta-wayland-wl-shell.c
+++ b/src/wayland/meta-wayland-wl-shell.c
@@ -481,7 +481,7 @@ sync_wl_shell_parent_relationship (MetaWaylandSurface *surface,
}
}
-static void
+static MetaWindow *
create_wl_shell_surface_window (MetaWaylandSurface *surface)
{
MetaWaylandWlShellSurface *wl_shell_surface =
@@ -513,6 +513,8 @@ create_wl_shell_surface_window (MetaWaylandSurface *surface)
if (meta_wayland_surface_get_window (child))
sync_wl_shell_parent_relationship (child, surface);
}
+
+ return window;
}
static void
@@ -597,7 +599,7 @@ wl_shell_surface_role_apply_state (MetaWaylandSurfaceRole *surface_role,
* convenient for us. */
if (surface->buffer_ref->buffer && !window)
{
- create_wl_shell_surface_window (surface);
+ window = create_wl_shell_surface_window (surface);
}
else if (!surface->buffer_ref->buffer && window)
{
--
2.44.0.501.g19981daefd.dirty

View File

@ -0,0 +1,27 @@
From 37b4b8dd63851e97b507008fe1028a259c0419c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Tue, 27 Aug 2024 11:33:22 +0200
Subject: [PATCH 2/5] display: Also set window cgroup on cgroup creation
We'd register the cgroup for a window twice, because the firs time
didn't update the MetaWindow::cgroup pointer. This meant the cgroups
were never removed.
---
src/core/display.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/core/display.c b/src/core/display.c
index 97f591a876..e99e787fbe 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -1704,6 +1704,7 @@ meta_display_register_cgroup (MetaDisplay *display,
cgroup = meta_cgroup_new (path);
g_hash_table_insert (display->cgroups, g_file_get_path (cgroup->path), cgroup);
+ window->cgroup = cgroup;
}
void
--
2.44.0.501.g19981daefd.dirty

View File

@ -0,0 +1,24 @@
From e434615ed1d4ba506e0282ad5cdc94303310c682 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@redhat.com>
Date: Wed, 16 Oct 2024 14:26:28 +0200
Subject: [PATCH 2/2] window: Avoid SIGFPE on bogus window size
---
src/core/window.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/core/window.c b/src/core/window.c
index 512ef9312f..142aa0eca1 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -2393,6 +2393,7 @@ window_would_mostly_be_covered_by_always_above_window (MetaWindow *window)
}
window_area = window->rect.width * window->rect.height;
+ g_return_val_if_fail (window_area > 0, FALSE);
cairo_region_intersect_rectangle (region, &window->rect);
intersection_area = calculate_region_area (region);
--
2.44.0.501.g19981daefd.dirty

View File

@ -0,0 +1,36 @@
From dd887dcf4770309fca127217660c5142a463e2c1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Tue, 27 Aug 2024 11:33:23 +0200
Subject: [PATCH 3/5] window: Unregister cgroup on unmanage()
This means any potential reference held by gjs will not hold the cgroup
alive longer than necessary.
---
src/core/window.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/core/window.c b/src/core/window.c
index 142aa0eca1..272d664965 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -339,8 +339,6 @@ meta_window_finalize (GObject *object)
g_free (window->sm_client_id);
g_free (window->wm_client_machine);
- meta_display_unregister_cgroup (window->display, window);
-
g_free (window->startup_id);
g_free (window->role);
g_free (window->res_class);
@@ -1467,6 +1465,8 @@ meta_window_unmanage (MetaWindow *window,
meta_verbose ("Unmanaging %s", window->desc);
window->unmanaging = TRUE;
+ meta_display_unregister_cgroup (window->display, window);
+
g_clear_handle_id (&window->unmanage_idle_id, g_source_remove);
g_signal_emit (window, window_signals[UNMANAGING], 0);
--
2.44.0.501.g19981daefd.dirty

View File

@ -0,0 +1,30 @@
From 6cdfc8abe25fccfd06cac99ae82c0f2acbbdb7c2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@redhat.com>
Date: Thu, 17 Oct 2024 11:49:26 +0200
Subject: [PATCH 4/5] window: Don't use cgroup workspace if there already is
one
This fixes a re-entry issue where calling 'meta_window_activate()'
assumed it'd activate on the current workspace.
---
src/core/window.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/core/window.c b/src/core/window.c
index 272d664965..8ad8e5c4c4 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -3812,7 +3812,9 @@ meta_window_activate_full (MetaWindow *window,
if (workspace == NULL)
{
meta_window_read_cgroup (window);
- if (window->cgroup &&
+ if (!window->workspace &&
+ !window->on_all_workspaces &&
+ window->cgroup &&
window->cgroup->last_active_workspace != NULL &&
!window->cgroup->has_startup_sequence &&
(!window->cgroup->app_info ||
--
2.44.0.501.g19981daefd.dirty

View File

@ -0,0 +1,166 @@
From 50d0355bda637a2b214e14c23e767e80066c1084 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@redhat.com>
Date: Fri, 18 Oct 2024 13:23:01 +0200
Subject: [PATCH 5/5] cgroup: Get app info from gnome-shell when possible
Using cgroups alone for getting the app-id is flawed, as there are many
situations where the cgroup isn't set up properly, e.g. opening via
xdg-open or equivalent. gnome-shell already has a system for associating
windows with apps, so reuse this for the cgroup app info.
---
src/core/display-private.h | 2 ++
src/core/display.c | 56 +++++++++++++++++++++++++++++++-------
src/core/window.c | 6 ++++
3 files changed, 54 insertions(+), 10 deletions(-)
diff --git a/src/core/display-private.h b/src/core/display-private.h
index 3c7e0898bf..9836e560b3 100644
--- a/src/core/display-private.h
+++ b/src/core/display-private.h
@@ -304,6 +304,8 @@ gboolean meta_cgroup_unref (MetaCGroup *cgroup);
void meta_cgroup_update_workspace (MetaCGroup *cgroup,
MetaWorkspace *workspace,
guint32 timestamp);
+void meta_cgroup_update_app_info (MetaCGroup *cgroup,
+ MetaWindow *window);
/* A "stack id" is a XID or a stamp */
#define META_STACK_ID_IS_X11(id) ((id) < G_GUINT64_CONSTANT(0x100000000))
diff --git a/src/core/display.c b/src/core/display.c
index e99e787fbe..637bc006d8 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -162,6 +162,7 @@ enum
WORKAREAS_CHANGED,
CLOSING,
INIT_XSERVER,
+ FIND_APP_INFO,
LAST_SIGNAL
};
@@ -515,6 +516,12 @@ meta_display_class_init (MetaDisplayClass *klass)
0, g_signal_accumulator_first_wins,
NULL, NULL,
G_TYPE_BOOLEAN, 1, G_TYPE_TASK);
+ display_signals[FIND_APP_INFO] =
+ g_signal_new ("find-app-info",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_DESKTOP_APP_INFO, 1, META_TYPE_WINDOW);
g_object_class_install_property (object_class,
PROP_COMPOSITOR_MODIFIERS,
@@ -1620,25 +1627,32 @@ extract_app_id_from_cgroup (const char *cgroup)
}
static MetaCGroup*
-meta_cgroup_new (const char *path)
+meta_cgroup_new (const char *path,
+ GAppInfo *app_info)
{
MetaCGroup *cgroup;
- g_autofree char *app_id = NULL;
cgroup = g_new0 (MetaCGroup, 1);
cgroup->path = g_file_new_for_path (path);
g_ref_count_init (&cgroup->ref_count);
- app_id = extract_app_id_from_cgroup (path);
-
- if (app_id)
+ if (!app_info)
{
- g_autoptr (GDesktopAppInfo) app_info = NULL;
+ g_autofree char *app_id = NULL;
- app_info = g_desktop_app_info_new (app_id);
+ app_id = extract_app_id_from_cgroup (path);
+ if (app_id)
+ {
+ GDesktopAppInfo *desktop_app_info;
- if (app_info)
- cgroup->app_info = G_APP_INFO (g_steal_pointer (&app_info));
+ desktop_app_info = g_desktop_app_info_new (app_id);
+ if (desktop_app_info)
+ cgroup->app_info = G_APP_INFO (desktop_app_info);
+ }
+ }
+ else if (app_info)
+ {
+ cgroup->app_info = g_object_ref (app_info);
}
return cgroup;
@@ -1687,12 +1701,30 @@ meta_cgroup_update_workspace (MetaCGroup *cgroup,
(gpointer *) &cgroup->last_active_workspace);
}
+void
+meta_cgroup_update_app_info (MetaCGroup *cgroup,
+ MetaWindow *window)
+{
+ g_autoptr (GDesktopAppInfo) app_info = NULL;
+
+ g_signal_emit (window->display,
+ display_signals[FIND_APP_INFO], 0,
+ window, &app_info);
+
+ if (app_info)
+ {
+ g_clear_object (&cgroup->app_info);
+ cgroup->app_info = G_APP_INFO (g_steal_pointer (&app_info));
+ }
+}
+
void
meta_display_register_cgroup (MetaDisplay *display,
MetaWindow *window,
const char *path)
{
MetaCGroup *cgroup;
+ g_autoptr (GDesktopAppInfo) app_info = NULL;
cgroup = g_hash_table_lookup (display->cgroups, path);
@@ -1702,7 +1734,11 @@ meta_display_register_cgroup (MetaDisplay *display,
return;
}
- cgroup = meta_cgroup_new (path);
+ g_signal_emit (display,
+ display_signals[FIND_APP_INFO], 0,
+ window, &app_info);
+
+ cgroup = meta_cgroup_new (path, app_info ? G_APP_INFO (app_info) : NULL);
g_hash_table_insert (display->cgroups, g_file_get_path (cgroup->path), cgroup);
window->cgroup = cgroup;
}
diff --git a/src/core/window.c b/src/core/window.c
index 8ad8e5c4c4..6de815839f 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -8131,6 +8131,9 @@ meta_window_set_wm_class (MetaWindow *window,
window->res_class = g_strdup (wm_class);
g_object_notify_by_pspec (G_OBJECT (window), obj_props[PROP_WM_CLASS]);
+
+ if (window->cgroup)
+ meta_cgroup_update_app_info (window->cgroup, window);
}
void
@@ -8169,6 +8172,9 @@ meta_window_set_gtk_dbus_properties (MetaWindow *window,
g_object_notify_by_pspec (G_OBJECT (window), obj_props[PROP_GTK_WINDOW_OBJECT_PATH]);
g_object_thaw_notify (G_OBJECT (window));
+
+ if (window->cgroup)
+ meta_cgroup_update_app_info (window->cgroup, window);
}
static gboolean
--
2.44.0.501.g19981daefd.dirty

View File

@ -0,0 +1,264 @@
From 0085197f2b5084109fd9c8f05e3504a73d3da183 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Thu, 13 Oct 2022 11:51:00 +0200
Subject: [PATCH 1/3] Revert "wayland-keyboard: Don't send pressed keys on
enter"
Back in 2014 sending pressed keys to Wayland clients caused issues,
because at least Xwayland didn't handle that gracefully, causing issues
like ghost-pressed keys. A way it was reproduced was quickly alt-tab:ing
to and from a Firefox window, which would cause the File menu bar
incorrectly appearing.
While this was reported to the Xwayland component back then, it was,
probably by mistake, assumed to be an issue in mutter, and mutter
stopped sending pressed key events on enter.
The following year, Xwayland was eventually fixed, but the work around
in mutter has been kept around until it was again noticed as an
inconsistency between compositor implementations.
Lets remove the work around, and follow the spec, again.
This reverts commit c39f18c2d438efe3a866767c9546a6140dd5aaad.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2457
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2657>
---
src/wayland/meta-wayland-keyboard.c | 67 ++++++++++++++++++++---------
src/wayland/meta-wayland-keyboard.h | 2 +
2 files changed, 48 insertions(+), 21 deletions(-)
diff --git a/src/wayland/meta-wayland-keyboard.c b/src/wayland/meta-wayland-keyboard.c
index 460d9e9..526da18 100644
--- a/src/wayland/meta-wayland-keyboard.c
+++ b/src/wayland/meta-wayland-keyboard.c
@@ -516,6 +516,9 @@ meta_wayland_keyboard_enable (MetaWaylandKeyboard *keyboard)
ClutterBackend *clutter_backend = clutter_get_default_backend ();
keyboard->settings = g_settings_new ("org.gnome.desktop.peripherals.keyboard");
+
+ wl_array_init (&keyboard->pressed_keys);
+
g_signal_connect (keyboard->settings, "changed",
G_CALLBACK (settings_changed), keyboard);
@@ -555,15 +558,57 @@ meta_wayland_keyboard_disable (MetaWaylandKeyboard *keyboard)
wl_list_remove (&keyboard->focus_resource_list);
wl_list_init (&keyboard->focus_resource_list);
+ wl_array_release (&keyboard->pressed_keys);
+
g_clear_object (&keyboard->settings);
}
+static void
+update_pressed_keys (struct wl_array *keys,
+ uint32_t evdev_code,
+ gboolean is_press)
+{
+ uint32_t *end = (void *) ((char *) keys->data + keys->size);
+ uint32_t *k;
+
+ if (is_press)
+ {
+ /* Make sure we don't already have this key. */
+ for (k = keys->data; k < end; k++)
+ {
+ if (*k == evdev_code)
+ return;
+ }
+
+ /* Otherwise add the key to the list of pressed keys */
+ k = wl_array_add (keys, sizeof (*k));
+ *k = evdev_code;
+ }
+ else
+ {
+ /* Remove the key from the array */
+ for (k = keys->data; k < end; k++)
+ {
+ if (*k == evdev_code)
+ {
+ *k = *(end - 1);
+ keys->size -= sizeof (*k);
+ return;
+ }
+ }
+
+ g_warning ("unexpected key release event for key 0x%x", evdev_code);
+ }
+}
+
void
meta_wayland_keyboard_update (MetaWaylandKeyboard *keyboard,
const ClutterKeyEvent *event)
{
gboolean is_press = event->type == CLUTTER_KEY_PRESS;
+ update_pressed_keys (&keyboard->pressed_keys, event->evdev_code, is_press);
+
/* If we get a key event but still have pending modifier state
* changes from a previous event that didn't get cleared, we need to
* send that state right away so that the new key event can be
@@ -668,30 +713,10 @@ static void
broadcast_focus (MetaWaylandKeyboard *keyboard,
struct wl_resource *resource)
{
- struct wl_array fake_keys;
-
- /* We never want to send pressed keys to wayland clients on
- * enter. The protocol says that we should send them, presumably so
- * that clients can trigger their own key repeat routine in case
- * they are given focus and a key is physically pressed.
- *
- * Unfortunately this causes some clients, in particular Xwayland,
- * to register key events that they really shouldn't handle,
- * e.g. on an Alt+Tab keybinding, where Alt is released before Tab,
- * clients would see Tab being pressed on enter followed by a key
- * release event for Tab, meaning that Tab would be processed by
- * the client when it really shouldn't.
- *
- * Since the use case for the pressed keys array on enter seems weak
- * to us, we'll just fake that there are no pressed keys instead
- * which should be spec compliant even if it might not be true.
- */
- wl_array_init (&fake_keys);
-
keyboard_send_modifiers (keyboard, resource, keyboard->focus_serial);
wl_keyboard_send_enter (resource, keyboard->focus_serial,
keyboard->focus_surface->resource,
- &fake_keys);
+ &keyboard->pressed_keys);
}
void
diff --git a/src/wayland/meta-wayland-keyboard.h b/src/wayland/meta-wayland-keyboard.h
index ac57d76..2377d83 100644
--- a/src/wayland/meta-wayland-keyboard.h
+++ b/src/wayland/meta-wayland-keyboard.h
@@ -95,6 +95,8 @@ struct _MetaWaylandKeyboard
uint32_t key_up_keycode;
uint32_t key_up_serial;
+ struct wl_array pressed_keys;
+
MetaWaylandXkbInfo xkb_info;
enum xkb_state_component mods_changed;
xkb_mod_mask_t kbd_a11y_latched_mods;
--
2.47.0
From ea401fe0c2993d110301bd8e24bc649260f003bc Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Wed, 7 Jun 2023 12:52:46 +0200
Subject: [PATCH 2/3] wayland: Account for doubly pressed/released keys in
MetaWaylandKeyboard
Given the presence of IMs and the different paths in event handling to reach
one of them, we cannot make guesses about whether should stick to the original
hardware-triggered event, or wait/prefer a second hand IM event that might or
might not arrive. We also have no say for other IM foci unrelated to wayland
(e.g. ClutterText) triggering the double event emission.
So go with it and maintain our own internal state for keys, we already kinda
do, but mainly for warning purposes, at the time of updating the
MetaWaylandKeyboard state.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3044>
---
src/wayland/meta-wayland-keyboard.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/wayland/meta-wayland-keyboard.c b/src/wayland/meta-wayland-keyboard.c
index 526da18..9ee3fb4 100644
--- a/src/wayland/meta-wayland-keyboard.c
+++ b/src/wayland/meta-wayland-keyboard.c
@@ -563,7 +563,7 @@ meta_wayland_keyboard_disable (MetaWaylandKeyboard *keyboard)
g_clear_object (&keyboard->settings);
}
-static void
+static gboolean
update_pressed_keys (struct wl_array *keys,
uint32_t evdev_code,
gboolean is_press)
@@ -577,12 +577,13 @@ update_pressed_keys (struct wl_array *keys,
for (k = keys->data; k < end; k++)
{
if (*k == evdev_code)
- return;
+ return FALSE;
}
/* Otherwise add the key to the list of pressed keys */
k = wl_array_add (keys, sizeof (*k));
*k = evdev_code;
+ return TRUE;
}
else
{
@@ -593,11 +594,11 @@ update_pressed_keys (struct wl_array *keys,
{
*k = *(end - 1);
keys->size -= sizeof (*k);
- return;
+ return TRUE;
}
}
- g_warning ("unexpected key release event for key 0x%x", evdev_code);
+ return FALSE;
}
}
@@ -607,7 +608,8 @@ meta_wayland_keyboard_update (MetaWaylandKeyboard *keyboard,
{
gboolean is_press = event->type == CLUTTER_KEY_PRESS;
- update_pressed_keys (&keyboard->pressed_keys, event->evdev_code, is_press);
+ if (!update_pressed_keys (&keyboard->pressed_keys, event->evdev_code, is_press))
+ return;
/* If we get a key event but still have pending modifier state
* changes from a previous event that didn't get cleared, we need to
--
2.47.0
From 69eb3d3bfa39b53ab0143f01d248b159eaeec241 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Thu, 13 Oct 2022 11:56:06 +0200
Subject: [PATCH 3/3] wayland/seat: Don't double-disable input classes
We'd set the capabilities to 'none', meaning all previously enabled
device classes would be disabled. That means we shouldn't re-disable
them directly after.
This ensures '..disable()' is only called once for every '..enable()'.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2657>
---
src/wayland/meta-wayland-seat.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/src/wayland/meta-wayland-seat.c b/src/wayland/meta-wayland-seat.c
index 27d8fe3..1214b12 100644
--- a/src/wayland/meta-wayland-seat.c
+++ b/src/wayland/meta-wayland-seat.c
@@ -270,11 +270,8 @@ meta_wayland_seat_free (MetaWaylandSeat *seat)
g_signal_handlers_disconnect_by_data (clutter_seat, seat);
meta_wayland_seat_set_capabilities (seat, 0);
- meta_wayland_pointer_disable (seat->pointer);
g_object_unref (seat->pointer);
- meta_wayland_keyboard_disable (seat->keyboard);
g_object_unref (seat->keyboard);
- meta_wayland_touch_disable (seat->touch);
g_object_unref (seat->touch);
meta_wayland_gtk_text_input_destroy (seat->gtk_text_input);
--
2.47.0

View File

@ -10,7 +10,7 @@
Name: mutter
Version: 40.9
Release: 20%{?dist}
Release: 24%{?dist}
Summary: Window and compositing manager based on Clutter
License: GPLv2+
@ -135,6 +135,23 @@ Patch57: 0001-cursor-renderer-native-Don-t-retry-forever-after-GBM.patch
# RHEL-45998 & RHEL-45366
Patch58: sticky-or-on-top-dialog-fixes.patch
# RHEL-62988
Patch59: 0001-wayland-wl-shell-Make-sure-created-window-has-a-prop.patch
Patch60: 0002-window-Avoid-SIGFPE-on-bogus-window-size.patch
# RHEL-62997, RHEL-63000
Patch61: 0001-display-Make-cgroup-constructor-local.patch
Patch62: 0002-display-Also-set-window-cgroup-on-cgroup-creation.patch
Patch63: 0003-window-Unregister-cgroup-on-unmanage.patch
Patch64: 0004-window-Don-t-use-cgroup-workspace-if-there-already-i.patch
Patch65: 0005-cgroup-Get-app-info-from-gnome-shell-when-possible.patch
# RHEL-10895
Patch66: 0001-backend-native-Use-drmModeCloseFB-for-flicker-free-l.patch
# RHEL-21286
Patch67: double-key-event-handling.patch
BuildRequires: chrpath
BuildRequires: pango-devel
BuildRequires: startup-notification-devel
@ -282,13 +299,31 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
%{_datadir}/mutter-%{mutter_api_version}/tests
%changelog
* Mon Aug 05 2024 Jonas Ådahl <jadahl@redhat.com>) - 40.9-20
* Tue Jan 28 2025 Carlos Garnacho <cgarnach@redhat.com> - 40.9-24
- Fix stuck modifier keys
Resolves: RHEL-21286
* Fri Nov 01 2024 Jonas Ådahl <jadahl@redhat.com> - 40.9-23
- Backport fix for flicker-free login
Resolves: RHEL-10895
* Fri Oct 18 2024 Jonas Ådahl <jadahl@redhat.com> - 40.9-22
- Fix crash when moving window while switching workspace
Resolves: RHEL-62997
- Improve app discovery for workspace logic
Resolves: RHEL-63000
* Fri Oct 18 2024 Jonas Ådahl <jadahl@redhat.com> - 40.9-21
- Fix regression causing wl-copy to trigger a crash
Resolves: RHEL-62993
* Mon Aug 05 2024 Jonas Ådahl <jadahl@redhat.com> - 40.9-20
- Fix positioning when using always-on-top windows
Resolves: RHEL-45998
- Improve handling of always-on-visible-workspace windows
Resolves: RHEL-45366
* Mon Aug 05 2024 Jonas Ådahl <jadahl@redhat.com>) - 40.9-19
* Mon Aug 05 2024 Jonas Ådahl <jadahl@redhat.com> - 40.9-19
- Don't retry using cursor plane if it failed
Resolves: RHEL-32622