Sync from SUSE:SLFO:Main mutter revision 51ea11ee8e3d6587d3ea9421ece3b7ad
This commit is contained in:
parent
723fa916f1
commit
ecc96d1ac0
144
0001-Revert-clutter-actor-Cache-stage-relative-instead-of.patch
Normal file
144
0001-Revert-clutter-actor-Cache-stage-relative-instead-of.patch
Normal file
@ -0,0 +1,144 @@
|
||||
From d11feddbb29f0bf6de104d8d5c54cf18f3ca96da Mon Sep 17 00:00:00 2001
|
||||
From: Alynx Zhou <alynx.zhou@gmail.com>
|
||||
Date: Thu, 14 Mar 2024 19:20:57 +0800
|
||||
Subject: [PATCH] Revert "clutter/actor: Cache stage-relative instead of
|
||||
absolute modelviews"
|
||||
|
||||
This reverts commit 703bbe0e99dbb688352e0bff396e5cbf2c6af45b.
|
||||
---
|
||||
clutter/clutter/clutter-actor.c | 67 ++++++++++-----------------------
|
||||
1 file changed, 20 insertions(+), 47 deletions(-)
|
||||
|
||||
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
|
||||
index dd0d5ceb6..70dea5ca2 100644
|
||||
--- a/clutter/clutter/clutter-actor.c
|
||||
+++ b/clutter/clutter/clutter-actor.c
|
||||
@@ -612,7 +612,7 @@ struct _ClutterActorPrivate
|
||||
/* the cached transformation matrix; see apply_transform() */
|
||||
graphene_matrix_t transform;
|
||||
|
||||
- graphene_matrix_t stage_relative_modelview;
|
||||
+ graphene_matrix_t absolute_modelview;
|
||||
|
||||
float resource_scale;
|
||||
|
||||
@@ -776,7 +776,7 @@ struct _ClutterActorPrivate
|
||||
guint clear_stage_views_needs_stage_views_changed : 1;
|
||||
guint needs_redraw : 1;
|
||||
guint needs_finish_layout : 1;
|
||||
- guint stage_relative_modelview_valid : 1;
|
||||
+ guint absolute_modelview_valid : 1;
|
||||
};
|
||||
|
||||
enum
|
||||
@@ -2425,7 +2425,7 @@ absolute_geometry_changed (ClutterActor *actor)
|
||||
{
|
||||
actor->priv->needs_update_stage_views = TRUE;
|
||||
actor->priv->needs_visible_paint_volume_update = TRUE;
|
||||
- actor->priv->stage_relative_modelview_valid = FALSE;
|
||||
+ actor->priv->absolute_modelview_valid = FALSE;
|
||||
|
||||
actor->priv->needs_finish_layout = TRUE;
|
||||
/* needs_finish_layout is already TRUE on the whole parent tree thanks
|
||||
@@ -3047,9 +3047,8 @@ _clutter_actor_apply_relative_transformation_matrix (ClutterActor *self,
|
||||
graphene_matrix_t *matrix)
|
||||
{
|
||||
ClutterActorPrivate *priv = self->priv;
|
||||
- ClutterActor *stage = _clutter_actor_get_stage_internal (self);
|
||||
- graphene_matrix_t ancestor_modelview;
|
||||
- graphene_matrix_t inverse_ancestor_modelview;
|
||||
+ graphene_matrix_t parent_modelview;
|
||||
+ graphene_matrix_t inverse_parent_modelview;
|
||||
|
||||
/* Note we terminate before ever calling stage->apply_transform()
|
||||
* since that would conceptually be relative to the underlying
|
||||
@@ -3058,63 +3057,37 @@ _clutter_actor_apply_relative_transformation_matrix (ClutterActor *self,
|
||||
if (self == ancestor)
|
||||
return;
|
||||
|
||||
- if (!priv->stage_relative_modelview_valid)
|
||||
+ if (!priv->absolute_modelview_valid)
|
||||
{
|
||||
- graphene_matrix_init_identity (&priv->stage_relative_modelview);
|
||||
+ graphene_matrix_init_identity (&priv->absolute_modelview);
|
||||
|
||||
if (priv->parent != NULL)
|
||||
{
|
||||
_clutter_actor_apply_relative_transformation_matrix (priv->parent,
|
||||
- stage,
|
||||
- &priv->stage_relative_modelview);
|
||||
+ NULL,
|
||||
+ &priv->absolute_modelview);
|
||||
}
|
||||
|
||||
- _clutter_actor_apply_modelview_transform (self,
|
||||
- &priv->stage_relative_modelview);
|
||||
+ _clutter_actor_apply_modelview_transform (self, &priv->absolute_modelview);
|
||||
|
||||
- priv->stage_relative_modelview_valid = TRUE;
|
||||
+ priv->absolute_modelview_valid = TRUE;
|
||||
}
|
||||
|
||||
if (ancestor == NULL)
|
||||
{
|
||||
- _clutter_actor_apply_modelview_transform (stage, matrix);
|
||||
- graphene_matrix_multiply (&priv->stage_relative_modelview, matrix, matrix);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- if (ancestor == stage)
|
||||
- {
|
||||
- graphene_matrix_multiply (&priv->stage_relative_modelview, matrix, matrix);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- if (ancestor == priv->parent)
|
||||
- {
|
||||
- _clutter_actor_apply_modelview_transform (self, matrix);
|
||||
+ graphene_matrix_multiply (&priv->absolute_modelview, matrix, matrix);
|
||||
return;
|
||||
}
|
||||
|
||||
- graphene_matrix_init_identity (&ancestor_modelview);
|
||||
+ graphene_matrix_init_identity (&parent_modelview);
|
||||
_clutter_actor_apply_relative_transformation_matrix (ancestor,
|
||||
- stage,
|
||||
- &ancestor_modelview);
|
||||
-
|
||||
- if (graphene_matrix_near (&priv->stage_relative_modelview,
|
||||
- &ancestor_modelview,
|
||||
- FLT_EPSILON))
|
||||
- return;
|
||||
-
|
||||
- if (graphene_matrix_is_identity (&ancestor_modelview))
|
||||
- {
|
||||
- graphene_matrix_multiply (&priv->stage_relative_modelview, matrix, matrix);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- if (graphene_matrix_inverse (&ancestor_modelview,
|
||||
- &inverse_ancestor_modelview))
|
||||
+ NULL,
|
||||
+ &parent_modelview);
|
||||
+ if (graphene_matrix_inverse (&parent_modelview,
|
||||
+ &inverse_parent_modelview))
|
||||
{
|
||||
- graphene_matrix_multiply (&inverse_ancestor_modelview, matrix, matrix);
|
||||
- graphene_matrix_multiply (&priv->stage_relative_modelview, matrix, matrix);
|
||||
+ graphene_matrix_multiply (&inverse_parent_modelview, matrix, matrix);
|
||||
+ graphene_matrix_multiply (&priv->absolute_modelview, matrix, matrix);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -7469,7 +7442,7 @@ clutter_actor_init (ClutterActor *self)
|
||||
priv->enable_model_view_transform = TRUE;
|
||||
|
||||
priv->transform_valid = FALSE;
|
||||
- priv->stage_relative_modelview_valid = FALSE;
|
||||
+ priv->absolute_modelview_valid = FALSE;
|
||||
|
||||
/* the default is to stretch the content, to match the
|
||||
* current behaviour of basically all actors. also, it's
|
||||
--
|
||||
2.44.0
|
||||
|
134
0001-Revert-clutter-stage-Avoid-queueing-stage-updates-wh.patch
Normal file
134
0001-Revert-clutter-stage-Avoid-queueing-stage-updates-wh.patch
Normal file
@ -0,0 +1,134 @@
|
||||
From 3f3c8876e0494cf7af92ce9b216da70fd4c0c275 Mon Sep 17 00:00:00 2001
|
||||
From: Xiaoguang Wang <sun.wxg@gmail.com>
|
||||
Date: Tue, 23 Apr 2024 12:28:45 +0800
|
||||
Subject: [PATCH] Revert "clutter/stage: Avoid queueing stage updates when
|
||||
they're already queued"
|
||||
|
||||
This reverts commit 261f516af4e635d4bb263bbbbb2f843f0cbe09de.
|
||||
---
|
||||
clutter/clutter/clutter-stage-private.h | 2 +-
|
||||
clutter/clutter/clutter-stage-view.c | 2 +-
|
||||
clutter/clutter/clutter-stage.c | 30 +++++++++----------------
|
||||
3 files changed, 12 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/clutter/clutter/clutter-stage-private.h b/clutter/clutter/clutter-stage-private.h
|
||||
index c2460b327..f84fb10fe 100644
|
||||
--- a/clutter/clutter/clutter-stage-private.h
|
||||
+++ b/clutter/clutter/clutter-stage-private.h
|
||||
@@ -61,7 +61,7 @@ void clutter_stage_emit_before_paint (ClutterStage
|
||||
void clutter_stage_emit_after_paint (ClutterStage *stage,
|
||||
ClutterStageView *view,
|
||||
ClutterFrame *frame);
|
||||
-void clutter_stage_after_update (ClutterStage *stage,
|
||||
+void clutter_stage_emit_after_update (ClutterStage *stage,
|
||||
ClutterStageView *view,
|
||||
ClutterFrame *frame);
|
||||
|
||||
diff --git a/clutter/clutter/clutter-stage-view.c b/clutter/clutter/clutter-stage-view.c
|
||||
index 168746dd4..b59d1cc00 100644
|
||||
--- a/clutter/clutter/clutter-stage-view.c
|
||||
+++ b/clutter/clutter/clutter-stage-view.c
|
||||
@@ -1279,7 +1279,7 @@ handle_frame_clock_frame (ClutterFrameClock *frame_clock,
|
||||
priv->needs_update_devices = FALSE;
|
||||
|
||||
_clutter_run_repaint_functions (CLUTTER_REPAINT_FLAGS_POST_PAINT);
|
||||
- clutter_stage_after_update (stage, view, frame);
|
||||
+ clutter_stage_emit_after_update (stage, view, frame);
|
||||
|
||||
return clutter_frame_get_result (frame);
|
||||
}
|
||||
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
|
||||
index 47405872b..f1d40426f 100644
|
||||
--- a/clutter/clutter/clutter-stage.c
|
||||
+++ b/clutter/clutter/clutter-stage.c
|
||||
@@ -137,8 +137,6 @@ struct _ClutterStagePrivate
|
||||
|
||||
int update_freeze_count;
|
||||
|
||||
- gboolean update_scheduled;
|
||||
-
|
||||
GHashTable *pointer_devices;
|
||||
GHashTable *touch_sequences;
|
||||
|
||||
@@ -528,15 +526,11 @@ clutter_stage_emit_after_paint (ClutterStage *stage,
|
||||
}
|
||||
|
||||
void
|
||||
-clutter_stage_after_update (ClutterStage *stage,
|
||||
- ClutterStageView *view,
|
||||
- ClutterFrame *frame)
|
||||
+clutter_stage_emit_after_update (ClutterStage *stage,
|
||||
+ ClutterStageView *view,
|
||||
+ ClutterFrame *frame)
|
||||
{
|
||||
- ClutterStagePrivate *priv = stage->priv;
|
||||
-
|
||||
g_signal_emit (stage, stage_signals[AFTER_UPDATE], 0, view, frame);
|
||||
-
|
||||
- priv->update_scheduled = FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -647,15 +641,19 @@ _clutter_stage_queue_event (ClutterStage *stage,
|
||||
gboolean copy_event)
|
||||
{
|
||||
ClutterStagePrivate *priv;
|
||||
+ gboolean first_event;
|
||||
|
||||
g_return_if_fail (CLUTTER_IS_STAGE (stage));
|
||||
|
||||
priv = stage->priv;
|
||||
|
||||
+ first_event = priv->event_queue->length == 0;
|
||||
+
|
||||
g_queue_push_tail (priv->event_queue,
|
||||
copy_event ? clutter_event_copy (event) : event);
|
||||
|
||||
- clutter_stage_schedule_update (stage);
|
||||
+ if (first_event)
|
||||
+ clutter_stage_schedule_update (stage);
|
||||
}
|
||||
|
||||
gboolean
|
||||
@@ -818,7 +816,8 @@ clutter_stage_queue_actor_relayout (ClutterStage *stage,
|
||||
{
|
||||
ClutterStagePrivate *priv = stage->priv;
|
||||
|
||||
- clutter_stage_schedule_update (stage);
|
||||
+ if (priv->pending_relayouts == NULL)
|
||||
+ clutter_stage_schedule_update (stage);
|
||||
|
||||
priv->pending_relayouts = g_slist_prepend (priv->pending_relayouts,
|
||||
g_object_ref (actor));
|
||||
@@ -2532,19 +2531,12 @@ _clutter_stage_get_default_window (void)
|
||||
void
|
||||
clutter_stage_schedule_update (ClutterStage *stage)
|
||||
{
|
||||
- ClutterStagePrivate *priv = stage->priv;
|
||||
ClutterStageWindow *stage_window;
|
||||
- gboolean first_event;
|
||||
GList *l;
|
||||
|
||||
if (CLUTTER_ACTOR_IN_DESTRUCTION (stage))
|
||||
return;
|
||||
|
||||
- first_event = priv->event_queue->length == 0;
|
||||
-
|
||||
- if (priv->update_scheduled && !first_event)
|
||||
- return;
|
||||
-
|
||||
stage_window = _clutter_stage_get_window (stage);
|
||||
if (stage_window == NULL)
|
||||
return;
|
||||
@@ -2555,8 +2547,6 @@ clutter_stage_schedule_update (ClutterStage *stage)
|
||||
|
||||
clutter_stage_view_schedule_update (view);
|
||||
}
|
||||
-
|
||||
- priv->update_scheduled = TRUE;
|
||||
}
|
||||
|
||||
ClutterPaintVolume *
|
||||
--
|
||||
2.44.0
|
||||
|
6
_service
6
_service
@ -3,16 +3,16 @@
|
||||
<service name="obs_scm" mode="manual">
|
||||
<param name="scm">git</param>
|
||||
<param name="url">https://gitlab.gnome.org/GNOME/mutter.git</param>
|
||||
<param name="revision">82bd40dcbcc3601da755678778f033bd9a30286d</param>
|
||||
<param name="revision">refs/tags/45.3</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>
|
||||
<!-- <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>
|
||||
<param name="compression">zst</param>
|
||||
</service>
|
||||
<service name="set_version" mode="manual" />
|
||||
</services>
|
||||
|
@ -1,4 +0,0 @@
|
||||
<servicedata>
|
||||
<service name="tar_scm">
|
||||
<param name="url">https://gitlab.gnome.org/GNOME/mutter.git</param>
|
||||
<param name="changesrevision">82bd40dcbcc3601da755678778f033bd9a30286d</param></service></servicedata>
|
BIN
mutter-44.1+2.obscpio
(Stored with Git LFS)
BIN
mutter-44.1+2.obscpio
(Stored with Git LFS)
Binary file not shown.
BIN
mutter-45.3.obscpio
(Stored with Git LFS)
Normal file
BIN
mutter-45.3.obscpio
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -1,22 +0,0 @@
|
||||
From 1511039a96d158bcf4b731599ae3af3f98b9b166 Mon Sep 17 00:00:00 2001
|
||||
From: Chingkai <qkzhu@suse.com>
|
||||
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(-)
|
||||
|
||||
Index: mutter-44.beta/src/backends/meta-monitor.c
|
||||
===================================================================
|
||||
--- mutter-44.beta.orig/src/backends/meta-monitor.c
|
||||
+++ mutter-44.beta/src/backends/meta-monitor.c
|
||||
@@ -1805,7 +1805,7 @@ meta_monitor_calculate_crtc_pos (MetaMon
|
||||
}
|
||||
|
||||
/* 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;
|
@ -1,201 +0,0 @@
|
||||
Index: mutter-41.0/src/core/display.c
|
||||
===================================================================
|
||||
--- mutter-41.0.orig/src/core/display.c
|
||||
+++ mutter-41.0/src/core/display.c
|
||||
@@ -826,6 +826,8 @@ meta_display_new (MetaContext *context,
|
||||
display->check_fullscreen_later = 0;
|
||||
display->work_area_later = 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
|
||||
terminal has the focus */
|
||||
@@ -1141,6 +1143,50 @@ meta_display_close (MetaDisplay *display
|
||||
the_display = NULL;
|
||||
}
|
||||
|
||||
+/* 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->x11_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->x11_display->xdisplay);
|
||||
+ XFlush (display->x11_display->xdisplay);
|
||||
+ }
|
||||
+
|
||||
+ meta_verbose ("Ungrabbing display, grab count now %d\n",
|
||||
+ display->server_grab_count);
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* meta_display_for_x_display:
|
||||
* @xdisplay: An X display
|
||||
Index: mutter-41.0/src/core/display-private.h
|
||||
===================================================================
|
||||
--- mutter-41.0.orig/src/core/display-private.h
|
||||
+++ mutter-41.0/src/core/display-private.h
|
||||
@@ -140,6 +140,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
|
||||
@@ -258,6 +260,8 @@ struct _MetaDisplayClass
|
||||
|
||||
MetaDisplay * meta_display_new (MetaContext *context,
|
||||
GError **error);
|
||||
+void meta_display_grab (MetaDisplay *display);
|
||||
+void meta_display_ungrab (MetaDisplay *display);
|
||||
|
||||
void meta_display_manage_all_xwindows (MetaDisplay *display);
|
||||
void meta_display_unmanage_windows (MetaDisplay *display,
|
||||
Index: mutter-41.0/src/core/keybindings.c
|
||||
===================================================================
|
||||
--- mutter-41.0.orig/src/core/keybindings.c
|
||||
+++ mutter-41.0/src/core/keybindings.c
|
||||
@@ -1253,6 +1253,9 @@ meta_display_grab_window_buttons (MetaDi
|
||||
{
|
||||
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.
|
||||
@@ -1289,6 +1292,9 @@ meta_display_ungrab_window_buttons (Meta
|
||||
{
|
||||
MetaKeyBindingManager *keys = &display->key_binding_manager;
|
||||
|
||||
+ if (display->server_grab_count > 0)
|
||||
+ return;
|
||||
+
|
||||
if (keys->window_grab_modifiers == 0)
|
||||
return;
|
||||
|
||||
@@ -1319,6 +1325,9 @@ meta_display_grab_focus_window_button (M
|
||||
{
|
||||
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", window->desc);
|
||||
|
||||
@@ -1343,6 +1352,9 @@ meta_display_ungrab_focus_window_button
|
||||
{
|
||||
MetaKeyBindingManager *keys = &display->key_binding_manager;
|
||||
|
||||
+ if (display->server_grab_count > 0)
|
||||
+ return;
|
||||
+
|
||||
meta_verbose ("Ungrabbing unfocused window buttons for %s", window->desc);
|
||||
|
||||
if (!window->have_focus_click_grab)
|
||||
@@ -1588,6 +1600,10 @@ meta_window_grab_keys (MetaWindow *wind
|
||||
|
||||
if (meta_is_wayland_compositor ())
|
||||
return;
|
||||
+
|
||||
+ if (display->server_grab_count > 0)
|
||||
+ return;
|
||||
+
|
||||
if (window->all_keys_grabbed)
|
||||
return;
|
||||
|
||||
@@ -1627,6 +1643,9 @@ meta_window_ungrab_keys (MetaWindow *wi
|
||||
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);
|
||||
Index: mutter-41.0/src/x11/meta-x11-display.c
|
||||
===================================================================
|
||||
--- mutter-41.0.orig/src/x11/meta-x11-display.c
|
||||
+++ mutter-41.0/src/x11/meta-x11-display.c
|
||||
@@ -1916,7 +1916,7 @@ meta_x11_display_set_input_focus_interna
|
||||
* we know which is which by making two requests that the server will
|
||||
* process at the same time.
|
||||
*/
|
||||
- XGrabServer (x11_display->xdisplay);
|
||||
+ meta_display_grab(x11_display->display);
|
||||
|
||||
XSetInputFocus (x11_display->xdisplay,
|
||||
xwindow,
|
||||
@@ -1928,8 +1928,7 @@ meta_x11_display_set_input_focus_interna
|
||||
x11_display->atom__MUTTER_FOCUS_SET,
|
||||
XA_STRING, 8, PropModeAppend, NULL, 0);
|
||||
|
||||
- XUngrabServer (x11_display->xdisplay);
|
||||
- XFlush (x11_display->xdisplay);
|
||||
+ meta_display_ungrab(x11_display->display);
|
||||
|
||||
meta_x11_error_trap_pop (x11_display);
|
||||
}
|
||||
Index: mutter-41.0/src/x11/window-x11.c
|
||||
===================================================================
|
||||
--- mutter-41.0.orig/src/x11/window-x11.c
|
||||
+++ mutter-41.0/src/x11/window-x11.c
|
||||
@@ -522,6 +522,8 @@ meta_window_x11_manage (MetaWindow *wind
|
||||
|
||||
meta_icon_cache_init (&priv->icon_cache);
|
||||
|
||||
+ meta_display_grab (display);
|
||||
+
|
||||
meta_x11_display_register_x_window (display->x11_display,
|
||||
&window->xwindow,
|
||||
window);
|
||||
@@ -582,6 +584,13 @@ meta_window_x11_manage (MetaWindow *wind
|
||||
|
||||
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
|
@ -1,26 +0,0 @@
|
||||
Index: mutter-44.beta/src/x11/session.c
|
||||
===================================================================
|
||||
--- mutter-44.beta.orig/src/x11/session.c
|
||||
+++ mutter-44.beta/src/x11/session.c
|
||||
@@ -150,7 +150,8 @@ process_ice_messages (GIOChannel *chan
|
||||
* being cleaned up, since it is owned by libSM.
|
||||
*/
|
||||
disconnect ();
|
||||
- meta_context_terminate (ice_connection->context);
|
||||
+ if (ice_connection->context != NULL)
|
||||
+ meta_context_terminate (ice_connection->context);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
Index: mutter-44.beta/src/tests/meson.build
|
||||
===================================================================
|
||||
--- mutter-44.beta.orig/src/tests/meson.build
|
||||
+++ mutter-44.beta/src/tests/meson.build
|
||||
@@ -43,6 +43,7 @@ tests_deps = [
|
||||
]
|
||||
|
||||
libmutter_test = shared_library(libmutter_test_name,
|
||||
+ mutter_enum_types,
|
||||
mutter_test_sources,
|
||||
gnu_symbol_visibility: 'hidden',
|
||||
include_directories: tests_includes,
|
@ -1,29 +1,6 @@
|
||||
Index: mutter-44.rc/src/meson.build
|
||||
===================================================================
|
||||
--- mutter-44.rc.orig/src/meson.build
|
||||
+++ mutter-44.rc/src/meson.build
|
||||
@@ -912,6 +912,7 @@ if have_profiler
|
||||
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')
|
||||
@@ -919,6 +920,9 @@ if have_native_backend
|
||||
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
|
||||
|
||||
dbus_interfaces += [
|
||||
Index: mutter-44.rc/src/backends/native/meta-default-modes.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ mutter-44.rc/src/backends/native/meta-default-modes.h
|
||||
diff -druN mutter-45.1.orig/src/backends/native/meta-default-modes-s390x.h mutter-45.1/src/backends/native/meta-default-modes-s390x.h
|
||||
--- mutter-45.1.orig/src/backends/native/meta-default-modes-s390x.h 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ mutter-45.1/src/backends/native/meta-default-modes-s390x.h 2024-01-23 16:35:55.791416596 +0100
|
||||
@@ -0,0 +1,57 @@
|
||||
+/* Generated by gen-default-modes.py */
|
||||
+
|
||||
@ -82,3 +59,28 @@ Index: mutter-44.rc/src/backends/native/meta-default-modes.h
|
||||
+{ 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" },
|
||||
+};
|
||||
diff -druN mutter-45.1.orig/src/meson.build mutter-45.1/src/meson.build
|
||||
--- mutter-45.1.orig/src/meson.build 2023-10-31 19:35:00.000000000 +0100
|
||||
+++ mutter-45.1/src/meson.build 2024-01-23 18:07:33.487280694 +0100
|
||||
@@ -958,6 +958,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')
|
||||
@@ -965,6 +966,13 @@
|
||||
output: 'meta-default-modes.h',
|
||||
command: [gen_default_modes, '@OUTPUT@']
|
||||
)
|
||||
+ else
|
||||
+ default_modes_h = custom_target('meta-default-modes',
|
||||
+ input: 'backends/native/meta-default-modes-s390x.h',
|
||||
+ output: 'meta-default-modes.h',
|
||||
+ command: ['cp', '@INPUT@', '@OUTPUT@']
|
||||
+ )
|
||||
+ endif
|
||||
mutter_built_sources += default_modes_h
|
||||
|
||||
dbus_interfaces += [
|
||||
|
182
mutter-fix-initial-suspended-state.patch
Normal file
182
mutter-fix-initial-suspended-state.patch
Normal file
@ -0,0 +1,182 @@
|
||||
diff --unified --recursive --text --new-file --color mutter-45.3.old/src/core/window.c mutter-45.3.new/src/core/window.c
|
||||
--- mutter-45.3.old/src/core/window.c 2024-01-07 07:34:55.000000000 +0800
|
||||
+++ mutter-45.3.new/src/core/window.c 2024-06-04 16:54:29.485138788 +0800
|
||||
@@ -165,6 +165,8 @@
|
||||
MetaTileMode mode);
|
||||
static void update_edge_constraints (MetaWindow *window);
|
||||
|
||||
+static void set_hidden_suspended_state (MetaWindow *window);
|
||||
+
|
||||
static void initable_iface_init (GInitableIface *initable_iface);
|
||||
|
||||
typedef struct _MetaWindowPrivate
|
||||
@@ -750,9 +752,6 @@
|
||||
static void
|
||||
meta_window_init (MetaWindow *window)
|
||||
{
|
||||
- MetaWindowPrivate *priv = meta_window_get_instance_private (window);
|
||||
-
|
||||
- priv->suspend_state = META_WINDOW_SUSPEND_STATE_SUSPENDED;
|
||||
window->stamp = next_window_stamp++;
|
||||
meta_prefs_add_listener (prefs_changed_callback, window);
|
||||
window->is_alive = TRUE;
|
||||
@@ -1026,6 +1025,7 @@
|
||||
meta_window_constructed (GObject *object)
|
||||
{
|
||||
MetaWindow *window = META_WINDOW (object);
|
||||
+ MetaWindowPrivate *priv = meta_window_get_instance_private (window);
|
||||
MetaDisplay *display = window->display;
|
||||
MetaContext *context = meta_display_get_context (display);
|
||||
MetaBackend *backend = meta_context_get_backend (context);
|
||||
@@ -1381,6 +1381,11 @@
|
||||
!window->initially_iconic)
|
||||
unminimize_window_and_all_transient_parents (window);
|
||||
|
||||
+ /* There is a slim chance we'll hit time out before a extremely slow client
|
||||
+ * managed to become active, but unlikely enough. */
|
||||
+ priv->suspend_state = META_WINDOW_SUSPEND_STATE_HIDDEN;
|
||||
+ set_hidden_suspended_state (window);
|
||||
+
|
||||
window->constructing = FALSE;
|
||||
}
|
||||
|
||||
@@ -1716,9 +1721,9 @@
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
-gboolean
|
||||
-meta_window_should_be_showing_on_workspace (MetaWindow *window,
|
||||
- MetaWorkspace *workspace)
|
||||
+
|
||||
+static gboolean
|
||||
+meta_window_is_showable (MetaWindow *window)
|
||||
{
|
||||
#ifdef HAVE_WAYLAND
|
||||
if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND &&
|
||||
@@ -1730,12 +1735,72 @@
|
||||
window->decorated && !window->frame)
|
||||
return FALSE;
|
||||
|
||||
- /* Windows should be showing if they're located on the
|
||||
- * workspace and they're showing on their own workspace. */
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * meta_window_should_show_on_workspace:
|
||||
+ *
|
||||
+ * Tells whether a window should be showing on the passed workspace, without
|
||||
+ * taking into account whether it can immediately be shown. Whether it can be
|
||||
+ * shown or not depends on what windowing system it was created from.
|
||||
+ *
|
||||
+ * Returns: %TRUE if the window should show.
|
||||
+ */
|
||||
+static gboolean
|
||||
+meta_window_should_show_on_workspace (MetaWindow *window,
|
||||
+ MetaWorkspace *workspace)
|
||||
+{
|
||||
return (meta_window_located_on_workspace (window, workspace) &&
|
||||
meta_window_showing_on_its_workspace (window));
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * meta_window_should_show:
|
||||
+ *
|
||||
+ * Tells whether a window should be showing on the current workspace, without
|
||||
+ * taking into account whether it can immediately be shown. Whether it can be
|
||||
+ * shown or not depends on what windowing system it was created from.
|
||||
+ *
|
||||
+ * Returns: %TRUE if the window should show.
|
||||
+ */
|
||||
+gboolean
|
||||
+meta_window_should_show (MetaWindow *window)
|
||||
+{
|
||||
+ MetaWorkspaceManager *workspace_manager = window->display->workspace_manager;
|
||||
+ MetaWorkspace *active_workspace = workspace_manager->active_workspace;
|
||||
+
|
||||
+ return meta_window_should_show_on_workspace (window, active_workspace);
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * meta_window_should_be_showing_on_workspace:
|
||||
+ *
|
||||
+ * Tells whether a window should be showing on the passed workspace, while
|
||||
+ * taking whether it can be immediately be shown. Whether it can be shown or
|
||||
+ * not depends on what windowing system it was created from.
|
||||
+ *
|
||||
+ * Returns: %TRUE if the window should and can be shown.
|
||||
+ */
|
||||
+gboolean
|
||||
+meta_window_should_be_showing_on_workspace (MetaWindow *window,
|
||||
+ MetaWorkspace *workspace)
|
||||
+{
|
||||
+ if (!meta_window_is_showable (window))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ return meta_window_should_show_on_workspace (window, workspace);
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * meta_window_should_be_showing:
|
||||
+ *
|
||||
+ * Tells whether a window should be showing on the current workspace, while
|
||||
+ * taking whether it can be immediately be shown. Whether it can be shown or
|
||||
+ * not depends on what windowing system it was created from.
|
||||
+ *
|
||||
+ * Returns: %TRUE if the window should and can be shown.
|
||||
+ */
|
||||
gboolean
|
||||
meta_window_should_be_showing (MetaWindow *window)
|
||||
{
|
||||
@@ -2132,6 +2197,19 @@
|
||||
}
|
||||
|
||||
static void
|
||||
+set_hidden_suspended_state (MetaWindow *window)
|
||||
+{
|
||||
+ MetaWindowPrivate *priv = meta_window_get_instance_private (window);
|
||||
+
|
||||
+ priv->suspend_state = META_WINDOW_SUSPEND_STATE_HIDDEN;
|
||||
+ g_return_if_fail (!priv->suspend_timoeut_id);
|
||||
+ priv->suspend_timoeut_id =
|
||||
+ g_timeout_add_seconds (SUSPEND_HIDDEN_TIMEOUT_S,
|
||||
+ enter_suspend_state_cb,
|
||||
+ window);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
update_suspend_state (MetaWindow *window)
|
||||
{
|
||||
MetaWindowPrivate *priv = meta_window_get_instance_private (window);
|
||||
@@ -2148,13 +2226,8 @@
|
||||
}
|
||||
else if (priv->suspend_state == META_WINDOW_SUSPEND_STATE_ACTIVE)
|
||||
{
|
||||
- priv->suspend_state = META_WINDOW_SUSPEND_STATE_HIDDEN;
|
||||
+ set_hidden_suspended_state (window);
|
||||
g_object_notify_by_pspec (G_OBJECT (window), obj_props[PROP_SUSPEND_STATE]);
|
||||
- g_return_if_fail (!priv->suspend_timoeut_id);
|
||||
- priv->suspend_timoeut_id =
|
||||
- g_timeout_add_seconds (SUSPEND_HIDDEN_TIMEOUT_S,
|
||||
- enter_suspend_state_cb,
|
||||
- window);
|
||||
}
|
||||
}
|
||||
|
||||
diff --unified --recursive --text --new-file --color mutter-45.3.old/src/core/window-private.h mutter-45.3.new/src/core/window-private.h
|
||||
--- mutter-45.3.old/src/core/window-private.h 2024-01-07 07:34:55.000000000 +0800
|
||||
+++ mutter-45.3.new/src/core/window-private.h 2024-06-04 16:49:30.834738705 +0800
|
||||
@@ -679,9 +679,12 @@
|
||||
gboolean meta_window_should_be_showing_on_workspace (MetaWindow *window,
|
||||
MetaWorkspace *workspace);
|
||||
|
||||
-/* Return whether the window should be currently mapped */
|
||||
+META_EXPORT_TEST
|
||||
gboolean meta_window_should_be_showing (MetaWindow *window);
|
||||
|
||||
+META_EXPORT_TEST
|
||||
+gboolean meta_window_should_show (MetaWindow *window);
|
||||
+
|
||||
void meta_window_update_struts (MetaWindow *window);
|
||||
|
||||
/* gets position we need to set to stay in current position,
|
207
mutter-fix-text-input-delete-surrounding.patch
Normal file
207
mutter-fix-text-input-delete-surrounding.patch
Normal file
@ -0,0 +1,207 @@
|
||||
From 27bdf0c577a551254551fdaaf7870c5072707c69 Mon Sep 17 00:00:00 2001
|
||||
From: Alynx Zhou <alynx.zhou@gmail.com>
|
||||
Date: Fri, 25 Nov 2022 15:48:01 +0800
|
||||
Subject: [PATCH 1/2] wayland/text-input: Use byte based offset in
|
||||
delete_surrounding_text
|
||||
|
||||
ClutterInputFocus/GtkIMContext uses char based offset for
|
||||
delete_surrounding, however, text_input_v3 uses byte based offset for
|
||||
it. Currently only GTK with mutter can work correctly via text_input_v3
|
||||
because they both forget to convert between char based offset and byte
|
||||
based offset.
|
||||
|
||||
This commit fixes it in mutter by saving committed surrounding text in
|
||||
MetaWaylandTextInput and converting char based offset to byte based
|
||||
offset with the UTF-8 encoded surrounding text.
|
||||
|
||||
Fixes <https://gitlab.gnome.org/GNOME/mutter/-/issues/2146>.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2712>
|
||||
---
|
||||
src/wayland/meta-wayland-text-input.c | 55 +++++++++++++++++++++++----
|
||||
1 file changed, 47 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/wayland/meta-wayland-text-input.c b/src/wayland/meta-wayland-text-input.c
|
||||
index b1ceb1a6bb5..2e694dc1eb8 100644
|
||||
--- a/src/wayland/meta-wayland-text-input.c
|
||||
+++ b/src/wayland/meta-wayland-text-input.c
|
||||
@@ -58,6 +58,20 @@ struct _MetaWaylandTextInput
|
||||
|
||||
GHashTable *resource_serials;
|
||||
|
||||
+ /* This saves the uncommitted middle state of surrounding text from client
|
||||
+ * between `set_surrounding_text` and `commit`, will be cleared after
|
||||
+ * committed.
|
||||
+ */
|
||||
+ struct
|
||||
+ {
|
||||
+ char *text;
|
||||
+ uint32_t cursor;
|
||||
+ uint32_t anchor;
|
||||
+ } pending_surrounding;
|
||||
+
|
||||
+ /* This is the actual committed surrounding text after `commit`, we need this
|
||||
+ * to convert between char based offset and byte based offset.
|
||||
+ */
|
||||
struct
|
||||
{
|
||||
char *text;
|
||||
@@ -216,14 +230,32 @@ meta_wayland_text_input_focus_delete_surrounding (ClutterInputFocus *focus,
|
||||
guint len)
|
||||
{
|
||||
MetaWaylandTextInput *text_input;
|
||||
+ const char *start, *end;
|
||||
+ const char *before, *after;
|
||||
+ const char *cursor;
|
||||
uint32_t before_length;
|
||||
uint32_t after_length;
|
||||
struct wl_resource *resource;
|
||||
|
||||
+ /* offset and len are counted by UTF-8 chars, but text_input_v3's lengths are
|
||||
+ * counted by bytes, so we convert UTF-8 char offsets to pointers here, this
|
||||
+ * needs the surrounding text
|
||||
+ */
|
||||
text_input = META_WAYLAND_TEXT_INPUT_FOCUS (focus)->text_input;
|
||||
- before_length = ABS (MIN (offset, 0));
|
||||
- after_length = MAX (0, offset + len);
|
||||
- g_warn_if_fail (ABS (offset) <= len);
|
||||
+ offset = MIN (offset, 0);
|
||||
+
|
||||
+ start = text_input->surrounding.text;
|
||||
+ end = start + strlen (text_input->surrounding.text);
|
||||
+ cursor = start + text_input->surrounding.cursor;
|
||||
+
|
||||
+ before = g_utf8_offset_to_pointer (cursor, offset);
|
||||
+ g_assert (before >= start);
|
||||
+
|
||||
+ after = g_utf8_offset_to_pointer (cursor, offset + len);
|
||||
+ g_assert (after <= end);
|
||||
+
|
||||
+ before_length = cursor - before;
|
||||
+ after_length = after - cursor;
|
||||
|
||||
wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||
{
|
||||
@@ -468,10 +500,10 @@ text_input_set_surrounding_text (struct wl_client *client,
|
||||
if (!client_matches_focus (text_input, client))
|
||||
return;
|
||||
|
||||
- g_free (text_input->surrounding.text);
|
||||
- text_input->surrounding.text = g_strdup (text);
|
||||
- text_input->surrounding.cursor = cursor;
|
||||
- text_input->surrounding.anchor = anchor;
|
||||
+ g_free (text_input->pending_surrounding.text);
|
||||
+ text_input->pending_surrounding.text = g_strdup (text);
|
||||
+ text_input->pending_surrounding.cursor = cursor;
|
||||
+ text_input->pending_surrounding.anchor = anchor;
|
||||
text_input->pending_state |= META_WAYLAND_PENDING_STATE_SURROUNDING_TEXT;
|
||||
}
|
||||
|
||||
@@ -591,7 +623,7 @@ text_input_set_cursor_rectangle (struct wl_client *client,
|
||||
static void
|
||||
meta_wayland_text_input_reset (MetaWaylandTextInput *text_input)
|
||||
{
|
||||
- g_clear_pointer (&text_input->surrounding.text, g_free);
|
||||
+ g_clear_pointer (&text_input->pending_surrounding.text, g_free);
|
||||
text_input->content_type_hint = ZWP_TEXT_INPUT_V3_CONTENT_HINT_NONE;
|
||||
text_input->content_type_purpose = ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_NORMAL;
|
||||
text_input->text_change_cause = ZWP_TEXT_INPUT_V3_CHANGE_CAUSE_INPUT_METHOD;
|
||||
@@ -651,6 +683,12 @@ text_input_commit_state (struct wl_client *client,
|
||||
|
||||
if (text_input->pending_state & META_WAYLAND_PENDING_STATE_SURROUNDING_TEXT)
|
||||
{
|
||||
+ /* Save the surrounding text for `delete_surrounding_text`. */
|
||||
+ g_free (text_input->surrounding.text);
|
||||
+ text_input->surrounding.text = g_steal_pointer (&text_input->pending_surrounding.text);
|
||||
+ text_input->surrounding.cursor = text_input->pending_surrounding.cursor;
|
||||
+ text_input->surrounding.anchor = text_input->pending_surrounding.anchor;
|
||||
+ /* Pass the surrounding text to Clutter to handle it with input method. */
|
||||
clutter_input_focus_set_surrounding (text_input->input_focus,
|
||||
text_input->surrounding.text,
|
||||
text_input->surrounding.cursor,
|
||||
@@ -720,6 +758,7 @@ meta_wayland_text_input_destroy (MetaWaylandTextInput *text_input)
|
||||
g_object_unref (text_input->input_focus);
|
||||
g_hash_table_destroy (text_input->resource_serials);
|
||||
g_clear_pointer (&text_input->preedit.string, g_free);
|
||||
+ g_clear_pointer (&text_input->pending_surrounding.text, g_free);
|
||||
g_clear_pointer (&text_input->surrounding.text, g_free);
|
||||
g_free (text_input);
|
||||
}
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 33088d59db742cf802977a9d8ec8b4ea3ca79ea0 Mon Sep 17 00:00:00 2001
|
||||
From: Alynx Zhou <alynx.zhou@gmail.com>
|
||||
Date: Mon, 23 Oct 2023 14:32:21 +0800
|
||||
Subject: [PATCH 2/2] wayland/text-input: Pass char based offset to
|
||||
ClutterInputFocus
|
||||
|
||||
Wayland's text-input-v3 uses byte based offset for cursor and anchor of
|
||||
surrounding text, but Clutter needs char based offset here. This commit
|
||||
converts byte based offset to char based offset before passing them to
|
||||
ClutterInputFocus.
|
||||
|
||||
Fixes <https://gitlab.gnome.org/GNOME/mutter/-/issues/3102>.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2712>
|
||||
---
|
||||
src/wayland/meta-wayland-text-input.c | 24 +++++++++++++++++++-----
|
||||
1 file changed, 19 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/wayland/meta-wayland-text-input.c b/src/wayland/meta-wayland-text-input.c
|
||||
index 2e694dc1eb8..c8f50847a88 100644
|
||||
--- a/src/wayland/meta-wayland-text-input.c
|
||||
+++ b/src/wayland/meta-wayland-text-input.c
|
||||
@@ -122,12 +122,18 @@ static void
|
||||
meta_wayland_text_input_focus_request_surrounding (ClutterInputFocus *focus)
|
||||
{
|
||||
MetaWaylandTextInput *text_input;
|
||||
+ long cursor, anchor;
|
||||
|
||||
+ /* Clutter uses char offsets but text-input-v3 uses byte offsets. */
|
||||
text_input = META_WAYLAND_TEXT_INPUT_FOCUS (focus)->text_input;
|
||||
+ cursor = g_utf8_strlen (text_input->surrounding.text,
|
||||
+ text_input->surrounding.cursor);
|
||||
+ anchor = g_utf8_strlen (text_input->surrounding.text,
|
||||
+ text_input->surrounding.anchor);
|
||||
clutter_input_focus_set_surrounding (focus,
|
||||
- text_input->surrounding.text,
|
||||
- text_input->surrounding.cursor,
|
||||
- text_input->surrounding.anchor);
|
||||
+ text_input->surrounding.text,
|
||||
+ cursor,
|
||||
+ anchor);
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
@@ -683,16 +689,24 @@ text_input_commit_state (struct wl_client *client,
|
||||
|
||||
if (text_input->pending_state & META_WAYLAND_PENDING_STATE_SURROUNDING_TEXT)
|
||||
{
|
||||
+ long cursor, anchor;
|
||||
+
|
||||
/* Save the surrounding text for `delete_surrounding_text`. */
|
||||
g_free (text_input->surrounding.text);
|
||||
text_input->surrounding.text = g_steal_pointer (&text_input->pending_surrounding.text);
|
||||
text_input->surrounding.cursor = text_input->pending_surrounding.cursor;
|
||||
text_input->surrounding.anchor = text_input->pending_surrounding.anchor;
|
||||
+
|
||||
/* Pass the surrounding text to Clutter to handle it with input method. */
|
||||
+ /* Clutter uses char offsets but text-input-v3 uses byte offsets. */
|
||||
+ cursor = g_utf8_strlen (text_input->surrounding.text,
|
||||
+ text_input->surrounding.cursor);
|
||||
+ anchor = g_utf8_strlen (text_input->surrounding.text,
|
||||
+ text_input->surrounding.anchor);
|
||||
clutter_input_focus_set_surrounding (text_input->input_focus,
|
||||
text_input->surrounding.text,
|
||||
- text_input->surrounding.cursor,
|
||||
- text_input->surrounding.anchor);
|
||||
+ cursor,
|
||||
+ anchor);
|
||||
}
|
||||
|
||||
if (text_input->pending_state & META_WAYLAND_PENDING_STATE_INPUT_RECT)
|
||||
--
|
||||
GitLab
|
||||
|
251
mutter-fix-x11-restart.patch
Normal file
251
mutter-fix-x11-restart.patch
Normal file
@ -0,0 +1,251 @@
|
||||
From b7a1159a1ecd08b5e6aa1279fea84accf846b411 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Fri, 20 Oct 2023 15:44:29 +0800
|
||||
Subject: [PATCH 1/4] x11-display: Make subwindow redirection call mode
|
||||
specific
|
||||
|
||||
This means that for X11 sessions we'll do it before any windows are
|
||||
mapped, and before any plugin implementation is started. Doing it before
|
||||
a plugin is started is important, because things that the plugin does
|
||||
during startup can have consequences on how compositing on Xorg works.
|
||||
|
||||
For the Xwayland case, we'll do it relatively in the setup phase. It
|
||||
appears to have been harmless to do it later in the post-opened signal,
|
||||
but there is no harm in doing it as one of the earlier steps.
|
||||
|
||||
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3089
|
||||
---
|
||||
src/compositor/meta-compositor-x11.c | 2 ++
|
||||
src/wayland/meta-xwayland.c | 1 +
|
||||
src/x11/meta-x11-display.c | 1 -
|
||||
3 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/compositor/meta-compositor-x11.c b/src/compositor/meta-compositor-x11.c
|
||||
index 1ad3327ddf6..ce7bc1945ce 100644
|
||||
--- a/src/compositor/meta-compositor-x11.c
|
||||
+++ b/src/compositor/meta-compositor-x11.c
|
||||
@@ -188,6 +188,8 @@ meta_compositor_x11_manage (MetaCompositor *compositor,
|
||||
|
||||
compositor_x11->have_x11_sync_object = meta_sync_ring_init (xdisplay);
|
||||
|
||||
+ meta_x11_display_redirect_windows (x11_display, display);
|
||||
+
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c
|
||||
index e95ca564010..83f2fcb25d9 100644
|
||||
--- a/src/wayland/meta-xwayland.c
|
||||
+++ b/src/wayland/meta-xwayland.c
|
||||
@@ -1170,6 +1170,7 @@ on_x11_display_setup (MetaDisplay *display,
|
||||
{
|
||||
MetaX11Display *x11_display = meta_display_get_x11_display (display);
|
||||
|
||||
+ meta_x11_display_redirect_windows (x11_display, display);
|
||||
meta_xwayland_init_dnd (x11_display);
|
||||
meta_xwayland_init_xrandr (manager, x11_display);
|
||||
}
|
||||
diff --git a/src/x11/meta-x11-display.c b/src/x11/meta-x11-display.c
|
||||
index 4e98203dd25..c634a71fb2a 100644
|
||||
--- a/src/x11/meta-x11-display.c
|
||||
+++ b/src/x11/meta-x11-display.c
|
||||
@@ -301,7 +301,6 @@ on_x11_display_opened (MetaX11Display *x11_display,
|
||||
MetaDisplay *display)
|
||||
{
|
||||
meta_display_manage_all_xwindows (display);
|
||||
- meta_x11_display_redirect_windows (x11_display, display);
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 77fc07943c3171a5e7a047ca34af46feeca347c2 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Fri, 20 Oct 2023 17:03:31 +0800
|
||||
Subject: [PATCH 2/4] display: Move X11 initial focus handling to
|
||||
MetaX11Display
|
||||
|
||||
It's X11 specific, so put it in the X11 display manager object.
|
||||
---
|
||||
src/core/display.c | 34 ----------------------------------
|
||||
src/x11/meta-x11-display.c | 25 +++++++++++++++++++++++++
|
||||
2 files changed, 25 insertions(+), 34 deletions(-)
|
||||
|
||||
diff --git a/src/core/display.c b/src/core/display.c
|
||||
index 0a191c0fbca..b16e50e21de 100644
|
||||
--- a/src/core/display.c
|
||||
+++ b/src/core/display.c
|
||||
@@ -930,9 +930,6 @@ meta_display_new (MetaContext *context,
|
||||
MetaDisplay *display;
|
||||
MetaDisplayPrivate *priv;
|
||||
guint32 timestamp;
|
||||
-#ifdef HAVE_X11_CLIENT
|
||||
- Window old_active_xwindow = None;
|
||||
-#endif
|
||||
MetaMonitorManager *monitor_manager;
|
||||
MetaSettings *settings;
|
||||
MetaInputCapture *input_capture;
|
||||
@@ -1048,14 +1045,6 @@ meta_display_new (MetaContext *context,
|
||||
display->last_focus_time = timestamp;
|
||||
display->last_user_time = timestamp;
|
||||
|
||||
-#ifdef HAVE_X11
|
||||
- if (!meta_is_wayland_compositor ())
|
||||
- meta_prop_get_window (display->x11_display,
|
||||
- display->x11_display->xroot,
|
||||
- display->x11_display->atom__NET_ACTIVE_WINDOW,
|
||||
- &old_active_xwindow);
|
||||
-#endif
|
||||
-
|
||||
if (!meta_compositor_manage (display->compositor, error))
|
||||
{
|
||||
g_object_unref (display);
|
||||
@@ -1076,30 +1065,7 @@ meta_display_new (MetaContext *context,
|
||||
g_signal_connect (display->gesture_tracker, "state-changed",
|
||||
G_CALLBACK (gesture_tracker_state_changed), display);
|
||||
|
||||
- /* We know that if mutter is running as a Wayland compositor,
|
||||
- * we start out with no windows.
|
||||
- */
|
||||
-#ifdef HAVE_X11_CLIENT
|
||||
- if (!meta_is_wayland_compositor ())
|
||||
- meta_display_manage_all_xwindows (display);
|
||||
-
|
||||
- if (old_active_xwindow != None)
|
||||
- {
|
||||
- MetaWindow *old_active_window;
|
||||
- old_active_window = meta_x11_display_lookup_x_window (display->x11_display,
|
||||
- old_active_xwindow);
|
||||
- if (old_active_window)
|
||||
- meta_window_focus (old_active_window, timestamp);
|
||||
- else
|
||||
- meta_display_unset_input_focus (display, timestamp);
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- meta_display_unset_input_focus (display, timestamp);
|
||||
- }
|
||||
-#else
|
||||
meta_display_unset_input_focus (display, timestamp);
|
||||
-#endif
|
||||
|
||||
g_signal_connect (stage, "notify::is-grabbed",
|
||||
G_CALLBACK (on_is_grabbed_changed), display);
|
||||
diff --git a/src/x11/meta-x11-display.c b/src/x11/meta-x11-display.c
|
||||
index c634a71fb2a..599968a363b 100644
|
||||
--- a/src/x11/meta-x11-display.c
|
||||
+++ b/src/x11/meta-x11-display.c
|
||||
@@ -300,7 +300,32 @@ static void
|
||||
on_x11_display_opened (MetaX11Display *x11_display,
|
||||
MetaDisplay *display)
|
||||
{
|
||||
+ Window old_active_xwindow = None;
|
||||
+
|
||||
+ if (!meta_is_wayland_compositor ())
|
||||
+ {
|
||||
+ meta_prop_get_window (display->x11_display,
|
||||
+ display->x11_display->xroot,
|
||||
+ display->x11_display->atom__NET_ACTIVE_WINDOW,
|
||||
+ &old_active_xwindow);
|
||||
+ }
|
||||
+
|
||||
meta_display_manage_all_xwindows (display);
|
||||
+
|
||||
+ if (old_active_xwindow != None)
|
||||
+ {
|
||||
+ MetaWindow *old_active_window;
|
||||
+
|
||||
+ old_active_window = meta_x11_display_lookup_x_window (x11_display,
|
||||
+ old_active_xwindow);
|
||||
+ if (old_active_window)
|
||||
+ {
|
||||
+ uint32_t timestamp;
|
||||
+
|
||||
+ timestamp = display->x11_display->timestamp;
|
||||
+ meta_window_focus (old_active_window, timestamp);
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 668eb0d198dba58c7833b09926dce2f043889155 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Tue, 17 Oct 2023 15:46:00 +0800
|
||||
Subject: [PATCH 3/4] tests/x11: Fix replace test to catch the second instance
|
||||
failing
|
||||
|
||||
The test never noticed that the second instance never actually managed
|
||||
to load; it was looping a multi second retry session trying to redirect
|
||||
windows, meaning it failed to catch https://gitlab.gnome.org/GNOME/mutter/-/issues/3089.
|
||||
|
||||
Fix the test so that it always waits for mutter to finish loading
|
||||
successfully, just like it waits fro the first.
|
||||
---
|
||||
src/tests/x11-test.sh | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/tests/x11-test.sh b/src/tests/x11-test.sh
|
||||
index 59e460fc336..d95b2460f6e 100755
|
||||
--- a/src/tests/x11-test.sh
|
||||
+++ b/src/tests/x11-test.sh
|
||||
@@ -34,6 +34,9 @@ echo \# Launched with pid $MUTTER2_PID
|
||||
MUTTER2_PID=$!
|
||||
wait $MUTTER1_PID
|
||||
|
||||
+echo \# Waiting for the second mutter to finish loading
|
||||
+gdbus wait --session org.gnome.Mutter.IdleMonitor
|
||||
+
|
||||
sleep 2
|
||||
|
||||
echo \# Terminating clients > /dev/stderr
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 8e6f18fcaf63968b0a75bf65da0c00473d71acb3 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Mon, 23 Oct 2023 14:47:33 +0800
|
||||
Subject: [PATCH 4/4] display: Rename mandatory X11 initialization function
|
||||
|
||||
Simply to make it clear that the renamed function is specific to a
|
||||
particular X11 initialization mode (mandatory Xwayland), put that in the
|
||||
name, so that it's easier to understand when this function is relevant.
|
||||
---
|
||||
src/core/display.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/core/display.c b/src/core/display.c
|
||||
index b16e50e21de..f851f1be372 100644
|
||||
--- a/src/core/display.c
|
||||
+++ b/src/core/display.c
|
||||
@@ -897,9 +897,9 @@ meta_display_init_x11 (MetaDisplay *display,
|
||||
}
|
||||
|
||||
static void
|
||||
-on_x11_initialized (MetaDisplay *display,
|
||||
- GAsyncResult *result,
|
||||
- gpointer user_data)
|
||||
+on_mandatory_x11_initialized (MetaDisplay *display,
|
||||
+ GAsyncResult *result,
|
||||
+ gpointer user_data)
|
||||
{
|
||||
g_autoptr (GError) error = NULL;
|
||||
|
||||
@@ -1018,7 +1018,7 @@ meta_display_new (MetaContext *context,
|
||||
if (x11_display_policy == META_X11_DISPLAY_POLICY_MANDATORY)
|
||||
{
|
||||
meta_display_init_x11 (display, NULL,
|
||||
- (GAsyncReadyCallback) on_x11_initialized,
|
||||
+ (GAsyncReadyCallback) on_mandatory_x11_initialized,
|
||||
NULL);
|
||||
}
|
||||
#endif /* HAVE_XWAYLAND */
|
||||
--
|
||||
GitLab
|
||||
|
1095
mutter-implement-text-input-v1.patch
Normal file
1095
mutter-implement-text-input-v1.patch
Normal file
File diff suppressed because it is too large
Load Diff
397
mutter.changes
397
mutter.changes
@ -1,3 +1,400 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Jun 4 08:57:08 UTC 2024 - Alynx Zhou <alynx.zhou@suse.com>
|
||||
|
||||
- Add mutter-fix-initial-suspended-state.patch: With Qt 6.7 some
|
||||
apps cannot shown on launch, this patch fixes the initial
|
||||
suspended state to make those windows visible
|
||||
(glgo#GNOME/mutter!3475, bsc#1223393).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue May 21 08:26:15 UTC 2024 - Alynx Zhou <alynx.zhou@suse.com>
|
||||
|
||||
- Add mutter-implement-text-input-v1.patch: This allows input
|
||||
method to work in Chromium/Electron-based apps with Wayland Ozone
|
||||
platform, which only has text-input-v1 support
|
||||
(glgo#GNOME/mutter!3751, bsc#1219505).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Apr 28 01:22:43 UTC 2024 - Xiaoguang Wang <xiaoguang.wang@suse.com>
|
||||
|
||||
- Add 0001-Revert-clutter-stage-Avoid-queueing-stage-updates-wh.patch:
|
||||
Reverting commit 261f516a to fix black screen on Xorg when logging
|
||||
in or logging out (glgo#GNOME/mutter#3452 bsc#1222612).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Mar 15 07:09:11 UTC 2024 - Alynx Zhou <alynx.zhou@suse.com>
|
||||
|
||||
- Add 0001-Revert-clutter-actor-Cache-stage-relative-instead-of.patch:
|
||||
This leads into partial update while switching VT (from TTY to
|
||||
GNOME) on X11 session with fbdev driver used (
|
||||
glgo#GNOME/mutter#3302, bsc#1219546).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Feb 1 09:28:37 UTC 2024 - Alynx Zhou <alynx.zhou@suse.com>
|
||||
|
||||
- Drop mutter-SLE-bsc984738-grab-display.patch: It blocks non-CSD
|
||||
apps with GNOME 45, and the latest LTS Oracle Installer works
|
||||
fine without it, the original bug is not a problem (bsc#1218935).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Jan 24 13:54:15 UTC 2024 - Eugenio Paolantonio <eugenio.paolantonio@suse.com>
|
||||
|
||||
- mutter-SLE-bsc984738-grab-display.patch:
|
||||
* Temporary disable this SLE-only patch as it makes mutter
|
||||
45 lock-up on non-CSD apps (bsc#1218935)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Jan 23 17:35:28 UTC 2024 - Eugenio Paolantonio <eugenio.paolantonio@suse.com>
|
||||
|
||||
- Rebase mutter-disable-cvt-s390x.patch for mutter 45.x.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Jan 10 08:53:06 UTC 2024 - Dominique Leuenberger <dimstar@opensuse.org>
|
||||
|
||||
- Update to version 45.3:
|
||||
+ Fix handling of relative mode for tablets.
|
||||
+ Fix forcing EGLStream with NVIDIA proprietary driver.
|
||||
+ Sync geometry only when window is mapped.
|
||||
+ Improve repick due to transform changes.
|
||||
+ wayland/client: Add make_desktop() method.
|
||||
+ Fix occasional artifacts at top of X11 fullscreen windows.
|
||||
+ background: Fix background color around image.
|
||||
+ Fixed crashes.
|
||||
+ Plugged leaks.
|
||||
+ Misc. bug fixes and cleanups.
|
||||
+ Updated translations.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Dec 21 08:23:54 UTC 2023 - Alynx Zhou <alynx.zhou@suse.com>
|
||||
|
||||
- Add mutter-fix-text-input-delete-surrounding.patch: text-input-v3
|
||||
requrires byte based offset but Clutter uses char based offset
|
||||
for delete_surrounding_text, fix it by converting before passing
|
||||
arguments (glgo#GNOME/mutter#2146, glgo#GNOME/mutter!2712).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Dec 18 06:47:32 UTC 2023 - Alynx Zhou <alynx.zhou@suse.com>
|
||||
|
||||
- Add mutter-fix-x11-restart.patch: glgo#GNOME/mutter!2445 breaks
|
||||
restarting under x11 accidentally because it redirects subwindows
|
||||
after redirecting windows, this patch fix it by redirecting
|
||||
subwindows first (glgo#GNOME/gnome-shell#7050,
|
||||
glgo#GNOME/mutter!3329).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Dec 7 15:09:40 UTC 2023 - Dominique Leuenberger <dimstar@opensuse.org>
|
||||
|
||||
- Update to version 45.2:
|
||||
+ Disable HW cursor when inhibited by backend.
|
||||
+ Fix disabling check-alive timeout.
|
||||
+ Propagate focus appearance to all ancestors.
|
||||
+ Fix tablets on X11 having the wrong device.
|
||||
+ Fixed crash.
|
||||
+ Updated translations.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Dec 3 15:54:07 UTC 2023 - Yifan Jiang <yfjiang@suse.com>
|
||||
|
||||
- Rebase mutter-SLE-bsc984738-grab-display.patch.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Nov 28 11:57:17 UTC 2023 - Dominique Leuenberger <dimstar@opensuse.org>
|
||||
|
||||
- Use %patch -p N instead of deprecated %patchN.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Nov 1 09:38:49 UTC 2023 - Bjørn Lie <bjorn.lie@gmail.com>
|
||||
|
||||
- Update to version 45.1:
|
||||
+ Fix filtering keybinding events in presence of grabs
|
||||
+ Fix direct scanout support when using integer scaling
|
||||
+ Fix capitalization of some keys when caps lock is on
|
||||
+ Fix vsync regression
|
||||
+ Fix visibility of software cursors when using direct scanout
|
||||
+ Fix artifacts at the bottom of some surfaces
|
||||
+ Discard monitor configs with fractional scale when unusable
|
||||
+ Apply track point settings
|
||||
+ xwayland: Enable XDG portal only when not nested
|
||||
+ Inhibit real-time scheduling when mode setting
|
||||
+ Don't delay frame updates after idle period
|
||||
+ Fix running Xwayland in headless setup with nvidia driver
|
||||
+ wayland: Send keyboard modifiers after the enter event
|
||||
+ Fixed crashes
|
||||
+ Misc. bug fixes and cleanups
|
||||
+ Updated translations.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Oct 26 18:23:21 UTC 2023 - bjorn.lie@gmail.com
|
||||
|
||||
- Update to version 45.0+61:
|
||||
+ backend:
|
||||
- Introduce helpers for turning from/to clutter/evdev buttons
|
||||
- Use helper to translate from/to clutter/evdev button codes
|
||||
+ clutter/frame-clock:
|
||||
- Simplify next_presentation_time_us calculation
|
||||
- Start next update ASAP after idle period
|
||||
+ cogl/onscreen: Add missing error untrap calls
|
||||
+ input-capture:
|
||||
- Check barriers don't extend into nonexisting monitors
|
||||
- Fix off-by-one for barrier validation
|
||||
+ renderer/native:
|
||||
- Add a new has_addfb2 property
|
||||
- Send modifiers even without AddFb2
|
||||
+ screen-cast/stream-src:
|
||||
- Assert that dmabuf handle lookup succeeds
|
||||
- Calculate stride after adding handle to hash table
|
||||
+ tests/clutter/event-delivery: Avoid race with stage update
|
||||
+ tests/clutter/frame-clock*: Use
|
||||
clutter_frame_get_target_presentation_time
|
||||
+ wayland/dma-buf: Advertise INVALID modifier without AddFb2
|
||||
+ wayland: Send keyboard modifiers after the enter event
|
||||
+ input-capture: Add more barrier tests, mostly for invalid
|
||||
barriers
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Oct 13 09:27:31 UTC 2023 - bjorn.lie@gmail.com
|
||||
|
||||
- Update to version 45.0+45:
|
||||
+ kms/impl-device/atomic:
|
||||
- Fix blob size
|
||||
- Fix stack overflow
|
||||
+ kms/impl-device: Inhibit real-time scheduling when mode setting
|
||||
+ monitor-manager/native: Update assignments on empty-config too
|
||||
+ renderer/native:
|
||||
- Clear old pending mode sets when unsetting all modes
|
||||
- Fold mode unsetting into renamed unset_modes()
|
||||
+ tests/dbusmock-templates/rtkit: Add MakeThreadHighPriority
|
||||
+ tests/kms/render: Add test for setting empty config
|
||||
+ thread:
|
||||
- Allow turning off rt scheduling for running thread
|
||||
- For consistency, s/real_time/realtime/
|
||||
+ Updated translations.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 9 20:50:24 UTC 2023 - Bjørn Lie <bjorn.lie@gmail.com>
|
||||
|
||||
- Drop mutter-crash-meta_context_terminate.patch: Closed upstream
|
||||
via https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2609
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sat Sep 16 22:09:37 UTC 2023 - Bjørn Lie <bjorn.lie@gmail.com>
|
||||
|
||||
- Update to version 45.0:
|
||||
+ Fix focus-follows-mouse mode
|
||||
+ Optimize applying relative transformation matrix
|
||||
+ Add support for P010 YCbCr format
|
||||
+ Fix hardware cursor stuttering on Raspberry Pi
|
||||
+ Fix input in multi-monitor remote desktop sessions with libei
|
||||
+ Fixed crashes
|
||||
+ Misc. bug fixes and cleanups
|
||||
+ Updated translations.
|
||||
- Drop mutter-trap-dpms-errors.patch: Fixed upstream.
|
||||
- Change compression of tarball in service and spec to zst from xz.
|
||||
- Add pkgconfig(libdisplay-info) BuildRequires and pass
|
||||
libdisplay_info=true to meson setup: New optional dependency,
|
||||
build libdisplay-info support.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Sep 14 02:51:54 UTC 2023 - Alynx Zhou <alynx.zhou@suse.com>
|
||||
|
||||
- Add mutter-trap-dpms-errors.patch: Apparently DPMSForceLevel()
|
||||
can fail if DPMS is not enabled, so trap errors of DPMS because
|
||||
they are not critical and should not block user session.
|
||||
(bsc#1215273, glgo#GNOME/mutter!3160)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Sep 7 22:56:54 UTC 2023 - Luciano Santos <luc14n0@opensuse.org>
|
||||
|
||||
- Replace sysprof-4 with sysprof-6 pkgconfig() BuildRequires to
|
||||
follow up the upstream change. And build without the profiler
|
||||
feature (using bcond_with profiler), as it's not meant for
|
||||
general use.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Sep 6 19:09:15 UTC 2023 - Bjørn Lie <bjorn.lie@gmail.com>
|
||||
|
||||
- Update to version 45.rc:
|
||||
+ Fix possible redraw freeze in fullscreen windows
|
||||
+ Fix restoring focus when leaving the overview
|
||||
+ Support alpha-composited window screencasts
|
||||
+ Fix some XWayland windows not getting mapped
|
||||
+ Fix cursor movement on rotated screens
|
||||
+ Avoid global lock in stage signals
|
||||
+ Implemented suspended xdg_toplevel state
|
||||
+ Support idle_inhibit protocol
|
||||
+ Do not trigger repick during relayout
|
||||
+ Fix redraw issue when buffer age is unavailable
|
||||
+ Add Meta Toolkit (MTK) library
|
||||
+ Fix possible window freeze during resize operations
|
||||
+ Fixes to tablet cursor visibility on Wayland
|
||||
+ Improve support for input capture and emulated input
|
||||
+ Use headless mode when seat ID is unset
|
||||
+ Fix unresponsive touchscreen after titlebar drag
|
||||
+ Fix absolute pointer events on virtual monitor streams
|
||||
+ Fix disabling CRTCs in disable-only mode updates
|
||||
+ Cache multi-texture shader snippets
|
||||
+ Fixed crashes
|
||||
+ Plugged leaks
|
||||
+ Misc. bug fixes and cleanups
|
||||
+ Updated translations.
|
||||
- Drop mutter-fix-clipped-redraw.patch: Fixed upstream.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Sep 4 17:43:47 UTC 2023 - Bjørn Lie <bjorn.lie@gmail.com>
|
||||
|
||||
- Update to version 45.beta.1:
|
||||
+ Fix blitting from premultiplied to opaque formats
|
||||
+ Fix Super key not going to overview in GNOME Shell
|
||||
+ Use ClutterEvent in ClutterActor class event vmethod signatures
|
||||
+ Misc. bug fixes and cleanups
|
||||
+ Updated translations.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Sep 4 16:43:28 UTC 2023 - Bjørn Lie <bjorn.lie@gmail.com>
|
||||
|
||||
- Update to version 45.beta:
|
||||
+ Support input capture and emulated input with libei
|
||||
+ Add KMS thread
|
||||
+ Fix touch move operations on subsurfaces
|
||||
+ Fix unexpected cursor changes over non-resizable windows
|
||||
+ Improve render time estimates
|
||||
+ Fix flickering when DRI driver isn't available
|
||||
+ Fix restoring maximized state of SSD windows
|
||||
+ Add support for YUV formats
|
||||
+ Fix xwayland-allow-byte-swapped-clients setting
|
||||
+ Misc. bug fixes and cleanups
|
||||
+ Updated translations.
|
||||
- Add pkgconfig(libeis-1.0) BuildRequires: New dependency.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Sep 4 15:32:03 UTC 2023 - Bjørn Lie <bjorn.lie@gmail.com>
|
||||
|
||||
- Update to version 45.alpha:
|
||||
+ Fix DND in some server-side decorated windows
|
||||
+ Optionally use libdisplay-info for EDID parsing
|
||||
+ Optimize partial surface updates
|
||||
+ Fix redrawing regression in non-DMA remote sessions
|
||||
+ Avoid race condition in xwayland-on-demand
|
||||
+ Do not unminimize windows with initial IconicState
|
||||
+ Implement physical pixel rounding of wayland surfaces
|
||||
+ Fix mispositioning of some X11 fullscreen windows
|
||||
+ Fix legacy fullscreen windows appearing on all monitors
|
||||
+ Improve support for display-attached tablets
|
||||
+ Fix stuck cursor in some clients
|
||||
+ Avoid unexpected orientation changes around suspend/resume
|
||||
+ Fix oversized input region around Xwayland windows
|
||||
+ Re-enable client modifiers with amdgpu driver
|
||||
+ Fix sysprof tracing in non-main threads
|
||||
+ Fix X11 client input region issues
|
||||
+ Optimize finish-layout step during stage updating
|
||||
+ Fix profiling repeatedly
|
||||
+ Ensure preferred monitor mode is always included
|
||||
+ Fully initialize input device state during init
|
||||
+ Forward modifiers to IM alongside regular key events
|
||||
+ Fix window focus unexpectedly moving to secondary monitor when
|
||||
changing workspaces
|
||||
+ Avoid rapidly toggling dynamic max render time
|
||||
+ Fix dynamic max render time blocking with direct scanout
|
||||
+ Mirror window placement in RTL locales
|
||||
+ Fix screencast with fractionally scaled surfaces
|
||||
+ Reipmlement strict focus mode policy
|
||||
+ Fixed crashes
|
||||
+ Plugged leaks
|
||||
+ Misc. bug fixes and cleanups
|
||||
+ Updated translations.
|
||||
- Bump api_major to 13 following upstream changes.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Sep 4 14:28:19 UTC 2023 - Bjørn Lie <bjorn.lie@gmail.com>
|
||||
|
||||
- Update to version 44.4:
|
||||
+ Fix xwayland-allow-byte-swapped-clients setting.
|
||||
+ Fix restoring focus when leaving the overview.
|
||||
+ Fix touch move operations on subsurfaces.
|
||||
+ Fix flickering when DRI driver isn't available.
|
||||
+ Fix unexpected cursor changes over non-resizable windows.
|
||||
+ Fix restoring maximized state of SSD windows.
|
||||
+ Fix window focus unexpectedly moving to secondary monitor when
|
||||
changing workspaces.
|
||||
+ Fixed crash.
|
||||
+ Misc. bug fixes and cleanups.
|
||||
+ Updated translations.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Aug 29 09:50:53 UTC 2023 - Alynx Zhou <alynx.zhou@suse.com>
|
||||
|
||||
- Add mutter-fix-clipped-redraw.patch: Previous refactor forget
|
||||
to check has_buffer_age, which leads into force full redraw and
|
||||
causes redraw issue with xterm on qemu. This patch fixes it.
|
||||
(bsc#1210744, glgo#GNOME/mutter!3221)
|
||||
- Drop mutter-revert-window_draw_issues.patch: Proper fix is added.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Aug 22 09:24:36 UTC 2023 - Dominique Leuenberger <dimstar@opensuse.org>
|
||||
|
||||
- Add mutter-revert-window_draw_issues.patch: Revert commit
|
||||
43cee4b6: Do clipped redraws when drawing offscreen
|
||||
(boo#1210744, glgo#GNOME/mutter#2771).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Aug 17 09:36:34 UTC 2023 - Yifan Jiang <yfjiang@suse.com>
|
||||
|
||||
- Disable %autopatch on SLE which has not the macro ready.
|
||||
- Rebase mutter-SLE-bsc984738-grab-display.patch.
|
||||
- Drop mutter-Lower-HIDPI_LIMIT-to-144.patch (fate#326682,
|
||||
bsc#112546). The upstream has reworked the logic of scale factor
|
||||
selection based on actual screen size, see:
|
||||
https://gitlab.gnome.org/GNOME/mutter/-/commit/2f1dd049bfbbb60e0b3c2351e9ba1d014205551f
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Jul 6 18:10:34 UTC 2023 - Bjørn Lie <bjorn.lie@gmail.com>
|
||||
|
||||
- Update to version 44.3:
|
||||
+ Ensure preferred monitor mode is always included.
|
||||
+ Avoid rapidly toggling dynamic max render time.
|
||||
+ Fix dynamic max render time blocking with direct scanout.
|
||||
+ Misc. bug fixes.
|
||||
+ Updated translations.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Jun 05 07:34:52 UTC 2023 - bjorn.lie@gmail.com
|
||||
|
||||
- Update to version 44.2:
|
||||
+ Fix DND in some server-side decorated windows
|
||||
+ Fix redrawing regression in non-DMA remote sessions
|
||||
+ Avoid race condition in xwayland-on-demand
|
||||
+ Do not unminimize windows with initial IconicState
|
||||
+ Fix mispositioning of some X11 fullscreen windows
|
||||
+ Fix legacy fullscreen windows appearing on all monitors
|
||||
+ Improve support for display-attached tablets
|
||||
+ Fix stuck cursor in some clients
|
||||
+ Avoid unexpected orientation changes around suspend/resume
|
||||
+ Fix oversized input region around Xwayland windows
|
||||
+ Fix X11 client input region issues
|
||||
+ Plugged leak
|
||||
+ Fixed crashes
|
||||
+ Misc. bug fixes and cleanups
|
||||
+ Updated translations.
|
||||
- Drop patches fixed upstream:
|
||||
+ mutter-do-not-unminimize-windows-with-initial-iconic.patch
|
||||
+ mutter-fix-wacom-tablet-crash.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue May 23 07:41:44 UTC 2023 - Alynx Zhou <alynx.zhou@suse.com>
|
||||
|
||||
- Add mutter-do-not-unminimize-windows-with-initial-iconic.patch:
|
||||
mutter used to unminimize windows with initial IconicState, which
|
||||
is a workaround for some old wine games, it breaks apps like
|
||||
xterm starts with -iconic, this patch revert it (bsc#1193190,
|
||||
glgo#GNOME/mutter!3001).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed May 17 03:01:48 UTC 2023 - Alynx Zhou <alynx.zhou@suse.com>
|
||||
|
||||
- Add mutter-fix-wacom-tablet-crash.patch: Use clutter error trap
|
||||
to fix x11 error of some input device configuration like wacom
|
||||
tablet (bsc#1211413, glgo#GNOME/mutter#2796).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue May 09 09:30:19 UTC 2023 - bjorn.lie@gmail.com
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
name: mutter
|
||||
version: 44.1+2
|
||||
mtime: 1683227330
|
||||
commit: 82bd40dcbcc3601da755678778f033bd9a30286d
|
||||
version: 45.3
|
||||
mtime: 1704584095
|
||||
commit: 5012d22cb96ba22c4133e2e488ea1f5241fb50e2
|
||||
|
54
mutter.spec
54
mutter.spec
@ -1,7 +1,7 @@
|
||||
#
|
||||
# spec file for package mutter
|
||||
#
|
||||
# Copyright (c) 2023 SUSE LLC
|
||||
# Copyright (c) 2024 SUSE LLC
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
@ -16,36 +16,42 @@
|
||||
#
|
||||
|
||||
|
||||
%bcond_without profiler
|
||||
%bcond_with profiler
|
||||
|
||||
%define api_major 12
|
||||
%define api_major 13
|
||||
%define api_minor 0
|
||||
%define libmutter libmutter-%{api_major}-%{api_minor}
|
||||
Name: mutter
|
||||
Version: 44.1+2
|
||||
Version: 45.3
|
||||
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
|
||||
Source0: %{name}-%{version}.tar.xz
|
||||
Source0: %{name}-%{version}.tar.zst
|
||||
|
||||
# PATCH-FIX-UPSTREAM mutter-disable-cvt-s390x.patch bsc#1158128 fcrozat@suse.com -- Do not search for cvt on s390x, it doesn't exist there
|
||||
Patch1: mutter-disable-cvt-s390x.patch
|
||||
# PATCH-FIX-OPENSUSE mutter-window-actor-Special-case-shaped-Java-windows.patch -- window-actor: Special-case shaped Java windows
|
||||
Patch2: mutter-window-actor-Special-case-shaped-Java-windows.patch
|
||||
# PATCH-FIX-UPSTREAM mutter-crash-meta_context_terminate.patch bsc#1199382 glgo#GNOME/mutter#2267 xwang@suse.com -- Fix SIGSEGV in meta_context_terminate
|
||||
Patch3: mutter-crash-meta_context_terminate.patch
|
||||
# PATCH-FIX-UPSTREAM mutter-fix-x11-restart.patch glgo#GNOME/gnome-shell#7050 glgo#GNOME/mutter!3329 alynx.zhou@suse.com -- Fix crash on restarting mutter under x11
|
||||
Patch3: mutter-fix-x11-restart.patch
|
||||
# PATCH-FIX-UPSTREAM mutter-fix-text-input-delete-surrounding.patch glgo#GNOME/mutter#2146 glgo#GNOME/mutter!2712 alynx.zhou@suse.com -- Fix delete_surrounding_text of text-input-v3
|
||||
Patch4: mutter-fix-text-input-delete-surrounding.patch
|
||||
# PATCH-FIX-OPENSUSE 0001-Revert-clutter-actor-Cache-stage-relative-instead-of.patch glgo#GNOME/mutter#3302 bsc#1219546 alynx.zhou@suse.com -- Fix partial update on VT switch
|
||||
Patch5: 0001-Revert-clutter-actor-Cache-stage-relative-instead-of.patch
|
||||
# PATCH-FIX-UPSTREAM 0001-Revert-clutter-stage-Avoid-queueing-stage-updates-wh.patch glgo#GNOME/mutter#3452 bsc#1222612 xwang@suse.com -- Fix blank screen on Xorg when logging in or logging out
|
||||
Patch6: 0001-Revert-clutter-stage-Avoid-queueing-stage-updates-wh.patch
|
||||
# PATCH-FEATURE-OPENSUSE mutter-implement-text-input-v1.patch glgo#GNOME/mutter!3751 bsc#1219505 alynx.zhou@suse.com -- Allow input method to work in Wayland Chromium
|
||||
Patch7: mutter-implement-text-input-v1.patch
|
||||
# PATCH-FIX-UPSTREAM mutter-fix-initial-suspended-state.patch glgo#GNOME/mutter!3475 bsc#1223393 alynx.zhou@suse.com -- Fix initial suspended state for some Qt 6.7 window
|
||||
Patch8: mutter-fix-initial-suspended-state.patch
|
||||
|
||||
## SLE-only patches start at 1000
|
||||
# PATCH-FEATURE-SLE mutter-SLE-bell.patch FATE#316042 bnc#889218 idonmez@suse.com -- make audible bell work out of the box.
|
||||
Patch1000: mutter-SLE-bell.patch
|
||||
# PATCH-FIX-SLE mutter-SLE-relax-some-constraints-on-CSD-windows.patch bnc#883491 cxiong@suse.com -- 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-FIX-SLE mutter-SLE-bsc984738-grab-display.patch bsc#984738 bgo#769387 hpj@suse.com -- Revert a upstream commit to avoid X11 race condition that results in wrong dialog sizes.
|
||||
Patch1002: mutter-SLE-bsc984738-grab-display.patch
|
||||
# PATCH-NEEDS-REBASE mutter-Lower-HIDPI_LIMIT-to-144.patch fate#326682, bsc#1125467 qkzhu@suse.com -- Lower HIDPI_LIMIT to 144 WAS
|
||||
Patch1003: mutter-Lower-HIDPI_LIMIT-to-144.patch
|
||||
|
||||
BuildRequires: Mesa-libGLESv3-devel
|
||||
BuildRequires: fdupes
|
||||
@ -74,7 +80,9 @@ BuildRequires: pkgconfig(gudev-1.0) >= 232
|
||||
BuildRequires: pkgconfig(json-glib-1.0) >= 0.12.0
|
||||
BuildRequires: pkgconfig(lcms2) >= 2.6
|
||||
BuildRequires: pkgconfig(libcanberra-gtk3) >= 0.26
|
||||
BuildRequires: pkgconfig(libdisplay-info)
|
||||
BuildRequires: pkgconfig(libdrm) >= 2.4.83
|
||||
BuildRequires: pkgconfig(libeis-1.0)
|
||||
BuildRequires: pkgconfig(libinput) >= 1.15.0
|
||||
BuildRequires: pkgconfig(libpipewire-0.3) >= 0.3.21
|
||||
BuildRequires: pkgconfig(libstartup-notification-1.0) >= 0.7
|
||||
@ -84,8 +92,8 @@ BuildRequires: pkgconfig(libwacom) >= 0.13
|
||||
BuildRequires: pkgconfig(pango) >= 1.2.0
|
||||
BuildRequires: pkgconfig(sm)
|
||||
%if %{with profiler}
|
||||
BuildRequires: pkgconfig(sysprof-4)
|
||||
BuildRequires: pkgconfig(sysprof-capture-4) >= 3.37.3
|
||||
BuildRequires: pkgconfig(sysprof-6)
|
||||
BuildRequires: pkgconfig(sysprof-capture-4) >= 3.37.2
|
||||
%endif
|
||||
BuildRequires: pkgconfig(udev)
|
||||
BuildRequires: pkgconfig(upower-glib) >= 0.99.0
|
||||
@ -142,10 +150,22 @@ applications that want to make use of the mutter library.
|
||||
|
||||
%prep
|
||||
%autosetup -N
|
||||
%if !0%{?sle_version}
|
||||
%autopatch -p1 -M 999
|
||||
%else
|
||||
%patch -P 1 -p1
|
||||
%patch -P 2 -p1
|
||||
%patch -P 3 -p1
|
||||
%patch -P 4 -p1
|
||||
%patch -P 5 -p1
|
||||
%patch -P 6 -p1
|
||||
%patch -P 7 -p1
|
||||
%patch -P 8 -p1
|
||||
%endif
|
||||
# SLE-only patches and translations.
|
||||
%if 0%{?sle_version}
|
||||
%autopatch -p1 -m 1000
|
||||
%patch -P 1000 -p1
|
||||
%patch -P 1001 -p1
|
||||
%endif
|
||||
|
||||
%build
|
||||
@ -157,6 +177,7 @@ applications that want to make use of the mutter library.
|
||||
-Dtests=false \
|
||||
-Dinstalled_tests=false \
|
||||
-Dxwayland_initfd=auto \
|
||||
-Dlibdisplay_info=true \
|
||||
%if %{with profiler}
|
||||
-Dprofiler=true \
|
||||
%else
|
||||
@ -185,6 +206,7 @@ applications that want to make use of the mutter library.
|
||||
%{_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-%{api_major}.so.*
|
||||
%{_libdir}/mutter-%{api_major}/libmutter-mtk-%{api_major}.so.*
|
||||
%{_libdir}/mutter-%{api_major}/plugins/libdefault.so
|
||||
|
||||
# These typelibs are not split out since they are private to mutter
|
||||
@ -193,6 +215,7 @@ applications that want to make use of the mutter library.
|
||||
%{_libdir}/mutter-%{api_major}/Cogl-%{api_major}.typelib
|
||||
%{_libdir}/mutter-%{api_major}/CoglPango-%{api_major}.typelib
|
||||
%{_libdir}/mutter-%{api_major}/Meta-%{api_major}.typelib
|
||||
%{_libdir}/mutter-%{api_major}/Mtk-%{api_major}.typelib
|
||||
|
||||
%{_libdir}/libmutter-%{api_major}.so.*
|
||||
%dir %{_libdir}/mutter-%{api_major}/
|
||||
@ -217,14 +240,17 @@ applications that want to make use of the mutter library.
|
||||
%{_libdir}/mutter-%{api_major}/Clutter-%{api_major}.gir
|
||||
%{_libdir}/mutter-%{api_major}/Cogl-%{api_major}.gir
|
||||
%{_libdir}/mutter-%{api_major}/CoglPango-%{api_major}.gir
|
||||
%{_libdir}/mutter-%{api_major}/Mtk-%{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-%{api_major}.so
|
||||
%{_libdir}/mutter-%{api_major}/libmutter-mtk-%{api_major}.so
|
||||
%{_libdir}/libmutter-%{api_major}.so
|
||||
%{_libdir}/pkgconfig/libmutter-%{api_major}.pc
|
||||
%{_libdir}/pkgconfig/mutter-clutter-%{api_major}.pc
|
||||
%{_libdir}/pkgconfig/mutter-cogl-%{api_major}.pc
|
||||
%{_libdir}/pkgconfig/mutter-cogl-pango-%{api_major}.pc
|
||||
%{_libdir}/pkgconfig/mutter-mtk-%{api_major}.pc
|
||||
|
||||
%files lang -f %{name}.lang
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user