diff --git a/SOURCES/0001-clutter-input-device-xi2-Check-for-null-group_modes-.patch b/SOURCES/0001-clutter-input-device-xi2-Check-for-null-group_modes-.patch deleted file mode 100644 index 5f6473c..0000000 --- a/SOURCES/0001-clutter-input-device-xi2-Check-for-null-group_modes-.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 2a45b7de7cf5955b81cc1778dbb5085bfabb1c56 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Corentin=20No=C3=ABl?= -Date: Sat, 2 Jun 2018 19:16:32 +0100 -Subject: [PATCH] clutter-input-device-xi2: Check for null group_modes before - unref - ---- - clutter/clutter/x11/clutter-input-device-xi2.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/clutter/clutter/x11/clutter-input-device-xi2.c b/clutter/clutter/x11/clutter-input-device-xi2.c -index f62ba85dcb..1254aca3ae 100644 ---- a/clutter/clutter/x11/clutter-input-device-xi2.c -+++ b/clutter/clutter/x11/clutter-input-device-xi2.c -@@ -110,7 +110,8 @@ clutter_input_device_xi2_finalize (GObject *object) - if (device_xi2->wacom_device) - libwacom_destroy (device_xi2->wacom_device); - -- g_array_unref (device_xi2->group_modes); -+ if (device_xi2->group_modes) -+ g_array_unref (device_xi2->group_modes); - #endif - - G_OBJECT_CLASS (clutter_input_device_xi2_parent_class)->finalize (object); --- -2.23.0.rc1 - diff --git a/SOURCES/0001-compositor-Don-t-emit-size-changed-when-only-positio.patch b/SOURCES/0001-compositor-Don-t-emit-size-changed-when-only-positio.patch deleted file mode 100644 index 0e04185..0000000 --- a/SOURCES/0001-compositor-Don-t-emit-size-changed-when-only-positio.patch +++ /dev/null @@ -1,140 +0,0 @@ -From a8d0870c6e9c9d2269c2b856cd2d83949fef4154 Mon Sep 17 00:00:00 2001 -From: Daniel van Vugt -Date: Tue, 7 May 2019 18:08:13 +0800 -Subject: [PATCH 1/2] compositor: Don't emit size-changed when only position - changes - -Waking up gnome-shell and triggering JavaScript listeners of -`size-changed` every time a window was only moved was wasting a lot -of CPU. - -This cuts the CPU requirement for dragging windows by around 22%. - -https://gitlab.gnome.org/GNOME/mutter/merge_requests/568 ---- - src/compositor/compositor.c | 8 +++- - src/compositor/meta-window-actor-private.h | 12 +++++- - src/compositor/meta-window-actor.c | 43 ++++++++++++++++++---- - 3 files changed, 52 insertions(+), 11 deletions(-) - -diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c -index 8c924d256..abf7de57d 100644 ---- a/src/compositor/compositor.c -+++ b/src/compositor/compositor.c -@@ -1070,8 +1070,12 @@ meta_compositor_sync_window_geometry (MetaCompositor *compositor, - gboolean did_placement) - { - MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window)); -- meta_window_actor_sync_actor_geometry (window_actor, did_placement); -- meta_plugin_manager_event_size_changed (compositor->plugin_mgr, window_actor); -+ MetaWindowActorChanges changes; -+ -+ changes = meta_window_actor_sync_actor_geometry (window_actor, did_placement); -+ -+ if (changes & META_WINDOW_ACTOR_CHANGE_SIZE) -+ meta_plugin_manager_event_size_changed (compositor->plugin_mgr, window_actor); - } - - static void -diff --git a/src/compositor/meta-window-actor-private.h b/src/compositor/meta-window-actor-private.h -index ce5e7eadc..acd649d07 100644 ---- a/src/compositor/meta-window-actor-private.h -+++ b/src/compositor/meta-window-actor-private.h -@@ -12,6 +12,12 @@ - - MetaWindowActor *meta_window_actor_new (MetaWindow *window); - -+typedef enum -+{ -+ META_WINDOW_ACTOR_CHANGE_SIZE = 1 << 0, -+ META_WINDOW_ACTOR_CHANGE_POSITION = 1 << 1 -+} MetaWindowActorChanges; -+ - void meta_window_actor_queue_destroy (MetaWindowActor *self); - - void meta_window_actor_show (MetaWindowActor *self, -@@ -43,8 +49,10 @@ void meta_window_actor_set_unredirected (MetaWindowActor *self, - gboolean unredirected); - - gboolean meta_window_actor_effect_in_progress (MetaWindowActor *self); --void meta_window_actor_sync_actor_geometry (MetaWindowActor *self, -- gboolean did_placement); -+ -+MetaWindowActorChanges meta_window_actor_sync_actor_geometry (MetaWindowActor *self, -+ gboolean did_placement); -+ - void meta_window_actor_update_shape (MetaWindowActor *self); - void meta_window_actor_update_opacity (MetaWindowActor *self); - void meta_window_actor_mapped (MetaWindowActor *self); -diff --git a/src/compositor/meta-window-actor.c b/src/compositor/meta-window-actor.c -index 120b0432c..afe2bab6e 100644 ---- a/src/compositor/meta-window-actor.c -+++ b/src/compositor/meta-window-actor.c -@@ -1299,12 +1299,14 @@ meta_window_actor_queue_destroy (MetaWindowActor *self) - clutter_actor_destroy (CLUTTER_ACTOR (self)); - } - --void -+MetaWindowActorChanges - meta_window_actor_sync_actor_geometry (MetaWindowActor *self, - gboolean did_placement) - { - MetaWindowActorPrivate *priv = self->priv; - MetaRectangle window_rect; -+ ClutterActor *actor = CLUTTER_ACTOR (self); -+ MetaWindowActorChanges changes = 0; - - meta_window_get_buffer_rect (priv->window, &window_rect); - -@@ -1322,15 +1324,42 @@ meta_window_actor_sync_actor_geometry (MetaWindowActor *self, - * updates. - */ - if (is_frozen (self) && !did_placement) -- return; -+ return META_WINDOW_ACTOR_CHANGE_POSITION | META_WINDOW_ACTOR_CHANGE_SIZE; - - if (meta_window_actor_effect_in_progress (self)) -- return; -+ return META_WINDOW_ACTOR_CHANGE_POSITION | META_WINDOW_ACTOR_CHANGE_SIZE; -+ -+ if (clutter_actor_has_allocation (actor)) -+ { -+ ClutterActorBox box; -+ float old_x, old_y; -+ float old_width, old_height; -+ -+ clutter_actor_get_allocation_box (actor, &box); -+ -+ old_x = box.x1; -+ old_y = box.y1; -+ old_width = box.x2 - box.x1; -+ old_height = box.y2 - box.y1; -+ -+ if (old_x != window_rect.x || old_y != window_rect.y) -+ changes |= META_WINDOW_ACTOR_CHANGE_POSITION; -+ -+ if (old_width != window_rect.width || old_height != window_rect.height) -+ changes |= META_WINDOW_ACTOR_CHANGE_SIZE; -+ } -+ else -+ { -+ changes = META_WINDOW_ACTOR_CHANGE_POSITION | META_WINDOW_ACTOR_CHANGE_SIZE; -+ } -+ -+ if (changes & META_WINDOW_ACTOR_CHANGE_POSITION) -+ clutter_actor_set_position (actor, window_rect.x, window_rect.y); -+ -+ if (changes & META_WINDOW_ACTOR_CHANGE_SIZE) -+ clutter_actor_set_size (actor, window_rect.width, window_rect.height); - -- clutter_actor_set_position (CLUTTER_ACTOR (self), -- window_rect.x, window_rect.y); -- clutter_actor_set_size (CLUTTER_ACTOR (self), -- window_rect.width, window_rect.height); -+ return changes; - } - - void --- -2.21.0 - diff --git a/SOURCES/0001-display-Make-check-alive-timeout-configureable.patch b/SOURCES/0001-display-Make-check-alive-timeout-configureable.patch new file mode 100644 index 0000000..9b40156 --- /dev/null +++ b/SOURCES/0001-display-Make-check-alive-timeout-configureable.patch @@ -0,0 +1,248 @@ +From b8715ae0514ea08f4a52b5b5ec0fb9220591c4f2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Fri, 21 Feb 2020 21:03:16 +0100 +Subject: [PATCH] display: Make check-alive timeout configureable + +The check-alive feature is there for the user to be able to terminate +frozen applications more easily. However, sometimes applications are +implemented in a way where they fail to be reply to ping requests in a +timely manner, resulting in that, to the compositor, they are +indistinguishable from clients that have frozen indefinitely. + +When using an application that has these issues, the GUI showed in +response to the failure to respond to ping requests can become annoying, +as it disrupts the visual presentation of the application. + +To allow users to work-around these issues, add a setting allowing them +to configure the timeout waited until an application is considered +frozen, or disabling the check completely. + +https://gitlab.gnome.org/GNOME/mutter/merge_requests/1080 +--- + data/org.gnome.mutter.gschema.xml.in | 10 ++++ + src/core/display.c | 18 ++++---- + src/core/prefs.c | 68 ++++++++++++++++++++++++++++ + src/meta/prefs.h | 3 ++ + 4 files changed, 90 insertions(+), 9 deletions(-) + +diff --git a/data/org.gnome.mutter.gschema.xml.in b/data/org.gnome.mutter.gschema.xml.in +index bec5585bd..06f8288c8 100644 +--- a/data/org.gnome.mutter.gschema.xml.in ++++ b/data/org.gnome.mutter.gschema.xml.in +@@ -127,6 +127,16 @@ + + + ++ ++ 5000 ++ Timeout for check-alive ping ++ ++ Number of milliseconds a client has to respond to a ping request in ++ order to not be detected as frozen. Using 0 will disable the alive check ++ completely. ++ ++ ++ + + + +diff --git a/src/core/display.c b/src/core/display.c +index d4775cec3..5b843fa51 100644 +--- a/src/core/display.c ++++ b/src/core/display.c +@@ -2197,12 +2197,6 @@ meta_set_syncing (gboolean setting) + } + } + +-/* +- * How long, in milliseconds, we should wait after pinging a window +- * before deciding it's not going to get back to us. +- */ +-#define PING_TIMEOUT_DELAY 5000 +- + /** + * meta_display_ping_timeout: + * @data: All the information about this ping. It is a #MetaPingData +@@ -2260,6 +2254,11 @@ meta_display_ping_window (MetaWindow *window, + { + MetaDisplay *display = window->display; + MetaPingData *ping_data; ++ unsigned int check_alive_timeout; ++ ++ check_alive_timeout = meta_prefs_get_check_alive_timeout (); ++ if (check_alive_timeout == 0) ++ return; + + if (serial == 0) + { +@@ -2273,9 +2272,10 @@ meta_display_ping_window (MetaWindow *window, + ping_data = g_new (MetaPingData, 1); + ping_data->window = window; + ping_data->serial = serial; +- ping_data->ping_timeout_id = g_timeout_add (PING_TIMEOUT_DELAY, +- meta_display_ping_timeout, +- ping_data); ++ ping_data->ping_timeout_id = ++ g_timeout_add (check_alive_timeout, ++ meta_display_ping_timeout, ++ ping_data); + g_source_set_name_by_id (ping_data->ping_timeout_id, "[mutter] meta_display_ping_timeout"); + + display->pending_pings = g_slist_prepend (display->pending_pings, ping_data); +diff --git a/src/core/prefs.c b/src/core/prefs.c +index b6a8ab7bf..326db52d2 100644 +--- a/src/core/prefs.c ++++ b/src/core/prefs.c +@@ -95,6 +95,7 @@ static gboolean bell_is_visible = FALSE; + static gboolean bell_is_audible = TRUE; + static gboolean gnome_accessibility = FALSE; + static gboolean gnome_animations = TRUE; ++static unsigned int check_alive_timeout = 5000; + static char *cursor_theme = NULL; + /* cursor_size will, when running as an X11 compositing window manager, be the + * actual cursor size, multiplied with the global window scaling factor. On +@@ -225,6 +226,12 @@ typedef struct + gint *target; + } MetaIntPreference; + ++typedef struct ++{ ++ MetaBasePreference base; ++ unsigned int *target; ++} MetaUintPreference; ++ + + /* All preferences that are not keybindings must be listed here, + * plus in the GSettings schemas and the MetaPreference enum. +@@ -496,6 +503,18 @@ static MetaIntPreference preferences_int[] = + { { NULL, 0, 0 }, NULL }, + }; + ++static MetaUintPreference preferences_uint[] = ++ { ++ { ++ { "check-alive-timeout", ++ SCHEMA_MUTTER, ++ META_PREF_CHECK_ALIVE_TIMEOUT, ++ }, ++ &check_alive_timeout, ++ }, ++ { { NULL, 0, 0 }, NULL }, ++ }; ++ + /* + * This is used to keep track of override schemas used to + * override preferences from the "normal" metacity/mutter +@@ -633,6 +652,21 @@ handle_preference_init_int (void) + } + } + ++static void ++handle_preference_init_uint (void) ++{ ++ MetaUintPreference *cursor = preferences_uint; ++ ++ while (cursor->base.key != NULL) ++ { ++ if (cursor->target) ++ *cursor->target = g_settings_get_uint (SETTINGS (cursor->base.schema), ++ cursor->base.key); ++ ++ ++cursor; ++ } ++} ++ + static void + handle_preference_update_enum (GSettings *settings, + gchar *key) +@@ -808,6 +842,28 @@ handle_preference_update_int (GSettings *settings, + } + } + ++static void ++handle_preference_update_uint (GSettings *settings, ++ char *key) ++{ ++ MetaUintPreference *cursor = preferences_uint; ++ unsigned int new_value; ++ ++ while (cursor->base.key && strcmp (key, cursor->base.key) != 0) ++ ++cursor; ++ ++ if (!cursor->base.key || !cursor->target) ++ return; ++ ++ new_value = g_settings_get_uint (SETTINGS (cursor->base.schema), key); ++ ++ if (*cursor->target != new_value) ++ { ++ *cursor->target = new_value; ++ queue_changed (cursor->base.pref); ++ } ++} ++ + + /****************************************************************************/ + /* Listeners. */ +@@ -1003,6 +1059,7 @@ meta_prefs_init (void) + handle_preference_init_string (); + handle_preference_init_string_array (); + handle_preference_init_int (); ++ handle_preference_init_uint (); + + update_cursor_size (); + shell_shows_app_menu_changed (gtk_settings_get_default (), NULL, NULL); +@@ -1176,6 +1233,8 @@ settings_changed (GSettings *settings, + handle_preference_update_bool (settings, key); + else if (g_variant_type_equal (type, G_VARIANT_TYPE_INT32)) + handle_preference_update_int (settings, key); ++ else if (g_variant_type_equal (type, G_VARIANT_TYPE_UINT32)) ++ handle_preference_update_uint (settings, key); + else if (g_variant_type_equal (type, G_VARIANT_TYPE_STRING_ARRAY)) + handle_preference_update_string_array (settings, key); + else if (g_variant_type_equal (type, G_VARIANT_TYPE_STRING)) +@@ -1851,6 +1910,9 @@ meta_preference_to_string (MetaPreference pref) + + case META_PREF_AUTO_MAXIMIZE: + return "AUTO_MAXIMIZE"; ++ ++ case META_PREF_CHECK_ALIVE_TIMEOUT: ++ return "CHECK_ALIVE_TIMEOUT"; + } + + return "(unknown)"; +@@ -2177,6 +2239,12 @@ meta_prefs_get_overlay_binding (MetaKeyCombo *combo) + *combo = overlay_key_combo; + } + ++unsigned int ++meta_prefs_get_check_alive_timeout (void) ++{ ++ return check_alive_timeout; ++} ++ + const char * + meta_prefs_get_iso_next_group_option (void) + { +diff --git a/src/meta/prefs.h b/src/meta/prefs.h +index df3cf6c97..f343925f8 100644 +--- a/src/meta/prefs.h ++++ b/src/meta/prefs.h +@@ -103,6 +103,7 @@ typedef enum + META_PREF_AUTO_MAXIMIZE, + META_PREF_CENTER_NEW_WINDOWS, + META_PREF_DRAG_THRESHOLD, ++ META_PREF_CHECK_ALIVE_TIMEOUT, + } MetaPreference; + + typedef void (* MetaPrefsChangedFunc) (MetaPreference pref, +@@ -406,4 +407,6 @@ gboolean meta_prefs_get_visual_bell (void); + gboolean meta_prefs_bell_is_audible (void); + GDesktopVisualBellType meta_prefs_get_visual_bell_type (void); + ++unsigned int meta_prefs_get_check_alive_timeout (void); ++ + #endif +-- +2.24.1 + diff --git a/SOURCES/0001-screen-Expose-workspace-layout-properties.patch b/SOURCES/0001-screen-Expose-workspace-layout-properties.patch deleted file mode 100644 index bc7ed96..0000000 --- a/SOURCES/0001-screen-Expose-workspace-layout-properties.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 6b8e2636911c79d77d95aaac62336dd4f4063f63 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Tue, 4 Jun 2019 21:21:37 +0200 -Subject: [PATCH] screen: Expose workspace layout properties - -gnome-shell hardcodes a vertical one-column workspace layout, and -while not supporting arbitrary grids is very much by design, it -currently doesn't have a choice: We simply don't expose the workspace -layout we use. - -Change that to allow gnome-shell to be a bit more flexible with the -workspace layouts it supports. - -https://gitlab.gnome.org/GNOME/mutter/merge_requests/618 ---- - src/core/screen.c | 27 +++++++++++++++++++++++++++ - 1 file changed, 27 insertions(+) - -diff --git a/src/core/screen.c b/src/core/screen.c -index c14bba0cf..4fac02cdb 100644 ---- a/src/core/screen.c -+++ b/src/core/screen.c -@@ -81,6 +81,9 @@ static void on_monitors_changed (MetaMonitorManager *manager, - enum - { - PROP_N_WORKSPACES = 1, -+ -+ PROP_LAYOUT_COLUMNS, -+ PROP_LAYOUT_ROWS, - }; - - enum -@@ -138,6 +141,12 @@ meta_screen_get_property (GObject *object, - - switch (prop_id) - { -+ case PROP_LAYOUT_COLUMNS: -+ g_value_set_int (value, screen->columns_of_workspaces); -+ break; -+ case PROP_LAYOUT_ROWS: -+ g_value_set_int (value, screen->rows_of_workspaces); -+ break; - case PROP_N_WORKSPACES: - g_value_set_int (value, meta_screen_get_n_workspaces (screen)); - break; -@@ -261,6 +270,22 @@ meta_screen_class_init (MetaScreenClass *klass) - NULL, NULL, NULL, - G_TYPE_NONE, 0); - -+ g_object_class_install_property (object_class, -+ PROP_LAYOUT_COLUMNS, -+ g_param_spec_int ("layout-columns", -+ "Layout columns", -+ "Number of columns in layout", -+ -1, G_MAXINT, 1, -+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); -+ -+ g_object_class_install_property (object_class, -+ PROP_LAYOUT_ROWS, -+ g_param_spec_int ("layout-rows", -+ "Layout rows", -+ "Number of rows in layout", -+ -1, G_MAXINT, 1, -+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); -+ - g_object_class_install_property (object_class, - PROP_N_WORKSPACES, - pspec); -@@ -1753,6 +1778,8 @@ meta_screen_update_workspace_layout (MetaScreen *screen) - screen->columns_of_workspaces, - screen->vertical_workspaces, - screen->starting_corner); -+ g_object_notify (G_OBJECT (screen), "layout-columns"); -+ g_object_notify (G_OBJECT (screen), "layout-rows"); - } - - /** --- -2.21.0 - diff --git a/SOURCES/0001-x11-window-props-Do-not-convert-WM_NAME.patch b/SOURCES/0001-x11-window-props-Do-not-convert-WM_NAME.patch deleted file mode 100644 index f7ce445..0000000 --- a/SOURCES/0001-x11-window-props-Do-not-convert-WM_NAME.patch +++ /dev/null @@ -1,38 +0,0 @@ -From ad1a395707f7c37b26ce446f0fd73ac7fbb9d0fd Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Tue, 9 Oct 2018 00:40:33 +0200 -Subject: [PATCH 1/2] x11/window-props: Do not convert WM_NAME - -The WM_NAME property is of type TEXT_PROPERTY, which is supposed to be -returned as UTF-8. Commit 840378ae68 broke that assumption, resulting -in crashes with non-UTF8 locales; however the "fix" of converting from -LATIN1 to UTF8 is wrong as well, as the conversion will spit out garbage -when the input encoding isn't actually LATIN1. - -Now that the original issue in text_property_to_utf8() has been fixed, -we can simply revert the relevant bits of commit d62491f46eba748e. - -https://gitlab.gnome.org/GNOME/mutter/merge_requests/227 ---- - src/x11/window-props.c | 5 +---- - 1 file changed, 1 insertion(+), 4 deletions(-) - -diff --git a/src/x11/window-props.c b/src/x11/window-props.c -index 2f4dfeb31..7c6b25fdb 100644 ---- a/src/x11/window-props.c -+++ b/src/x11/window-props.c -@@ -645,10 +645,7 @@ reload_wm_name (MetaWindow *window, - - if (value->type != META_PROP_VALUE_INVALID) - { -- g_autofree gchar *title = g_convert (value->v.str, -1, -- "UTF-8", "LATIN1", -- NULL, NULL, NULL); -- set_window_title (window, title); -+ set_window_title (window, value->v.str); - - meta_verbose ("Using WM_NAME for new title of %s: \"%s\"\n", - window->desc, window->title); --- -2.21.0 - diff --git a/SOURCES/0002-clutter-Avoid-relayouts-when-raising-lowering-childr.patch b/SOURCES/0002-clutter-Avoid-relayouts-when-raising-lowering-childr.patch deleted file mode 100644 index 3bdd6e8..0000000 --- a/SOURCES/0002-clutter-Avoid-relayouts-when-raising-lowering-childr.patch +++ /dev/null @@ -1,60 +0,0 @@ -From dcf0717d7d90ff525c4f87cf633353caabf0eeeb Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Fri, 10 Aug 2018 21:30:58 +0200 -Subject: [PATCH 2/2] clutter: Avoid relayouts when raising/lowering children - -These calls don't actually affect the layout, but the paint order. -It seems safe to skip the full relayout/repaint of the parent actor, -and redraw only the area occupied by the affected child. ---- - clutter/clutter/clutter-actor.c | 20 ++++++++++++++++++-- - 1 file changed, 18 insertions(+), 2 deletions(-) - -diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c -index 6954f0396..7a9da7257 100644 ---- a/clutter/clutter/clutter-actor.c -+++ b/clutter/clutter/clutter-actor.c -@@ -1713,6 +1713,22 @@ set_show_on_set_parent (ClutterActor *self, - } - } - -+static void -+clutter_actor_queue_redraw_on_parent (ClutterActor *self) -+{ -+ const ClutterPaintVolume *pv; -+ -+ if (!self->priv->parent) -+ return; -+ -+ /* A relayout/redraw is underway */ -+ if (self->priv->needs_allocation) -+ return; -+ -+ pv = clutter_actor_get_transformed_paint_volume (self, self->priv->parent); -+ _clutter_actor_queue_redraw_with_clip (self->priv->parent, 0, pv); -+} -+ - /** - * clutter_actor_show: - * @self: A #ClutterActor -@@ -13618,7 +13634,7 @@ clutter_actor_set_child_above_sibling (ClutterActor *self, - sibling); - g_object_unref(child); - -- clutter_actor_queue_relayout (self); -+ clutter_actor_queue_redraw_on_parent (child); - } - - /** -@@ -13665,7 +13681,7 @@ clutter_actor_set_child_below_sibling (ClutterActor *self, - sibling); - g_object_unref(child); - -- clutter_actor_queue_relayout (self); -+ clutter_actor_queue_redraw_on_parent (child); - } - - /** --- -2.21.0 - diff --git a/SOURCES/0002-xprops-Make-sure-text_property_to_utf8-returns-UTF8.patch b/SOURCES/0002-xprops-Make-sure-text_property_to_utf8-returns-UTF8.patch deleted file mode 100644 index 6178049..0000000 --- a/SOURCES/0002-xprops-Make-sure-text_property_to_utf8-returns-UTF8.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 5881b87be4432ca1c50ee0652634883110b487de Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Tue, 9 Oct 2018 00:29:01 +0200 -Subject: [PATCH 2/2] xprops: Make sure text_property_to_utf8() returns UTF8 - -Commit 840378ae682 changed the code to use XmbTextPropertyToTextList() -instead of gdk_text_property_to_utf8_list_for_display(), but didn't -take into account that the replacement returns text in the current -locale's encoding, while any callers (rightfully) expect UTF8. - -Fix this by converting the text if necessary. - -https://gitlab.gnome.org/GNOME/mutter/merge_requests/227 ---- - src/x11/xprops.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/src/x11/xprops.c b/src/x11/xprops.c -index cffa5958a..ca686b2fa 100644 ---- a/src/x11/xprops.c -+++ b/src/x11/xprops.c -@@ -637,6 +637,7 @@ text_property_to_utf8 (Display *xdisplay, - { - char *ret = NULL; - char **local_list = NULL; -+ const char *charset = NULL; - int count = 0; - int res; - -@@ -647,7 +648,10 @@ text_property_to_utf8 (Display *xdisplay, - if (count == 0) - goto out; - -- ret = g_strdup (local_list[0]); -+ if (g_get_charset (&charset)) -+ ret = g_strdup (local_list[0]); -+ else -+ ret = g_convert (local_list[0], -1, "UTF-8", charset, NULL, NULL, NULL); - - out: - XFreeStringList (local_list); --- -2.21.0 - diff --git a/SOURCES/idle-monitor-reset-fix.patch b/SOURCES/idle-monitor-reset-fix.patch deleted file mode 100644 index 411b625..0000000 --- a/SOURCES/idle-monitor-reset-fix.patch +++ /dev/null @@ -1,128 +0,0 @@ -From 23c81629d775fd902e4bee7ec0a182a916f4252b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jonas=20=C3=85dahl?= -Date: Mon, 16 Sep 2019 16:17:48 +0200 -Subject: [PATCH 1/3] idle-monitor: Make helper function static - -It wasn't used outside the file, so no reason to not have it static. - -https://gitlab.gnome.org/GNOME/mutter/merge_requests/799 ---- - src/backends/meta-idle-monitor-private.h | 1 - - src/backends/meta-idle-monitor.c | 8 ++++---- - 2 files changed, 4 insertions(+), 5 deletions(-) - -diff --git a/src/backends/meta-idle-monitor-private.h b/src/backends/meta-idle-monitor-private.h -index 82f3f87b7..9ce7e743a 100644 ---- a/src/backends/meta-idle-monitor-private.h -+++ b/src/backends/meta-idle-monitor-private.h -@@ -54,7 +54,6 @@ struct _MetaIdleMonitorClass - GObjectClass parent_class; - }; - --void _meta_idle_monitor_watch_fire (MetaIdleMonitorWatch *watch); - void meta_idle_monitor_reset_idletime (MetaIdleMonitor *monitor); - - #endif /* META_IDLE_MONITOR_PRIVATE_H */ -diff --git a/src/backends/meta-idle-monitor.c b/src/backends/meta-idle-monitor.c -index 2c06ee73c..ce1b87bbb 100644 ---- a/src/backends/meta-idle-monitor.c -+++ b/src/backends/meta-idle-monitor.c -@@ -54,8 +54,8 @@ static GParamSpec *obj_props[PROP_LAST]; - - G_DEFINE_TYPE (MetaIdleMonitor, meta_idle_monitor, G_TYPE_OBJECT) - --void --_meta_idle_monitor_watch_fire (MetaIdleMonitorWatch *watch) -+static void -+meta_idle_monitor_watch_fire (MetaIdleMonitorWatch *watch) - { - MetaIdleMonitor *monitor; - guint id; -@@ -319,7 +319,7 @@ idle_monitor_dispatch_timeout (GSource *source, - if (ready_time > now) - return G_SOURCE_CONTINUE; - -- _meta_idle_monitor_watch_fire (watch); -+ meta_idle_monitor_watch_fire (watch); - g_source_set_ready_time (watch->timeout_source, -1); - - return G_SOURCE_CONTINUE; -@@ -506,7 +506,7 @@ meta_idle_monitor_reset_idletime (MetaIdleMonitor *monitor) - - if (watch->timeout_msec == 0) - { -- _meta_idle_monitor_watch_fire ((MetaIdleMonitorWatch *) watch); -+ meta_idle_monitor_watch_fire ((MetaIdleMonitorWatch *) watch); - } - else - { --- -2.23.0 - - -From 0d43bbdae0a08c7618e789fa0d5270615c907a36 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jonas=20=C3=85dahl?= -Date: Mon, 16 Sep 2019 16:36:05 +0200 -Subject: [PATCH 2/3] idle-monitor: Remove redundant type cast - -No need to type cast a `MetaIdleMonitorWatch *` to a -`MetaIdleMonitorWatch *`. - -https://gitlab.gnome.org/GNOME/mutter/merge_requests/799 ---- - src/backends/meta-idle-monitor.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/backends/meta-idle-monitor.c b/src/backends/meta-idle-monitor.c -index ce1b87bbb..3dbb89944 100644 ---- a/src/backends/meta-idle-monitor.c -+++ b/src/backends/meta-idle-monitor.c -@@ -506,7 +506,7 @@ meta_idle_monitor_reset_idletime (MetaIdleMonitor *monitor) - - if (watch->timeout_msec == 0) - { -- meta_idle_monitor_watch_fire ((MetaIdleMonitorWatch *) watch); -+ meta_idle_monitor_watch_fire (watch); - } - else - { --- -2.23.0 - - -From f6c24dd45c14dd16d6878ebf170f8468ad3d47e1 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jonas=20=C3=85dahl?= -Date: Mon, 16 Sep 2019 16:36:51 +0200 -Subject: [PATCH 3/3] idle-monitor: Reset timeout before firing watch - -The watch might be removed during firing, meaning the source is -destroyed after returning. Avoid use-after-free by unsetting the timeout -before firing. Returning G_SOURCE_CONTINUE in that case is harmless, as -source is destroyed. - -Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/796 - -https://gitlab.gnome.org/GNOME/mutter/merge_requests/799 ---- - src/backends/meta-idle-monitor.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/backends/meta-idle-monitor.c b/src/backends/meta-idle-monitor.c -index 3dbb89944..c6e814468 100644 ---- a/src/backends/meta-idle-monitor.c -+++ b/src/backends/meta-idle-monitor.c -@@ -319,9 +319,10 @@ idle_monitor_dispatch_timeout (GSource *source, - if (ready_time > now) - return G_SOURCE_CONTINUE; - -- meta_idle_monitor_watch_fire (watch); - g_source_set_ready_time (watch->timeout_source, -1); - -+ meta_idle_monitor_watch_fire (watch); -+ - return G_SOURCE_CONTINUE; - } - --- -2.23.0 - diff --git a/SOURCES/input-after-long-idle-fix.patch b/SOURCES/input-after-long-idle-fix.patch index d211ff9..1f26abd 100644 --- a/SOURCES/input-after-long-idle-fix.patch +++ b/SOURCES/input-after-long-idle-fix.patch @@ -1,4 +1,4 @@ -From 388ed4984586f96250934a025b1c78915c4cd856 Mon Sep 17 00:00:00 2001 +From a86f1085d1f5056fb4b19f1d7f72a1905122cc24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Thu, 24 Oct 2019 21:19:36 +0200 Subject: [PATCH 1/2] display: Move finishing of touch sequence to the backend @@ -211,7 +211,7 @@ index e3b702f56..1313aad6d 100644 2.23.0 -From 75cf52ac533675ecf5d3542e9fba2937a56bfefd Mon Sep 17 00:00:00 2001 +From 651a45057bce8d1dd8d493d1f6a0486e04d6571b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 25 Oct 2019 10:06:55 +0200 Subject: [PATCH 2/2] x11: Limit touch replay pointer events to when replaying @@ -246,11 +246,11 @@ as in those situations, we'll always have a relatively up to date https://gitlab.gnome.org/GNOME/mutter/merge_requests/886 --- - src/backends/x11/meta-backend-x11.c | 71 +++++++++++++++++++++++------ - 1 file changed, 58 insertions(+), 13 deletions(-) + src/backends/x11/meta-backend-x11.c | 67 +++++++++++++++++++++++------ + 1 file changed, 54 insertions(+), 13 deletions(-) diff --git a/src/backends/x11/meta-backend-x11.c b/src/backends/x11/meta-backend-x11.c -index 2835d47d6..3f8645e93 100644 +index 2835d47d6..7b8ff1b94 100644 --- a/src/backends/x11/meta-backend-x11.c +++ b/src/backends/x11/meta-backend-x11.c @@ -60,6 +60,10 @@ struct _MetaBackendX11Private @@ -351,25 +351,28 @@ index 2835d47d6..3f8645e93 100644 } static ClutterBackend * -@@ -603,6 +633,21 @@ meta_backend_x11_finish_touch_sequence (MetaBackend *backend, +@@ -591,6 +621,7 @@ meta_backend_x11_finish_touch_sequence (MetaBackend *backend, + MetaBackendX11 *x11 = META_BACKEND_X11 (backend); + MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11); + int event_mode; ++ XClientMessageEvent ev; + + if (state == META_SEQUENCE_ACCEPTED) + event_mode = XIAcceptTouch; +@@ -603,6 +634,16 @@ meta_backend_x11_finish_touch_sequence (MetaBackend *backend, META_VIRTUAL_CORE_POINTER_ID, clutter_x11_event_sequence_get_touch_detail (sequence), DefaultRootWindow (priv->xdisplay), event_mode); + -+ if (state == META_SEQUENCE_REJECTED) -+ { -+ XClientMessageEvent ev; -+ -+ ev = (XClientMessageEvent) { -+ .type = ClientMessage, -+ .window = meta_backend_x11_get_xwindow (x11), -+ .message_type = priv->touch_replay_sync_atom, -+ .format = 32, -+ .data.l[0] = ++priv->pending_touch_replay_sync_serial, -+ }; -+ XSendEvent (priv->xdisplay, meta_backend_x11_get_xwindow (x11), -+ False, 0, (XEvent *) &ev); -+ } ++ ev = (XClientMessageEvent) { ++ .type = ClientMessage, ++ .window = meta_backend_x11_get_xwindow (x11), ++ .message_type = priv->touch_replay_sync_atom, ++ .format = 32, ++ .data.l[0] = ++priv->pending_touch_replay_sync_serial, ++ }; ++ XSendEvent (priv->xdisplay, meta_backend_x11_get_xwindow (x11), ++ False, 0, (XEvent *) &ev); } static void diff --git a/SOURCES/more-performance-backports.patch b/SOURCES/more-performance-backports.patch deleted file mode 100644 index 17db38d..0000000 --- a/SOURCES/more-performance-backports.patch +++ /dev/null @@ -1,186 +0,0 @@ -From f86e33e1ea32c4208809e8de33bed05ddbce9a4c Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Sun, 7 May 2017 03:00:10 +0200 -Subject: [PATCH 1/3] compositor: Avoid changing pipeline/source if shadow is - not being painted - -Avoids some context invalidations in cogl. - -https://bugzilla.gnome.org/show_bug.cgi?id=782344 ---- - src/compositor/meta-shadow-factory.c | 15 ++++++++++++--- - 1 file changed, 12 insertions(+), 3 deletions(-) - -diff --git a/src/compositor/meta-shadow-factory.c b/src/compositor/meta-shadow-factory.c -index cd006008b..19147ca9f 100644 ---- a/src/compositor/meta-shadow-factory.c -+++ b/src/compositor/meta-shadow-factory.c -@@ -220,9 +220,7 @@ meta_shadow_paint (MetaShadow *shadow, - int dest_x[4]; - int dest_y[4]; - int n_x, n_y; -- -- cogl_pipeline_set_color4ub (shadow->pipeline, -- opacity, opacity, opacity, opacity); -+ gboolean source_updated = FALSE; - - cogl_set_source (shadow->pipeline); - -@@ -300,6 +298,17 @@ meta_shadow_paint (MetaShadow *shadow, - else - overlap = CAIRO_REGION_OVERLAP_IN; - -+ if (overlap == CAIRO_REGION_OVERLAP_OUT) -+ continue; -+ -+ if (!source_updated) -+ { -+ cogl_pipeline_set_color4ub (shadow->pipeline, -+ opacity, opacity, opacity, opacity); -+ cogl_set_source (shadow->pipeline); -+ source_updated = TRUE; -+ } -+ - /* There's quite a bit of overhead from allocating a new - * region in order to find an exact intersection and - * generating more geometry - we make the assumption that --- -2.23.0 - - -From f530bc4c3391cabe2b084cd59def00d81c13286c Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Fri, 5 May 2017 14:15:30 +0200 -Subject: [PATCH 2/3] clutter: Avoid rounding compensation when invalidating 2D - actors - -This allows the redraw clip to be more constrained, so MetaCullable doesn't -end up rendering portions of window shadows, frame and background when a -window invalidates (part of) its contents. - -https://bugzilla.gnome.org/show_bug.cgi?id=782344 ---- - clutter/clutter/clutter-paint-volume.c | 15 +++++++++++++++ - 1 file changed, 15 insertions(+) - -diff --git a/clutter/clutter/clutter-paint-volume.c b/clutter/clutter/clutter-paint-volume.c -index b48f7f9d6..f3405138b 100644 ---- a/clutter/clutter/clutter-paint-volume.c -+++ b/clutter/clutter/clutter-paint-volume.c -@@ -1166,6 +1166,21 @@ _clutter_paint_volume_get_stage_paint_box (ClutterPaintVolume *pv, - - _clutter_paint_volume_get_bounding_box (&projected_pv, box); - -+ if (pv->is_2d && pv->actor && -+ clutter_actor_get_z_position (pv->actor) == 0) -+ { -+ /* If the volume/actor are perfectly 2D, take the bounding box as -+ * good. We won't need to add any extra room for sub-pixel positioning -+ * in this case. -+ */ -+ clutter_paint_volume_free (&projected_pv); -+ box->x1 = CLUTTER_NEARBYINT (box->x1); -+ box->y1 = CLUTTER_NEARBYINT (box->y1); -+ box->x2 = CLUTTER_NEARBYINT (box->x2); -+ box->y2 = CLUTTER_NEARBYINT (box->y2); -+ return; -+ } -+ - /* The aim here is that for a given rectangle defined with floating point - * coordinates we want to determine a stable quantized size in pixels - * that doesn't vary due to the original box's sub-pixel position. --- -2.23.0 - - -From 676369000658c6121d0c3b5e1286aa68dc79eb35 Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Mon, 8 May 2017 15:10:58 +0200 -Subject: [PATCH 3/3] cogl: Ensure to only clear the depth buffer if depth - testing is enabled - -The depth buffer is marked as invalid when 1) the framebuffer is just created, -and 2) whenever GL_DEPTH_TEST is enabled on it. This will ensure the -framebuffers attached depth buffer (if any) is properly cleared before it's -actually used, while saving needless clears while depth testing is disabled -(the default). - -https://bugzilla.gnome.org/show_bug.cgi?id=782344 ---- - cogl/cogl/cogl-framebuffer-private.h | 5 +++++ - cogl/cogl/cogl-framebuffer.c | 11 +++++++++++ - cogl/cogl/driver/gl/cogl-pipeline-opengl.c | 6 +++++- - 3 files changed, 21 insertions(+), 1 deletion(-) - -diff --git a/cogl/cogl/cogl-framebuffer-private.h b/cogl/cogl/cogl-framebuffer-private.h -index 99ac2fba9..756e34dfe 100644 ---- a/cogl/cogl/cogl-framebuffer-private.h -+++ b/cogl/cogl/cogl-framebuffer-private.h -@@ -193,6 +193,11 @@ struct _CoglFramebuffer - CoglFramebufferBits bits; - - int samples_per_pixel; -+ -+ /* Whether the depth buffer was enabled for this framebuffer, -+ * usually means it needs to be cleared before being reused next. -+ */ -+ CoglBool depth_buffer_clear_needed; - }; - - typedef enum { -diff --git a/cogl/cogl/cogl-framebuffer.c b/cogl/cogl/cogl-framebuffer.c -index 55b9e3756..6b105087d 100644 ---- a/cogl/cogl/cogl-framebuffer.c -+++ b/cogl/cogl/cogl-framebuffer.c -@@ -117,6 +117,7 @@ _cogl_framebuffer_init (CoglFramebuffer *framebuffer, - framebuffer->viewport_age_for_scissor_workaround = -1; - framebuffer->dither_enabled = TRUE; - framebuffer->depth_writing_enabled = TRUE; -+ framebuffer->depth_buffer_clear_needed = TRUE; - - framebuffer->modelview_stack = cogl_matrix_stack_new (ctx); - framebuffer->projection_stack = cogl_matrix_stack_new (ctx); -@@ -268,6 +269,13 @@ cogl_framebuffer_clear4f (CoglFramebuffer *framebuffer, - int scissor_y1; - CoglBool saved_viewport_scissor_workaround; - -+ if (!framebuffer->depth_buffer_clear_needed && -+ (buffers & COGL_BUFFER_BIT_DEPTH)) -+ buffers &= ~(COGL_BUFFER_BIT_DEPTH); -+ -+ if (buffers == 0) -+ return; -+ - _cogl_clip_stack_get_bounds (clip_stack, - &scissor_x0, &scissor_y0, - &scissor_x1, &scissor_y1); -@@ -415,6 +423,9 @@ cleared: - _cogl_framebuffer_mark_mid_scene (framebuffer); - _cogl_framebuffer_mark_clear_clip_dirty (framebuffer); - -+ if (buffers & COGL_BUFFER_BIT_DEPTH) -+ framebuffer->depth_buffer_clear_needed = FALSE; -+ - if (buffers & COGL_BUFFER_BIT_COLOR && buffers & COGL_BUFFER_BIT_DEPTH) - { - /* For our fast-path for reading back a single pixel of simple -diff --git a/cogl/cogl/driver/gl/cogl-pipeline-opengl.c b/cogl/cogl/driver/gl/cogl-pipeline-opengl.c -index 178269646..4f1f69f96 100644 ---- a/cogl/cogl/driver/gl/cogl-pipeline-opengl.c -+++ b/cogl/cogl/driver/gl/cogl-pipeline-opengl.c -@@ -418,7 +418,11 @@ flush_depth_state (CoglContext *ctx, - if (ctx->depth_test_enabled_cache != depth_state->test_enabled) - { - if (depth_state->test_enabled == TRUE) -- GE (ctx, glEnable (GL_DEPTH_TEST)); -+ { -+ GE (ctx, glEnable (GL_DEPTH_TEST)); -+ if (ctx->current_draw_buffer) -+ ctx->current_draw_buffer->depth_buffer_clear_needed = TRUE; -+ } - else - GE (ctx, glDisable (GL_DEPTH_TEST)); - ctx->depth_test_enabled_cache = depth_state->test_enabled; --- -2.23.0 - diff --git a/SPECS/mutter.spec b/SPECS/mutter.spec index efaedff..39885de 100644 --- a/SPECS/mutter.spec +++ b/SPECS/mutter.spec @@ -10,7 +10,7 @@ Name: mutter Version: 3.28.3 -Release: 20%{?dist} +Release: 15%{?dist} Summary: Window and compositing manager based on Clutter License: GPLv2+ @@ -49,9 +49,6 @@ Patch32: 0001-clutter-Do-not-latch-modifiers-on-modifier-keys.patch # Prevent titlebar from going off-screen (rhbz#1664407) Patch33: 0001-constraints-Fix-titlebars-going-off-the-bottom.patch -# Classic classic mode support -Patch34: 0001-screen-Expose-workspace-layout-properties.patch - # el7 patches Patch100: 0001-Revert-build-Require-libgudev-232.patch Patch101: 0001-rhel7-Fix-build-for-el7.patch @@ -81,36 +78,22 @@ Patch262: 0002-monitor-manager-xrandr-Create-dummy-screen-sized-mon.patch Patch270: 0001-idle-monitor-Use-G_SOURCE_CONTINUE-instead-of-TRUE.patch Patch271: 0002-idle-monitor-Postpone-dispatching-of-idle-timeout-if.patch -# Fix crash in meta_monitor_mode_get_resolution() (#1638727) -Patch272: 0001-monitor-Use-current-monitor-mode-to-check-whether-ac.patch -Patch273: 0002-window-Return-1-if-meta_window_get_monitor-is-called.patch - -# Fix crash on device removal (#1578186) -Patch274: 0001-clutter-input-device-xi2-Check-for-null-group_modes-.patch - -# Backport two performance improvement patches (#1737515) -Patch275: 0001-compositor-Don-t-emit-size-changed-when-only-positio.patch -Patch276: 0002-clutter-Avoid-relayouts-when-raising-lowering-childr.patch - -# Backport window title encoding bug fixes (#1630686) -Patch277: 0001-x11-window-props-Do-not-convert-WM_NAME.patch -Patch278: 0002-xprops-Make-sure-text_property_to_utf8-returns-UTF8.patch - -# Don't loose pointer button grabs (#1657887) -Patch279: 0001-events-Sync-pending-pointer-events-without-a-window.patch +# Don't loose pointer button grabs (#1756263) +Patch272: 0001-events-Sync-pending-pointer-events-without-a-window.patch -# Don't freeze if input happens after many days of inactivity (#1728761) -Patch280: input-after-long-idle-fix.patch +# Fix crash in meta_monitor_mode_get_resolution() (#1760738) +Patch273: 0001-monitor-Use-current-monitor-mode-to-check-whether-ac.patch +Patch274: 0002-window-Return-1-if-meta_window_get_monitor-is-called.patch -# More performance backports (#1766501) -Patch281: more-performance-backports.patch - -# Fix invalid read in idle monitor (#1752378) -Patch282: idle-monitor-reset-fix.patch +# Don't freeze if input happens after many days of inactivity (#1778212) +Patch275: input-after-long-idle-fix.patch # Prevent orphaned animation actors getting stuck on screen (#1753799) Patch 283: 0001-window-free-close-dialog-before-unmanaging-window-fr.patch +# Add PING_TIMEOUT_DELAY to mutter MetaPreferences (#1809162) +Patch284: 0001-display-Make-check-alive-timeout-configureable.patch + BuildRequires: chrpath BuildRequires: pango-devel BuildRequires: startup-notification-devel @@ -266,45 +249,25 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || : %{_libdir}/pkgconfig/* %changelog -* Tue Dec 03 2019 Florian Müllner - 3.28.3-20 -- Free close dialog before unmanaging parent - Related: #1753799 - -* Tue Oct 29 2019 Jonas Ådahl ) - 3.28.3-19 -- Fix invalid read in idle monitor - Resolves: #1752378 +* Wed Mar 05 2020 Jonas Ådahl - 3.28.3-15 +- Add PING_TIMEOUT_DELAY to mutter MetaPreferences + Resolves: #1809162 -* Tue Oct 29 2019 Jonas Ådahl ) - 3.28.3-18 -- More performance backports - Resolves: #1766501 +* Thu Dec 12 2019 Florian Müllner - 3.28.3-14 +- Free close dialog before unmanaging parent + Related: #1780030 -* Tue Oct 29 2019 Jonas Ådahl ) - 3.28.3-17 +* Tue Dec 03 2019 Jonas Ådahl - 3.28.3-13 - Don't freeze if input happens after many days of inactivity - Resolves: #1728761 - -* Wed Oct 02 2019 Jonas Ådahl ) - 3.28.3-16 -- Don't loose pointer button grabs - Resolves: #1657887 - -* Sun Aug 25 2019 Florian MÜllner - 3.28.3-15 -- Expose workspace layout as properties - Related: #1720286 - -* Thu Aug 15 2019 Jonas Ådahl - 3.28.3-14 -- Backport window title encoding bug fixes - Resolves: #1630686 + Resolves: #1778212 -* Mon Aug 12 2019 Jonas Ådahl - 3.28.3-13 -- Backport two performance improvement patches. - Resolves #1737515 - -* Wed Aug 07 2019 Carlos garnacho - 3.28.3-12 -- Fix crash on input device removal - Resolves: #1578186 - -* Mon Aug 05 2019 Jonas Ådahl - 3.28.3-11 +* Fri Oct 11 2019 Jonas Ådahl - 3.28.3-12 - Fix crash in meta_monitor_mode_get_resolution() - Resolves #1638727 + Resolves #1760738 + +* Wed Oct 02 2019 Jonas Ådahl ) - 3.28.3-11 +- Don't loose pointer button grabs + Resolves: #1756263 * Wed Apr 17 2019 Jonas Ådahl - 3.28.3-10 - Fix idle monitor race condition