Marco Trevisan (Treviño) has proposed merging ~3v1n0/ubuntu/+source/mutter:ubuntu/bionic into ~ubuntu-desktop/ubuntu/+source/mutter:ubuntu/bionic with ~3v1n0/ubuntu/+source/mutter:upstream/3.28.x as a prerequisite.
Requested reviews: Ubuntu Desktop (ubuntu-desktop) For more details, see: https://code.launchpad.net/~3v1n0/ubuntu/+source/mutter/+git/mutter/+merge/361811 -- Your team Ubuntu Desktop is requested to review the proposed merge of ~3v1n0/ubuntu/+source/mutter:ubuntu/bionic into ~ubuntu-desktop/ubuntu/+source/mutter:ubuntu/bionic.
diff --git a/debian/changelog b/debian/changelog index 360eba4..07fdbda 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,21 @@ +mutter (3.28.3+git20181011~ubuntu18.04.3) UNRELEASED; urgency=medium + + * New upstream git snapshot based on 3.28.3 plus commits up to 1b78ca8c5 + (LP: #1811900, LP: #1765269, LP: #1790525, LP: #1795774) + * d/p/gpu-kms-Don-t-crash-if-drmModeGetResources-returns-N.patch, + d/p/native-gpu-Handle-drmModeSetCrtc-failing-gracefully.patch, + d/p/monitor-manager-Filter-out-low-screen-resolutions.patch, + d/p/window-wayland-Always-update-monitor-for-non-user-ops.patch, + d/p/window-Don-t-refuse-to-move-focus-to-the-grab-window.patch, + d/p/window-Explicitly-exclude-unmanaging-window-from-focus-ag.patch, + d/p/monitor-Use-current-monitor-mode-to-check-whether-active.patch, + d/p/core-Return-1-if-meta_window_get_monitor-is-called-on-an-.patch, + d/p/renderer-native-Fallback-to-non-planar-API-if-gbm_bo_get_.patch, + d/p/clutter-x11-Implement-keycode-lookup-from-keysyms-on-virt.patch: + - Removed as applied upstream + + -- Marco Trevisan (Treviño) <ma...@ubuntu.com> Tue, 15 Jan 2019 23:33:23 +0100 + mutter (3.28.3-2~ubuntu18.04.2) bionic; urgency=medium * d/p/renderer-native-Fallback-to-non-planar-API-if-gbm_bo_get_.patch: diff --git a/debian/patches/bgo768531_workaround-startup-notifications.patch b/debian/patches/bgo768531_workaround-startup-notifications.patch index bc6b697..26ac823 100644 --- a/debian/patches/bgo768531_workaround-startup-notifications.patch +++ b/debian/patches/bgo768531_workaround-startup-notifications.patch @@ -16,10 +16,10 @@ Applied-upstream: no 1 file changed, 10 insertions(+) diff --git a/src/wayland/meta-wayland-gtk-shell.c b/src/wayland/meta-wayland-gtk-shell.c -index 0ef9b83..891109a 100644 +index 474595b..5837567 100644 --- a/src/wayland/meta-wayland-gtk-shell.c +++ b/src/wayland/meta-wayland-gtk-shell.c -@@ -312,11 +312,21 @@ gtk_shell_set_startup_id (struct wl_client *client, +@@ -321,11 +321,21 @@ gtk_shell_set_startup_id (struct wl_client *client, struct wl_resource *resource, const char *startup_id) { diff --git a/debian/patches/clutter-x11-Implement-keycode-lookup-from-keysyms-on-virt.patch b/debian/patches/clutter-x11-Implement-keycode-lookup-from-keysyms-on-virt.patch deleted file mode 100644 index ccb4263..0000000 --- a/debian/patches/clutter-x11-Implement-keycode-lookup-from-keysyms-on-virt.patch +++ /dev/null @@ -1,316 +0,0 @@ -From: Carlos Garnacho <carl...@gnome.org> -Date: Fri, 29 Jun 2018 14:31:23 +0200 -Subject: clutter/x11: Implement keycode lookup from keysyms on virtual key - devices - -Unfortunately XKeysymToKeycode() falls short in that it coalesces keysyms -into keycodes pertaining to the first level (i.e. lowercase). Add a -ClutterKeymapX11 method (much alike its GdkKeymap counterpart) to look up -all matches for the given keysym. - -Two other helper methods have been added so the virtual device can fetch -the current keyboard group, and latch modifiers for key emission. Combining -all this, the virtual device is now able to handle keycodes in further -levels. - -Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/135 - -(cherry picked from commit 85284acb000ddc70afcf716b6c198b4b5bf5741e) - -Ubuntu-Bug: https://bugs.launchpad.net/oem-priority/+bug/1730211 -Applied-Upstream: yes, 3.28.4 ---- - clutter/clutter/x11/clutter-keymap-x11.c | 178 ++++++++++++++++++++- - clutter/clutter/x11/clutter-keymap-x11.h | 8 + - .../clutter/x11/clutter-virtual-input-device-x11.c | 22 ++- - 3 files changed, 204 insertions(+), 4 deletions(-) - -diff --git a/clutter/clutter/x11/clutter-keymap-x11.c b/clutter/clutter/x11/clutter-keymap-x11.c -index 914e314..c34e676 100644 ---- a/clutter/clutter/x11/clutter-keymap-x11.c -+++ b/clutter/clutter/x11/clutter-keymap-x11.c -@@ -38,6 +38,14 @@ - - typedef struct _ClutterKeymapX11Class ClutterKeymapX11Class; - typedef struct _DirectionCacheEntry DirectionCacheEntry; -+typedef struct _ClutterKeymapKey ClutterKeymapKey; -+ -+struct _ClutterKeymapKey -+{ -+ guint keycode; -+ guint group; -+ guint level; -+}; - - struct _DirectionCacheEntry - { -@@ -59,6 +67,7 @@ struct _ClutterKeymapX11 - - ClutterModifierType num_lock_mask; - ClutterModifierType scroll_lock_mask; -+ ClutterModifierType level3_shift_mask; - - PangoDirection current_direction; - -@@ -69,6 +78,7 @@ struct _ClutterKeymapX11 - Atom current_group_atom; - guint current_cache_serial; - DirectionCacheEntry group_direction_cache[4]; -+ int current_group; - #endif - - guint caps_lock_state : 1; -@@ -198,6 +208,9 @@ get_xkb (ClutterKeymapX11 *keymap_x11) - if (keymap_x11->scroll_lock_mask == 0) - keymap_x11->scroll_lock_mask = XkbKeysymToModifiers (backend_x11->xdpy, - XK_Scroll_Lock); -+ if (keymap_x11->level3_shift_mask == 0) -+ keymap_x11->level3_shift_mask = XkbKeysymToModifiers (backend_x11->xdpy, -+ XK_ISO_Level3_Shift); - - return keymap_x11->xkb_desc; - } -@@ -469,6 +482,7 @@ static void - clutter_keymap_x11_init (ClutterKeymapX11 *keymap) - { - keymap->current_direction = PANGO_DIRECTION_NEUTRAL; -+ keymap->current_group = -1; - } - - static ClutterTranslateReturn -@@ -498,7 +512,8 @@ clutter_keymap_x11_translate_event (ClutterEventTranslator *translator, - { - case XkbStateNotify: - CLUTTER_NOTE (EVENT, "Updating keyboard state"); -- update_direction (keymap_x11, XkbStateGroup (&xkb_event->state)); -+ keymap_x11->current_group = XkbStateGroup (&xkb_event->state); -+ update_direction (keymap_x11, keymap_x11->current_group); - update_locked_mods (keymap_x11, xkb_event->state.locked_mods); - retval = CLUTTER_TRANSLATE_REMOVE; - break; -@@ -665,3 +680,164 @@ _clutter_keymap_x11_get_direction (ClutterKeymapX11 *keymap) - #endif - return PANGO_DIRECTION_NEUTRAL; - } -+ -+static gboolean -+clutter_keymap_x11_get_entries_for_keyval (ClutterKeymapX11 *keymap_x11, -+ guint keyval, -+ ClutterKeymapKey **keys, -+ gint *n_keys) -+{ -+#ifdef HAVE_XKB -+ if (CLUTTER_BACKEND_X11 (keymap_x11->backend)->use_xkb) -+ { -+ XkbDescRec *xkb = get_xkb (keymap_x11); -+ GArray *retval; -+ gint keycode; -+ -+ keycode = keymap_x11->min_keycode; -+ retval = g_array_new (FALSE, FALSE, sizeof (ClutterKeymapKey)); -+ -+ while (keycode <= keymap_x11->max_keycode) -+ { -+ gint max_shift_levels = XkbKeyGroupsWidth (xkb, keycode); -+ gint group = 0; -+ gint level = 0; -+ gint total_syms = XkbKeyNumSyms (xkb, keycode); -+ gint i = 0; -+ KeySym *entry; -+ -+ /* entry is an array with all syms for group 0, all -+ * syms for group 1, etc. and for each group the -+ * shift level syms are in order -+ */ -+ entry = XkbKeySymsPtr (xkb, keycode); -+ -+ while (i < total_syms) -+ { -+ g_assert (i == (group * max_shift_levels + level)); -+ -+ if (entry[i] == keyval) -+ { -+ ClutterKeymapKey key; -+ -+ key.keycode = keycode; -+ key.group = group; -+ key.level = level; -+ -+ g_array_append_val (retval, key); -+ -+ g_assert (XkbKeySymEntry (xkb, keycode, level, group) == -+ keyval); -+ } -+ -+ ++level; -+ -+ if (level == max_shift_levels) -+ { -+ level = 0; -+ ++group; -+ } -+ -+ ++i; -+ } -+ -+ ++keycode; -+ } -+ -+ if (retval->len > 0) -+ { -+ *keys = (ClutterKeymapKey*) retval->data; -+ *n_keys = retval->len; -+ } -+ else -+ { -+ *keys = NULL; -+ *n_keys = 0; -+ } -+ -+ g_array_free (retval, retval->len > 0 ? FALSE : TRUE); -+ -+ return *n_keys > 0; -+ } -+ else -+#endif -+ { -+ return FALSE; -+ } -+} -+ -+void -+clutter_keymap_x11_latch_modifiers (ClutterKeymapX11 *keymap_x11, -+ uint32_t level, -+ gboolean enable) -+{ -+#ifdef HAVE_XKB -+ ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (keymap_x11->backend); -+ uint32_t modifiers[] = { -+ 0, -+ ShiftMask, -+ keymap_x11->level3_shift_mask, -+ keymap_x11->level3_shift_mask | ShiftMask, -+ }; -+ uint32_t value = 0; -+ -+ if (!backend_x11->use_xkb) -+ return; -+ -+ level = CLAMP (level, 0, G_N_ELEMENTS (modifiers) - 1); -+ -+ if (enable) -+ value = modifiers[level]; -+ else -+ value = 0; -+ -+ XkbLatchModifiers (clutter_x11_get_default_display (), -+ XkbUseCoreKbd, modifiers[level], -+ value); -+#endif -+} -+ -+static uint32_t -+clutter_keymap_x11_get_current_group (ClutterKeymapX11 *keymap_x11) -+{ -+ ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (keymap_x11->backend); -+ XkbStateRec state_rec; -+ -+ if (keymap_x11->current_group >= 0) -+ return keymap_x11->current_group; -+ -+ XkbGetState (backend_x11->xdpy, XkbUseCoreKbd, &state_rec); -+ return XkbStateGroup (&state_rec); -+} -+ -+gboolean -+clutter_keymap_x11_keycode_for_keyval (ClutterKeymapX11 *keymap_x11, -+ guint keyval, -+ guint *keycode_out, -+ guint *level_out) -+{ -+ ClutterKeymapKey *keys; -+ gint i, n_keys, group; -+ gboolean found = FALSE; -+ -+ g_return_val_if_fail (keycode_out != NULL, FALSE); -+ g_return_val_if_fail (level_out != NULL, FALSE); -+ -+ group = clutter_keymap_x11_get_current_group (keymap_x11); -+ -+ if (!clutter_keymap_x11_get_entries_for_keyval (keymap_x11, keyval, &keys, &n_keys)) -+ return FALSE; -+ -+ for (i = 0; i < n_keys && !found; i++) -+ { -+ if (keys[i].group == group) -+ { -+ *keycode_out = keys[i].keycode; -+ *level_out = keys[i].level; -+ found = TRUE; -+ } -+ } -+ -+ g_free (keys); -+ return found; -+} -diff --git a/clutter/clutter/x11/clutter-keymap-x11.h b/clutter/clutter/x11/clutter-keymap-x11.h -index ad673a2..4b5b403 100644 ---- a/clutter/clutter/x11/clutter-keymap-x11.h -+++ b/clutter/clutter/x11/clutter-keymap-x11.h -@@ -51,6 +51,14 @@ gboolean _clutter_keymap_x11_get_is_modifier (ClutterKeymapX11 *keymap, - - PangoDirection _clutter_keymap_x11_get_direction (ClutterKeymapX11 *keymap); - -+gboolean clutter_keymap_x11_keycode_for_keyval (ClutterKeymapX11 *keymap_x11, -+ guint keyval, -+ guint *keycode_out, -+ guint *level_out); -+void clutter_keymap_x11_latch_modifiers (ClutterKeymapX11 *keymap_x11, -+ uint32_t level, -+ gboolean enable); -+ - G_END_DECLS - - #endif /* __CLUTTER_KEYMAP_X11_H__ */ -diff --git a/clutter/clutter/x11/clutter-virtual-input-device-x11.c b/clutter/clutter/x11/clutter-virtual-input-device-x11.c -index 416c944..b86ded0 100644 ---- a/clutter/clutter/x11/clutter-virtual-input-device-x11.c -+++ b/clutter/clutter/x11/clutter-virtual-input-device-x11.c -@@ -32,6 +32,8 @@ - - #include "clutter-virtual-input-device.h" - #include "x11/clutter-virtual-input-device-x11.h" -+#include "x11/clutter-backend-x11.h" -+#include "x11/clutter-keymap-x11.h" - - struct _ClutterVirtualInputDeviceX11 - { -@@ -135,11 +137,25 @@ clutter_virtual_input_device_x11_notify_keyval (ClutterVirtualInputDevice *virtu - uint32_t keyval, - ClutterKeyState key_state) - { -- KeyCode keycode; -+ ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (clutter_get_default_backend ()); -+ ClutterKeymapX11 *keymap = backend_x11->keymap; -+ uint32_t keycode, level; -+ -+ if (!clutter_keymap_x11_keycode_for_keyval (keymap, keyval, &keycode, &level)) -+ { -+ g_warning ("No keycode found for keyval %x in current group", keyval); -+ return; -+ } -+ -+ if (key_state == CLUTTER_KEY_STATE_PRESSED) -+ clutter_keymap_x11_latch_modifiers (keymap, level, TRUE); - -- keycode = XKeysymToKeycode (clutter_x11_get_default_display (), keyval); - XTestFakeKeyEvent (clutter_x11_get_default_display (), -- keycode, key_state == CLUTTER_KEY_STATE_PRESSED, 0); -+ (KeyCode) keycode, -+ key_state == CLUTTER_KEY_STATE_PRESSED, 0); -+ -+ if (key_state == CLUTTER_KEY_STATE_RELEASED) -+ clutter_keymap_x11_latch_modifiers (keymap, level, FALSE); - } - - static void diff --git a/debian/patches/core-Return-1-if-meta_window_get_monitor-is-called-on-an-.patch b/debian/patches/core-Return-1-if-meta_window_get_monitor-is-called-on-an-.patch deleted file mode 100644 index 171c91a..0000000 --- a/debian/patches/core-Return-1-if-meta_window_get_monitor-is-called-on-an-.patch +++ /dev/null @@ -1,39 +0,0 @@ -From: Sam Spilsbury <s...@endlessm.com> -Date: Tue, 10 Oct 2017 11:39:40 -0500 -Subject: core: Return -1 if meta_window_get_monitor is called on an unmanaged - window - -As opposed to crashing. In this case, letting the caller deal with -it is the best policy, since this is public API. - -Fixes #78834 - -Forwarded: yes -Bug: https://bugzilla.gnome.org/show_bug.cgi?id=788834 -Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/bionic/+source/gnome-shell/+bug/1724439 ---- - src/core/window.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/src/core/window.c b/src/core/window.c -index cc0813a..f9094a3 100644 ---- a/src/core/window.c -+++ b/src/core/window.c -@@ -3752,11 +3752,16 @@ maybe_move_attached_dialog (MetaWindow *window, - * - * Gets index of the monitor that this window is on. - * -- * Return Value: The index of the monitor in the screens monitor list -+ * Return Value: The index of the monitor in the screens monitor list, or -1 -+ * if the window has been recently unmanaged and does not have -+ * a monitor. - */ - int - meta_window_get_monitor (MetaWindow *window) - { -+ if (!window->monitor) -+ return -1; -+ - return window->monitor->number; - } - diff --git a/debian/patches/gpu-kms-Don-t-crash-if-drmModeGetResources-returns-N.patch b/debian/patches/gpu-kms-Don-t-crash-if-drmModeGetResources-returns-N.patch deleted file mode 100644 index 9bc47f9..0000000 --- a/debian/patches/gpu-kms-Don-t-crash-if-drmModeGetResources-returns-N.patch +++ /dev/null @@ -1,37 +0,0 @@ -From: Aaron Plattner <aplatt...@nvidia.com> -Date: Thu, 19 Jul 2018 10:51:34 -0700 -Subject: gpu-kms: Don't crash if drmModeGetResources returns NULL - -DRM drivers can be opened by meta_launcher_open_restricted() even if they don't -implement modesetting. However, drmModeGetResources() will return NULL. - -Check whether that happened in meta_gpu_kms_new() and return with an error -instead of crashing. - -Fixes #223. - -Applied-Upstream: https://gitlab.gnome.org/GNOME/mutter/commit/62660bbd15 -Bug-GNOME: https://gitlab.gnome.org/GNOME/mutter/issues/223 -Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1767956 ---- - src/backends/native/meta-gpu-kms.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/src/backends/native/meta-gpu-kms.c b/src/backends/native/meta-gpu-kms.c -index 613a607..259cd71 100644 ---- a/src/backends/native/meta-gpu-kms.c -+++ b/src/backends/native/meta-gpu-kms.c -@@ -801,6 +801,13 @@ meta_gpu_kms_new (MetaMonitorManagerKms *monitor_manager_kms, - */ - drm_resources = drmModeGetResources (kms_fd); - -+ if (!drm_resources) -+ { -+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "No resources"); -+ meta_launcher_close_restricted (launcher, kms_fd); -+ return NULL; -+ } -+ - n_connectors = drm_resources->count_connectors; - - drmModeFreeResources (drm_resources); diff --git a/debian/patches/monitor-Use-current-monitor-mode-to-check-whether-active.patch b/debian/patches/monitor-Use-current-monitor-mode-to-check-whether-active.patch deleted file mode 100644 index 9badb76..0000000 --- a/debian/patches/monitor-Use-current-monitor-mode-to-check-whether-active.patch +++ /dev/null @@ -1,84 +0,0 @@ -From: =?utf-8?q?Jonas_=C3=85dahl?= <jad...@gmail.com> -Date: Tue, 31 Jul 2018 13:18:51 +0200 -Subject: monitor: Use current monitor mode to check whether active - -For historical reasons meta_monitor_is_active() checked whether it is -active by checking whether the main output have a CRTC assigned and -whether that CRTC has a current mode. At a later point, the MetaMonitor -got its own mode abstraction (MetaMonitorMode), but -meta_monitor_is_active() was never updated to use this. - -An issue with checking the main output's CRTC state is that, if there is -some CRTC mode combination that for some reason isn't properly detected -by the MetaMonitorMode abstraction (e.g. some tiling configuration not -yet handled), meta_monitor_is_active() would return TRUE, even though no -(abstracted) mode was set. This would cause confusion here and there, -leading to NULL pointer dereferences due to the assumption that if a -monitor is active, it has an active mode. - -Instead, change meta_monitor_is_active() to directly check the current -monitor mode, and log a warning if the main output still happen to have -a CRTC with a mode assigned to it. This way, when an not undrestood CRTC -mode combination is encountered, instead of dereferencing NULL pointers, -simply assume the monitor is not active, which means that it will not be -managed or rendered by mutter at all. - -https://gitlab.gnome.org/GNOME/mutter/issues/130 - -(cherry picked from commit 4d465eac0806eb1ead375e2852d4a9d6bc24524f) - -Bug-GNOME: https://gitlab.gnome.org/GNOME/mutter/issues/130 -Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1723615 -Applied-Upstream: 3.28.4, commit:https://gitlab.gnome.org/GNOME/mutter/commit/d0d80780 ---- - src/backends/meta-monitor.c | 22 ++++++++++++++++------ - 1 file changed, 16 insertions(+), 6 deletions(-) - -diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c -index 92c61c0..60f3674 100644 ---- a/src/backends/meta-monitor.c -+++ b/src/backends/meta-monitor.c -@@ -203,13 +203,9 @@ meta_monitor_get_main_output (MetaMonitor *monitor) - gboolean - meta_monitor_is_active (MetaMonitor *monitor) - { -- MetaOutput *output; -- MetaCrtc *crtc; -- -- output = meta_monitor_get_main_output (monitor); -- crtc = meta_output_get_assigned_crtc (output); -+ MetaMonitorPrivate *priv = meta_monitor_get_instance_private (monitor); - -- return crtc && crtc->current_mode; -+ return !!priv->current_mode; - } - - gboolean -@@ -1411,6 +1407,18 @@ meta_monitor_get_current_mode (MetaMonitor *monitor) - return priv->current_mode; - } - -+static gboolean -+is_current_mode_known (MetaMonitor *monitor) -+{ -+ MetaOutput *output; -+ MetaCrtc *crtc; -+ -+ output = meta_monitor_get_main_output (monitor); -+ crtc = meta_output_get_assigned_crtc (output); -+ -+ return meta_monitor_is_active (monitor) == (crtc && crtc->current_mode); -+} -+ - void - meta_monitor_derive_current_mode (MetaMonitor *monitor) - { -@@ -1430,6 +1438,8 @@ meta_monitor_derive_current_mode (MetaMonitor *monitor) - } - - priv->current_mode = current_mode; -+ -+ g_warn_if_fail (is_current_mode_known (monitor)); - } - - void diff --git a/debian/patches/monitor-manager-Filter-out-low-screen-resolutions.patch b/debian/patches/monitor-manager-Filter-out-low-screen-resolutions.patch deleted file mode 100644 index f1ae69c..0000000 --- a/debian/patches/monitor-manager-Filter-out-low-screen-resolutions.patch +++ /dev/null @@ -1,90 +0,0 @@ -From: Andrea Azzarone <azzaro...@gmail.com> -Date: Mon, 16 Jul 2018 18:09:40 +0200 -Subject: monitor-manager: Filter out low screen resolutions - -Avoid exporting through org.gnome.Mutter.DisplayConfig.GetCurrentState -excessively-low screen resolutions setting both a minimum width and a minimum -height. GetCurrentState is e.g. used by Gnome Control Center to build a list of -selectable resolutions. - -Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=793223 - -(cherry picked from commit 649c26e05a67c52a4f5acf6b4aa3b1217e9bc9c0) - -Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-control-center/+bug/1772831 -Bug-GNOME: https://bugzilla.gnome.org/show_bug.cgi?id=793223 -Applied-Upstream: 3.28.4, commit:https://gitlab.gnome.org/GNOME/mutter/commit/0c5e61a2a ---- - src/backends/meta-monitor-manager.c | 4 ++++ - src/backends/meta-monitor.c | 19 +++++++++++++++++-- - src/backends/meta-monitor.h | 2 ++ - 3 files changed, 23 insertions(+), 2 deletions(-) - -diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c -index 5bd34ad..c4c1db5 100644 ---- a/src/backends/meta-monitor-manager.c -+++ b/src/backends/meta-monitor-manager.c -@@ -1323,9 +1323,13 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton, - GVariantBuilder mode_properties_builder; - MetaCrtcModeFlag mode_flags; - -+ if (!meta_monitor_mode_should_be_advertised (monitor_mode)) -+ continue; -+ - mode_id = meta_monitor_mode_get_id (monitor_mode); - meta_monitor_mode_get_resolution (monitor_mode, - &mode_width, &mode_height); -+ - refresh_rate = meta_monitor_mode_get_refresh_rate (monitor_mode); - - preferred_scale = -diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c -index 9833066..92c61c0 100644 ---- a/src/backends/meta-monitor.c -+++ b/src/backends/meta-monitor.c -@@ -1553,6 +1553,22 @@ meta_monitor_calculate_mode_scale (MetaMonitor *monitor, - return calculate_scale (monitor, monitor_mode); - } - -+static gboolean -+is_logical_size_large_enough (gint width, gint height) -+{ -+ return width >= MINIMUM_LOGICAL_WIDTH && -+ height >= MINIMUM_LOGICAL_HEIGHT; -+} -+ -+gboolean -+meta_monitor_mode_should_be_advertised (MetaMonitorMode *monitor_mode) -+{ -+ g_return_val_if_fail (monitor_mode != NULL, FALSE); -+ -+ return is_logical_size_large_enough (monitor_mode->spec.width, -+ monitor_mode->spec.height); -+} -+ - static float - get_closest_scale_factor_for_resolution (float width, - float height, -@@ -1573,8 +1589,7 @@ get_closest_scale_factor_for_resolution (float width, - - if (scale < MINIMUM_SCALE_FACTOR || - scale > MAXIMUM_SCALE_FACTOR || -- floorf (scaled_w) < MINIMUM_LOGICAL_WIDTH || -- floorf (scaled_h) < MINIMUM_LOGICAL_HEIGHT) -+ !is_logical_size_large_enough (floorf (scaled_w), floorf (scaled_h))) - goto out; - - if (floorf (scaled_w) == scaled_w && floorf (scaled_h) == scaled_h) -diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h -index bc79778..213ff2c 100644 ---- a/src/backends/meta-monitor.h -+++ b/src/backends/meta-monitor.h -@@ -219,6 +219,8 @@ gboolean meta_monitor_mode_foreach_output (MetaMonitor *monitor, - gpointer user_data, - GError **error); - -+gboolean meta_monitor_mode_should_be_advertised (MetaMonitorMode *monitor_mode); -+ - MetaMonitorSpec * meta_monitor_spec_clone (MetaMonitorSpec *monitor_id); - - gboolean meta_monitor_spec_equals (MetaMonitorSpec *monitor_id, diff --git a/debian/patches/native-gpu-Handle-drmModeSetCrtc-failing-gracefully.patch b/debian/patches/native-gpu-Handle-drmModeSetCrtc-failing-gracefully.patch deleted file mode 100644 index 650a2d8..0000000 --- a/debian/patches/native-gpu-Handle-drmModeSetCrtc-failing-gracefully.patch +++ /dev/null @@ -1,36 +0,0 @@ -From: =?utf-8?q?Jonas_=C3=85dahl?= <jad...@gmail.com> -Date: Tue, 24 Apr 2018 09:26:33 +0000 -Subject: native/gpu: Handle drmModeSetCrtc() failing gracefully - -If drmModeSetCrtc() is called with no fb, mode or connectors for some -CRTC it may still fail, and we should handle that gracefully instead of -assuming it failed to set a non-disabled state. - -Closes https://gitlab.gnome.org/GNOME/mutter/issues/70 - - -(cherry picked from commit 6e953e2725d5d5b10d14c7bd479bd99f6853addc) - -Bug-GNOME: https://gitlab.gnome.org/GNOME/mutter/issues/70 -Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/mutter/+bug/1754949 -Applied-Upstream: https://gitlab.gnome.org/GNOME/mutter/commit/44682a2cc555 ---- - src/backends/native/meta-gpu-kms.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/src/backends/native/meta-gpu-kms.c b/src/backends/native/meta-gpu-kms.c -index 259cd71..1d1c288 100644 ---- a/src/backends/native/meta-gpu-kms.c -+++ b/src/backends/native/meta-gpu-kms.c -@@ -143,7 +143,10 @@ meta_gpu_kms_apply_crtc_mode (MetaGpuKms *gpu_kms, - connectors, n_connectors, - mode) != 0) - { -- g_warning ("Failed to set CRTC mode %s: %m", crtc->current_mode->name); -+ if (mode) -+ g_warning ("Failed to set CRTC mode %s: %m", crtc->current_mode->name); -+ else -+ g_warning ("Failed to disable CRTC"); - g_free (connectors); - return FALSE; - } diff --git a/debian/patches/renderer-native-Fallback-to-non-planar-API-if-gbm_bo_get_.patch b/debian/patches/renderer-native-Fallback-to-non-planar-API-if-gbm_bo_get_.patch deleted file mode 100644 index a25fca3..0000000 --- a/debian/patches/renderer-native-Fallback-to-non-planar-API-if-gbm_bo_get_.patch +++ /dev/null @@ -1,63 +0,0 @@ -From: =?utf-8?q?Alex_Villac=C3=ADs_Lasso?= <a_villa...@palosanto.com> -Date: Fri, 27 Jul 2018 16:08:52 +0000 -Subject: renderer/native: Fallback to non-planar API if - gbm_bo_get_handle_for_plane fails - -Commit c0d9b08ef9bf2be865aad9bf1bc74ba24c655d9f replaced the old GBM API calls -with the multi-plane GBM API. However, the call to gbm_bo_get_handle_for_plane -fails for some DRI drivers (in particular i915). Due to missing error checks, -the subsequent call to drmModeAddFB[2] fails and the screen output locks up. - -This commit adds the missing error checks and falls back to the old GBM API -(non-planar) if necessary. - -v5: test success of gbm_bo_get_handle_for_plane instead of errno - -This commit adopts solution proposed by Daniel van Vugt to check the return -value of gbm_bo_get_handle_for_plane on plane 0 and fall back to old -non-planar method if the call fails. This removes the errno check (for -ENOSYS) that could abort if mesa ever sets a different value. - -Related to: https://gitlab.gnome.org/GNOME/mutter/issues/127 - -(cherry picked from commit f7af32a3eaefabbea3ebbda3a93eff98dd105ab9) - -Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/mutter/+bug/1727356 -Applied-Upstream: yes, 3.28.4 ---- - src/backends/native/meta-renderer-native.c | 21 ++++++++++++++++----- - 1 file changed, 16 insertions(+), 5 deletions(-) - -diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c -index fc6b223..59003b3 100644 ---- a/src/backends/native/meta-renderer-native.c -+++ b/src/backends/native/meta-renderer-native.c -@@ -1607,12 +1607,23 @@ gbm_get_next_fb_id (MetaGpuKms *gpu_kms, - return FALSE; - } - -- for (i = 0; i < gbm_bo_get_plane_count (next_bo); i++) -+ if (gbm_bo_get_handle_for_plane (next_bo, 0).s32 == -1) - { -- strides[i] = gbm_bo_get_stride_for_plane (next_bo, i); -- handles[i] = gbm_bo_get_handle_for_plane (next_bo, i).u32; -- offsets[i] = gbm_bo_get_offset (next_bo, i); -- modifiers[i] = gbm_bo_get_modifier (next_bo); -+ /* Failed to fetch handle to plane, falling back to old method */ -+ strides[0] = gbm_bo_get_stride (next_bo); -+ handles[0] = gbm_bo_get_handle (next_bo).u32; -+ offsets[0] = 0; -+ modifiers[0] = DRM_FORMAT_MOD_INVALID; -+ } -+ else -+ { -+ for (i = 0; i < gbm_bo_get_plane_count (next_bo); i++) -+ { -+ strides[i] = gbm_bo_get_stride_for_plane (next_bo, i); -+ handles[i] = gbm_bo_get_handle_for_plane (next_bo, i).u32; -+ offsets[i] = gbm_bo_get_offset (next_bo, i); -+ modifiers[i] = gbm_bo_get_modifier (next_bo); -+ } - } - - kms_fd = meta_gpu_kms_get_fd (gpu_kms); diff --git a/debian/patches/series b/debian/patches/series index 5bd9ae6..59d31f8 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,17 +1,7 @@ -gpu-kms-Don-t-crash-if-drmModeGetResources-returns-N.patch -native-gpu-Handle-drmModeSetCrtc-failing-gracefully.patch -monitor-manager-Filter-out-low-screen-resolutions.patch -window-wayland-Always-update-monitor-for-non-user-ops.patch -window-Don-t-refuse-to-move-focus-to-the-grab-window.patch -window-Explicitly-exclude-unmanaging-window-from-focus-ag.patch -monitor-Use-current-monitor-mode-to-check-whether-active.patch theme-use-gtk_render_icon_suface-to-paint-button-icon.patch theme-load-icons-as-Gtk-does-with-fallback-and-RTL-suppor.patch clutter-Smooth-out-master-clock-to-smooth-visuals.patch -core-Return-1-if-meta_window_get_monitor-is-called-on-an-.patch bgo768531_workaround-startup-notifications.patch -renderer-native-Fallback-to-non-planar-API-if-gbm_bo_get_.patch -clutter-x11-Implement-keycode-lookup-from-keysyms-on-virt.patch clutter-Do-not-latch-modifiers-on-modifier-keys.patch debian/synaptics-support.patch debian/skip-failing-tests.patch diff --git a/debian/patches/window-Don-t-refuse-to-move-focus-to-the-grab-window.patch b/debian/patches/window-Don-t-refuse-to-move-focus-to-the-grab-window.patch deleted file mode 100644 index ec37087..0000000 --- a/debian/patches/window-Don-t-refuse-to-move-focus-to-the-grab-window.patch +++ /dev/null @@ -1,39 +0,0 @@ -From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuell...@gnome.org> -Date: Fri, 25 May 2018 18:18:23 +0000 -Subject: window: Don't refuse to move focus to the grab window - -We refuse to move focus while a grab operation is in place. While this -generally makes sense, there's no reason why the window that owns the -grab shouldn't be given the regular input focus as well - we pretty -much assume that the grab window is also the focus window anyway. - -In fact there's a strong reason for allowing the focus change here: -If the grab window isn't the focus window, it probably has a modal -transient that is focused instead, and a likely reason for the focus -request is that the transient is being unmanaged and we must move -the focus elsewhere. - -https://gitlab.gnome.org/GNOME/mutter/issues/15 - - -(cherry picked from commit 148da24f9510ebd23d750b8224aa0ab3a549e69e) - -Bug-GNOME: https://gitlab.gnome.org/GNOME/mutter/issues/15 -Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1422253 -Applied-Upstream: 3.28.4, commit:https://gitlab.gnome.org/GNOME/mutter/commit/513cc535 ---- - src/core/window.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/core/window.c b/src/core/window.c -index 743326c..5b1eb5b 100644 ---- a/src/core/window.c -+++ b/src/core/window.c -@@ -4620,6 +4620,7 @@ meta_window_focus (MetaWindow *window, - window->desc, window->input, window->take_focus); - - if (window->display->grab_window && -+ window->display->grab_window != window && - window->display->grab_window->all_keys_grabbed && - !window->display->grab_window->unmanaging) - { diff --git a/debian/patches/window-Explicitly-exclude-unmanaging-window-from-focus-ag.patch b/debian/patches/window-Explicitly-exclude-unmanaging-window-from-focus-ag.patch deleted file mode 100644 index fa98757..0000000 --- a/debian/patches/window-Explicitly-exclude-unmanaging-window-from-focus-ag.patch +++ /dev/null @@ -1,35 +0,0 @@ -From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuell...@gnome.org> -Date: Fri, 25 May 2018 21:24:17 +0200 -Subject: window: Explicitly exclude unmanaging window from focus again - -Since commit b3b9d9e16 we no longer have to pass the unmanaging window -to make sure we don't try to focus it again, however the parameter also -influences the focus policy by giving ancestors preference over the normal -stack order. - -https://gitlab.gnome.org/GNOME/mutter/issues/15 - -(cherry picked from commit d99442d6e6b7c9b383863cc754db609398d4e65b) - -Bug-GNOME: https://gitlab.gnome.org/GNOME/mutter/issues/15 -Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1422253 -Applied-Upstream: 3.28.4, commit:https://gitlab.gnome.org/GNOME/mutter/commit/137f2223 ---- - src/core/window.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/src/core/window.c b/src/core/window.c -index 5b1eb5b..cc0813a 100644 ---- a/src/core/window.c -+++ b/src/core/window.c -@@ -1469,7 +1469,9 @@ meta_window_unmanage (MetaWindow *window, - meta_topic (META_DEBUG_FOCUS, - "Focusing default window since we're unmanaging %s\n", - window->desc); -- meta_workspace_focus_default_window (window->screen->active_workspace, NULL, timestamp); -+ meta_workspace_focus_default_window (window->screen->active_workspace, -+ window, -+ timestamp); - } - else - { diff --git a/debian/patches/window-wayland-Always-update-monitor-for-non-user-ops.patch b/debian/patches/window-wayland-Always-update-monitor-for-non-user-ops.patch deleted file mode 100644 index ce279ed..0000000 --- a/debian/patches/window-wayland-Always-update-monitor-for-non-user-ops.patch +++ /dev/null @@ -1,44 +0,0 @@ -From: Olivier Fourdan <ofour...@redhat.com> -Date: Mon, 18 Jun 2018 12:39:11 +0200 -Subject: window/wayland: Always update monitor for non-user ops - -meta_window_wayland_update_main_monitor() would skip the monitor update -if the difference in scale between the old and the new monitor would -cause another monitor change. - -While this is suitable when the monitor change results from a user -interactively moving the surface between monitors of different scales, -this can leave dangling pointers to freed monitors when this is -triggered by a change of monitor configuration. - -Make sure we update the monitor unconditionally if not from a user -operation. - -Closes: https://gitlab.gnome.org/GNOME/mutter/issues/189 - -(cherry picked from commit a3da4b8d5bd217c0262fd9361036877d155a300f) - -Bug-GNOME: https://gitlab.gnome.org/GNOME/mutter/issues/189 -Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1784398 -Applied-Upstream: 3.28.4, commit:https://gitlab.gnome.org/GNOME/mutter/commit/d74a04606 ---- - src/wayland/meta-window-wayland.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/src/wayland/meta-window-wayland.c b/src/wayland/meta-window-wayland.c -index 705bc49..8bafb25 100644 ---- a/src/wayland/meta-window-wayland.c -+++ b/src/wayland/meta-window-wayland.c -@@ -413,6 +413,12 @@ meta_window_wayland_update_main_monitor (MetaWindow *window, - return; - } - -+ if (!user_op) -+ { -+ window->monitor = to; -+ return; -+ } -+ - from_scale = meta_logical_monitor_get_scale (from); - to_scale = meta_logical_monitor_get_scale (to); -
-- ubuntu-desktop mailing list ubuntu-desktop@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-desktop