Update to 45.beta.1

This commit is contained in:
Florian Müllner 2023-08-11 02:41:03 +02:00
parent 3ecd5bc5d1
commit ecf6ea6950
6 changed files with 3 additions and 470 deletions

1
.gitignore vendored
View File

@ -210,3 +210,4 @@ mutter-2.31.5.tar.bz2
/mutter-44.2.tar.xz
/mutter-45.alpha.tar.xz
/mutter-45.beta.tar.xz
/mutter-45.beta.1.tar.xz

View File

@ -1,57 +0,0 @@
From 69ce2cc5cf1f4759afea7fd3429c9f33b6d07919 Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Tue, 8 Aug 2023 16:04:25 +0200
Subject: [PATCH] backends/native: Fix handling order of key event
First create the event with the current xkb modifier mask, then
update the xkb_state and the modifier mask. This is how it happened
before commit 2e8d8397081, and how it should stay.
Fixes: 2e8d8397081 ("backends/native: Port to new event constructors")
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2951
---
src/backends/native/meta-seat-impl.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/backends/native/meta-seat-impl.c b/src/backends/native/meta-seat-impl.c
index 0c26647b43..77eb4faac6 100644
--- a/src/backends/native/meta-seat-impl.c
+++ b/src/backends/native/meta-seat-impl.c
@@ -415,16 +415,6 @@ meta_seat_impl_notify_key_in_impl (MetaSeatImpl *seat_impl,
return;
}
}
-
- keycode = meta_xkb_evdev_to_keycode (key);
-
- /* We must be careful and not pass multiple releases to xkb, otherwise it gets
- confused and locks the modifiers */
- if (state != AUTOREPEAT_VALUE)
- {
- changed_state = xkb_state_update_key (seat_impl->xkb, keycode,
- state ? XKB_KEY_DOWN : XKB_KEY_UP);
- }
else
{
changed_state = 0;
@@ -438,6 +428,16 @@ meta_seat_impl_notify_key_in_impl (MetaSeatImpl *seat_impl,
seat_impl->button_state,
time_us, key, state);
+ keycode = meta_xkb_evdev_to_keycode (key);
+
+ /* We must be careful and not pass multiple releases to xkb, otherwise it gets
+ confused and locks the modifiers */
+ if (state != AUTOREPEAT_VALUE)
+ {
+ changed_state = xkb_state_update_key (seat_impl->xkb, keycode,
+ state ? XKB_KEY_DOWN : XKB_KEY_UP);
+ }
+
if (!meta_input_device_native_process_kbd_a11y_event_in_impl (seat_impl->core_keyboard,
event))
queue_event (seat_impl, event);
--
GitLab

View File

@ -1,346 +0,0 @@
From 1d6d8d45d0991cc72fe386ab9552b08cc039e7fb Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Wed, 9 Aug 2023 00:23:28 +0200
Subject: [PATCH] clutter: Update ClutterActorClass event vmethods to use
ClutterEvent
With the ClutterEvent subtype structs sealed, this remains the only useful
struct type that is now usable on the Javascript side. Make all
ClutterActorClass event vmethods use ClutterEvent, and update all users
to this change.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3163>
---
clutter/clutter/clutter-actor.c | 16 +++---
clutter/clutter/clutter-actor.h | 18 +++----
clutter/clutter/clutter-binding-pool.c | 4 +-
clutter/clutter/clutter-gesture-action.c | 4 +-
clutter/clutter/clutter-text.c | 52 +++++++++----------
src/tests/clutter/conform/binding-pool.c | 8 +--
.../clutter/interactive/test-binding-pool.c | 8 +--
7 files changed, 54 insertions(+), 56 deletions(-)
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
index 017b859e4f..99b42cfe9d 100644
--- a/clutter/clutter/clutter-actor.c
+++ b/clutter/clutter/clutter-actor.c
@@ -6963,7 +6963,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
/**
* ClutterActor::button-press-event:
* @actor: the actor which received the event
- * @event: (type ClutterButtonEvent): a #ClutterButtonEvent
+ * @event: (type ClutterEvent): a button [struct@Event]
*
* The signal is emitted each time a mouse button
* is pressed on @actor.
@@ -6986,7 +6986,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
/**
* ClutterActor::button-release-event:
* @actor: the actor which received the event
- * @event: (type ClutterButtonEvent): a #ClutterButtonEvent
+ * @event: (type ClutterEvent): a button [struct@Event]
*
* The signal is emitted each time a mouse button
* is released on @actor.
@@ -7009,7 +7009,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
/**
* ClutterActor::scroll-event:
* @actor: the actor which received the event
- * @event: (type ClutterScrollEvent): a #ClutterScrollEvent
+ * @event: (type ClutterEvent): a scroll [struct@Event]
*
* The signal is emitted each time the mouse is
* scrolled on @actor
@@ -7032,7 +7032,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
/**
* ClutterActor::key-press-event:
* @actor: the actor which received the event
- * @event: (type ClutterKeyEvent): a #ClutterKeyEvent
+ * @event: (type ClutterEvent): a key [struct@Event]
*
* The signal is emitted each time a keyboard button
* is pressed while @actor has key focus (see clutter_stage_set_key_focus()).
@@ -7055,7 +7055,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
/**
* ClutterActor::key-release-event:
* @actor: the actor which received the event
- * @event: (type ClutterKeyEvent): a #ClutterKeyEvent
+ * @event: (type ClutterEvent): a key [struct@Event]
*
* The signal is emitted each time a keyboard button
* is released while @actor has key focus (see
@@ -7079,7 +7079,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
/**
* ClutterActor::motion-event:
* @actor: the actor which received the event
- * @event: (type ClutterMotionEvent): a #ClutterMotionEvent
+ * @event: (type ClutterEvent): a motion [struct@Event]
*
* The signal is emitted each time the mouse pointer is
* moved over @actor.
@@ -7131,7 +7131,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
/**
* ClutterActor::enter-event:
* @actor: the actor which the pointer has entered.
- * @event: (type ClutterCrossingEvent): a #ClutterCrossingEvent
+ * @event: (type ClutterEvent): a crossing [struct@Event]
*
* The signal is emitted when the pointer enters the @actor
*
@@ -7154,7 +7154,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
/**
* ClutterActor::leave-event:
* @actor: the actor which the pointer has left
- * @event: (type ClutterCrossingEvent): a #ClutterCrossingEvent
+ * @event: (type ClutterEvent): a crossing [struct@Event]
*
* The signal is emitted when the pointer leaves the @actor.
*
diff --git a/clutter/clutter/clutter-actor.h b/clutter/clutter/clutter-actor.h
index 46298c74fb..9c0dc82c54 100644
--- a/clutter/clutter/clutter-actor.h
+++ b/clutter/clutter/clutter-actor.h
@@ -236,21 +236,21 @@ struct _ClutterActorClass
gboolean (* event) (ClutterActor *actor,
ClutterEvent *event);
gboolean (* button_press_event) (ClutterActor *actor,
- ClutterButtonEvent *event);
+ ClutterEvent *event);
gboolean (* button_release_event) (ClutterActor *actor,
- ClutterButtonEvent *event);
+ ClutterEvent *event);
gboolean (* scroll_event) (ClutterActor *actor,
- ClutterScrollEvent *event);
+ ClutterEvent *event);
gboolean (* key_press_event) (ClutterActor *actor,
- ClutterKeyEvent *event);
+ ClutterEvent *event);
gboolean (* key_release_event) (ClutterActor *actor,
- ClutterKeyEvent *event);
+ ClutterEvent *event);
gboolean (* motion_event) (ClutterActor *actor,
- ClutterMotionEvent *event);
+ ClutterEvent *event);
gboolean (* enter_event) (ClutterActor *actor,
- ClutterCrossingEvent *event);
+ ClutterEvent *event);
gboolean (* leave_event) (ClutterActor *actor,
- ClutterCrossingEvent *event);
+ ClutterEvent *event);
gboolean (* captured_event) (ClutterActor *actor,
ClutterEvent *event);
void (* key_focus_in) (ClutterActor *actor);
@@ -270,7 +270,7 @@ struct _ClutterActorClass
ClutterPaintNode *root);
gboolean (* touch_event) (ClutterActor *self,
- ClutterTouchEvent *event);
+ ClutterEvent *event);
gboolean (* has_accessible) (ClutterActor *self);
void (* resource_scale_changed) (ClutterActor *self);
float (* calculate_resource_scale) (ClutterActor *self,
diff --git a/clutter/clutter/clutter-binding-pool.c b/clutter/clutter/clutter-binding-pool.c
index a01b5edde0..2a1e529e86 100644
--- a/clutter/clutter/clutter-binding-pool.c
+++ b/clutter/clutter/clutter-binding-pool.c
@@ -69,8 +69,8 @@
* ```
*
* The actor should then override the [signal@Actor::key-press-event] and
- * use [method@BindingPool.activate] to match a [struct@KeyEvent] structure
- * to one of the actions:
+ * use [method@BindingPool.activate] to match a [struct@Event] key event
+ * structure to one of the actions:
*
* ```c
* ClutterBindingPool *pool;
diff --git a/clutter/clutter/clutter-gesture-action.c b/clutter/clutter/clutter-gesture-action.c
index b562279f5f..35e401a156 100644
--- a/clutter/clutter/clutter-gesture-action.c
+++ b/clutter/clutter/clutter-gesture-action.c
@@ -30,8 +30,8 @@
* Action for gesture gestures
*
* #ClutterGestureAction is a sub-class of [class@Action] that implements
- * the logic for recognizing gesture gestures. It listens for low level events
- * such as [struct@ButtonEvent] and [struct@MotionEvent] on the stage to raise
+ * the logic for recognizing gesture gestures. It listens for low level
+ * [struct@Event] events on the stage to raise
* the [signal@GestureAction::gesture-begin], [signal@GestureAction::gesture-progress],
* and [signal@GestureAction::gesture-end] signals.
*
diff --git a/clutter/clutter/clutter-text.c b/clutter/clutter/clutter-text.c
index 2b6a8716f6..9f0f17c31c 100644
--- a/clutter/clutter/clutter-text.c
+++ b/clutter/clutter/clutter-text.c
@@ -2365,42 +2365,42 @@ clutter_text_release (ClutterActor *actor,
}
static gboolean
-clutter_text_button_press (ClutterActor *actor,
- ClutterButtonEvent *event)
+clutter_text_button_press (ClutterActor *actor,
+ ClutterEvent *event)
{
- return clutter_text_press (actor, (ClutterEvent *) event);
+ return clutter_text_press (actor, event);
}
static gboolean
-clutter_text_motion (ClutterActor *actor,
- ClutterMotionEvent *event)
+clutter_text_motion (ClutterActor *actor,
+ ClutterEvent *event)
{
- return clutter_text_move (actor, (ClutterEvent *) event);
+ return clutter_text_move (actor, event);
}
static gboolean
-clutter_text_button_release (ClutterActor *actor,
- ClutterButtonEvent *event)
+clutter_text_button_release (ClutterActor *actor,
+ ClutterEvent *event)
{
- return clutter_text_release (actor, (ClutterEvent *) event);
+ return clutter_text_release (actor, event);
}
static gboolean
-clutter_text_touch_event (ClutterActor *actor,
- ClutterTouchEvent *event)
+clutter_text_touch_event (ClutterActor *actor,
+ ClutterEvent *event)
{
- switch (clutter_event_type ((ClutterEvent *) event))
+ switch (clutter_event_type (event))
{
case CLUTTER_TOUCH_BEGIN:
- return clutter_text_press (actor, (ClutterEvent *) event);
+ return clutter_text_press (actor, event);
case CLUTTER_TOUCH_END:
case CLUTTER_TOUCH_CANCEL:
/* TODO: the cancel case probably need a special handler */
- return clutter_text_release (actor, (ClutterEvent *) event);
+ return clutter_text_release (actor, event);
case CLUTTER_TOUCH_UPDATE:
- return clutter_text_move (actor, (ClutterEvent *) event);
+ return clutter_text_move (actor, event);
default:
break;
@@ -2424,8 +2424,8 @@ clutter_text_remove_password_hint (gpointer data)
}
static gboolean
-clutter_text_key_press (ClutterActor *actor,
- ClutterKeyEvent *event)
+clutter_text_key_press (ClutterActor *actor,
+ ClutterEvent *event)
{
ClutterText *self = CLUTTER_TEXT (actor);
ClutterTextPrivate *priv = self->priv;
@@ -2445,14 +2445,13 @@ clutter_text_key_press (ClutterActor *actor,
pool = clutter_binding_pool_find (g_type_name (CLUTTER_TYPE_TEXT));
g_assert (pool != NULL);
- flags = clutter_event_get_flags ((ClutterEvent *) event);
- keyval = clutter_event_get_key_symbol ((ClutterEvent *) event);
- modifiers = clutter_event_get_state ((ClutterEvent *) event);
+ flags = clutter_event_get_flags (event);
+ keyval = clutter_event_get_key_symbol (event);
+ modifiers = clutter_event_get_state (event);
if (!(flags & CLUTTER_EVENT_FLAG_INPUT_METHOD) &&
clutter_input_focus_is_focused (priv->input_focus) &&
- clutter_input_focus_filter_event (priv->input_focus,
- (ClutterEvent *) event))
+ clutter_input_focus_filter_event (priv->input_focus, event))
return CLUTTER_EVENT_STOP;
/* we allow passing synthetic events that only contain
@@ -2479,7 +2478,7 @@ clutter_text_key_press (ClutterActor *actor,
gunichar key_unichar;
/* Skip keys when control is pressed */
- key_unichar = clutter_event_get_key_unicode ((ClutterEvent *) event);
+ key_unichar = clutter_event_get_key_unicode (event);
/* return is reported as CR, but we want LF */
if (key_unichar == '\r')
@@ -2514,15 +2513,14 @@ clutter_text_key_press (ClutterActor *actor,
}
static gboolean
-clutter_text_key_release (ClutterActor *actor,
- ClutterKeyEvent *event)
+clutter_text_key_release (ClutterActor *actor,
+ ClutterEvent *event)
{
ClutterText *self = CLUTTER_TEXT (actor);
ClutterTextPrivate *priv = self->priv;
if (clutter_input_focus_is_focused (priv->input_focus) &&
- clutter_input_focus_filter_event (priv->input_focus,
- (ClutterEvent *) event))
+ clutter_input_focus_filter_event (priv->input_focus, event))
return CLUTTER_EVENT_STOP;
return CLUTTER_EVENT_PROPAGATE;
diff --git a/src/tests/clutter/conform/binding-pool.c b/src/tests/clutter/conform/binding-pool.c
index 7b1c04308f..9c355d0c5e 100644
--- a/src/tests/clutter/conform/binding-pool.c
+++ b/src/tests/clutter/conform/binding-pool.c
@@ -110,8 +110,8 @@ key_group_action_activate (KeyGroup *self,
}
static gboolean
-key_group_key_press (ClutterActor *actor,
- ClutterKeyEvent *event)
+key_group_key_press (ClutterActor *actor,
+ ClutterEvent *event)
{
ClutterBindingPool *pool;
gboolean res;
@@ -120,8 +120,8 @@ key_group_key_press (ClutterActor *actor,
g_assert (pool != NULL);
res = clutter_binding_pool_activate (pool,
- clutter_event_get_key_symbol ((ClutterEvent *) event),
- clutter_event_get_state ((ClutterEvent *) event),
+ clutter_event_get_key_symbol (event),
+ clutter_event_get_state (event),
G_OBJECT (actor));
/* if we activate a key binding, redraw the actor */
diff --git a/src/tests/clutter/interactive/test-binding-pool.c b/src/tests/clutter/interactive/test-binding-pool.c
index eec56b86a3..29ca46e126 100644
--- a/src/tests/clutter/interactive/test-binding-pool.c
+++ b/src/tests/clutter/interactive/test-binding-pool.c
@@ -130,8 +130,8 @@ key_group_action_activate (KeyGroup *self,
}
static gboolean
-key_group_key_press (ClutterActor *actor,
- ClutterKeyEvent *event)
+key_group_key_press (ClutterActor *actor,
+ ClutterEvent *event)
{
ClutterBindingPool *pool;
gboolean res;
@@ -140,8 +140,8 @@ key_group_key_press (ClutterActor *actor,
g_assert (pool != NULL);
res = clutter_binding_pool_activate (pool,
- clutter_event_get_key_symbol ((ClutterEvent *) event),
- clutter_event_get_state ((ClutterEvent *) event),
+ clutter_event_get_key_symbol (event),
+ clutter_event_get_state (event),
G_OBJECT (actor));
/* if we activate a key binding, redraw the actor */
--
GitLab

View File

@ -1,51 +0,0 @@
From 44fc67626b6dbaee79c49fd87b20c42405d9decc Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Wed, 9 Aug 2023 16:00:49 +0200
Subject: [PATCH] clutter: Trigger repick on animation-less transform changes
We have a mechanism to trigger repick after animations on
clutter_actor_set_final_state(), but this will not happen if
animations are disabled.
In this case, shell transitions and other typically animatable
changes on the transform of actors will not naturally trigger
a pointer repick when those get instantly changed to the final
state, possibly preserving the cached state and missing the
just popped in actor altogether.
Trigger an instant repick on animation-less transform changes,
so that these situations are also handled correctly, and the
pointer drops the cached state and is able to find the new
actor.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2918
---
clutter/clutter/clutter-actor.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
index 99b42cfe9d..8495e06f79 100644
--- a/clutter/clutter/clutter-actor.c
+++ b/clutter/clutter/clutter-actor.c
@@ -1004,6 +1004,8 @@ static void push_in_paint_unmapped_branch (ClutterActor *self,
static void pop_in_paint_unmapped_branch (ClutterActor *self,
guint count);
+static void clutter_actor_update_pointer (ClutterActor *self);
+
static GQuark quark_actor_layout_info = 0;
static GQuark quark_actor_transform_info = 0;
static GQuark quark_actor_animation_info = 0;
@@ -2447,6 +2449,9 @@ transform_changed (ClutterActor *actor)
absolute_geometry_changed_cb,
NULL,
NULL);
+
+ if (!clutter_actor_has_transitions (actor))
+ clutter_actor_update_pointer (actor);
}
/*< private >
--
GitLab

View File

@ -13,7 +13,7 @@
%global tarball_version %%(echo %{version} | tr '~' '.')
Name: mutter
Version: 45~beta
Version: 45~beta.1
Release: %autorelease
Summary: Window and compositing manager based on Clutter
@ -30,20 +30,6 @@ Patch1: mutter-42.alpha-disable-tegra.patch
# https://pagure.io/fedora-workstation/issue/79
Patch2: 0001-place-Always-center-initial-setup-fedora-welcome.patch
# fix super key no longer triggering overview
# https://gitlab.gnome.org/GNOME/mutter/-/issues/2951
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3162
Patch3: 3162.patch
# Fix mouse clicks sometimes not working
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3168
Patch4: 3168.patch
# Needed to fix broken alt-tab (along with gnome-shell patches)
# https://gitlab.gnome.org/GNOME/mutter/-/issues/2950
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3163
Patch5: 3163.patch
BuildRequires: pkgconfig(gobject-introspection-1.0) >= 1.41.0
BuildRequires: pkgconfig(sm)
BuildRequires: pkgconfig(libwacom)

View File

@ -1 +1 @@
SHA512 (mutter-45.beta.tar.xz) = ad6936492ddcd40f28e906483e7ee03cf3eb1505e5496770e5e564b6d381ee6bf8d90b3333b106e91d08456697ba83cb3370789634d83442f897004891d5712a
SHA512 (mutter-45.beta.1.tar.xz) = 4083952406dc4c6f84da6641ab84072b889fc775cd7ff3146297f3d22ae298b2283ebb683a94b49259c748220f1a00292b460f20f64c2de36896659591c49039