Marco Trevisan (Treviño) has proposed merging 
~3v1n0/ubuntu/+source/gnome-shell:ubuntu/bionic into 
~ubuntu-desktop/ubuntu/+source/gnome-shell:ubuntu/bionic.

Requested reviews:
  Ubuntu Desktop (ubuntu-desktop)

For more details, see:
https://code.launchpad.net/~3v1n0/ubuntu/+source/gnome-shell/+git/gnome-shell/+merge/367674

Re-update the changelog as per upstream 3.28.4 version, not major changes a 
part from patches removal.

I didn't added a new changelog entry as still not SRU'ed, so if we beat release 
team...

-- 

I assume pristine-tar and upstream/3.28.x merged in salsa, otherwise get them 
from my lp repo
-- 
Your team Ubuntu Desktop is requested to review the proposed merge of 
~3v1n0/ubuntu/+source/gnome-shell:ubuntu/bionic into 
~ubuntu-desktop/ubuntu/+source/gnome-shell:ubuntu/bionic.
diff --git a/NEWS b/NEWS
index 6e2b0f9..accf3d0 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,30 @@
+3.28.4
+======
+* Fix wrong window positions in overview on wayland [Marco; #776588]
+* overview: Fix handling of confirmation dialogs on wayland [verdre; !180]
+* Avoid some full relayout/redraws [Carlos; !197]
+* Keep workspace switcher slid out when workspaces are in use [Florian; !161]
+* Cancel search on overview hiding [Marco; !205]
+* Fix disappearing network icon [Iain; #140]
+* Improve performance of app icon animations [Daniel; !253]
+* notifications: Support icon theme names in 'image-path' hint [Marco; !285]
+* Avoid focus changes when updating keyboard options [Takao; #391]
+* Fix unresponsive-app dialog blocking input in other windows [Florian; #273]
+* Fix ellipsization in dialog subtitles/bodies [Marco; !531]
+* Misc. bug fixes [Marco, Andrea, Florian, Jasper, Sam, verdre, Jonas,
+  Cosimo, Carlos; #792681, #372, !112, !162, #414, #663461, #788882, #787260,
+  !188, #791233, #602, #632, !305, !286, !314, #781, #693, #618, #430, #799,
+  #783, !293, #298, #1015, #539, #1270]
+
+Contributors:
+  Jonas Ådahl, Andrea Azzarone, Cosimo Cecchi, Takao Fujiwara, Carlos Garnacho,
+  Iain Lane, Florian Müllner, Georges Basile Stavracas Neto, Jasper St. Pierre,
+  Sam Spilsbury, Ray Strode, Will Thompson, Marco Trevisan (Treviño), verdre,
+  Daniel van Vugt
+
+Translators:
+  Marek Černocký [cs]
+
 3.28.3
 ======
 * Fix lagging pointer when zoomed [Daniel; #682013]
diff --git a/debian/changelog b/debian/changelog
index 57eb92d..1e6d367 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,20 +1,21 @@
-gnome-shell (3.28.3+git20190124-0ubuntu18.04.3) bionic; urgency=medium
+gnome-shell (3.28.4-0ubuntu18.04.1) bionic; urgency=medium
 
+  * New upstream stable release
+    - Fix ellipsization in dialog subtitles/bodies (LP: #1809788)
+    - dnd: Only handle touch events in wayland (LP: #1817020)
+    - windowManager: listen actively to windows being destroyed during WS switch
+      (LP: #1812527)
+    - Fix unresponsive-app dialog blocking input in other windows (LP: #1740869)
+    - Fix regression on missing spread animation (LP: #1827284)
+  * d/p/js-fix-invalid-access-errors.patch,
+    d/p/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch:
+    - Refreshed
   * d/p/switchMonitor-switch-to-next-config-upon-initial-keypress.patch
     - Ensure switch display mode is cyclic (LP: #1772811)
   * debian/control:
-    - Depends on mutter 3.28.3+git20190124-0ubuntu18.04.3
-  * d/p/dnd-Only-handle-touch-events-in-wayland.patch:
-    - dnd: Only handle touch events in wayland (LP: #1817020)
+    - Depends on mutter 3.28.4-0ubuntu18.04.1
   * d/p/st-widget-Add-missing-g_return_val_if_fail.patch:
     - st-widget: Protect from NULL obj in get_theme_node (LP: #1796606)
-  * d/p/windowManager-listen-actively-to-windows-being-destroyed-.patch:
-    - windowManager: listen actively to windows being destroyed during WS switch
-      (LP: #1812527)
-  * d/p/dialog-Really-set-ellipsize-mode-in-subtitle-and-body.patch:
-    - Really set ellipsize mode in subtitle and body (LP: #1809788)
-  * d/p/st-adjustment-Mark-all-properties-as-EXPLICIT_NOTIFY.patch:
-    - Fix regression on missing spread animation (LP: #1827284)
 
  -- Marco Trevisan (Treviño) <[email protected]>  Fri, 10 May 2019 11:43:10 +0100
 
diff --git a/debian/control b/debian/control
index 7b29d44..5d292d1 100644
--- a/debian/control
+++ b/debian/control
@@ -2,6 +2,7 @@
 #
 # Modifications should be made to debian/control.in instead.
 # This file is regenerated automatically in the clean target.
+
 Source: gnome-shell
 Section: gnome
 Priority: optional
@@ -83,7 +84,7 @@ Depends: ${gir:Depends},
          gir1.2-gtk-3.0 (>= 3.16),
          gir1.2-gweather-3.0,
          gir1.2-ibus-1.0 (>= 1.5.2),
-         gir1.2-mutter-2 (>= 3.28.3+git20190124-0ubuntu18.04.3),
+         gir1.2-mutter-2 (>= 3.28.4-0ubuntu18.04.1),
          gir1.2-nm-1.0 [linux-any],
          gir1.2-nma-1.0 [linux-any],
          gir1.2-pango-1.0,
@@ -96,7 +97,7 @@ Depends: ${gir:Depends},
          gnome-shell-common (= ${source:Version}),
          ubuntu-wallpapers,
          gsettings-desktop-schemas (>= 3.21.3),
-         mutter (>= 3.28.3+git20190124-0ubuntu18.04.3),
+         mutter (>= 3.28.4-0ubuntu18.04.1),
          python3,
          libglib2.0-bin (>= 2.53.0),
 Recommends: xserver-xorg-legacy,
diff --git a/debian/control.in b/debian/control.in
index 0b0bb20..c4e7d42 100644
--- a/debian/control.in
+++ b/debian/control.in
@@ -1,3 +1,4 @@
+
 Source: gnome-shell
 Section: gnome
 Priority: optional
@@ -79,7 +80,7 @@ Depends: ${gir:Depends},
          gir1.2-gtk-3.0 (>= 3.16),
          gir1.2-gweather-3.0,
          gir1.2-ibus-1.0 (>= 1.5.2),
-         gir1.2-mutter-2 (>= 3.28.3+git20190124-0ubuntu18.04.3),
+         gir1.2-mutter-2 (>= 3.28.4-0ubuntu18.04.1),
          gir1.2-nm-1.0 [linux-any],
          gir1.2-nma-1.0 [linux-any],
          gir1.2-pango-1.0,
@@ -92,7 +93,7 @@ Depends: ${gir:Depends},
          gnome-shell-common (= ${source:Version}),
          ubuntu-wallpapers,
          gsettings-desktop-schemas (>= 3.21.3),
-         mutter (>= 3.28.3+git20190124-0ubuntu18.04.3),
+         mutter (>= 3.28.4-0ubuntu18.04.1),
          python3,
          libglib2.0-bin (>= 2.53.0),
 Recommends: xserver-xorg-legacy,
diff --git a/debian/patches/dialog-Really-set-ellipsize-mode-in-subtitle-and-body.patch b/debian/patches/dialog-Really-set-ellipsize-mode-in-subtitle-and-body.patch
deleted file mode 100644
index 9f1787e..0000000
--- a/debian/patches/dialog-Really-set-ellipsize-mode-in-subtitle-and-body.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <[email protected]>
-Date: Fri, 3 May 2019 15:27:13 -0500
-Subject: dialog: Really set ellipsize mode in subtitle and body
-
-Dialog's subtitle or body could not be properly wrapped, while it's ellipsized
-when the text's width doesn't exceed the container size.
-
-Clutter text has an `ellipsize` property, however in dialog's subtitle and body
-we have been setting the `ellipsize-mode` property to Pango.EllipsizeMode.NONE
-that is not present in the underlying GObject.
-
-Not being an error in javascript, gjs didn't warn us about this, while at the
-same time the St.Label's default Pango.EllipsizeMode.END was used.
-
-Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/922
-
-https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/531
-
-(cherry picked from commit 3121c9aa29406ad85e949b697e90092f1fa6fc2e)
-
-Origin: https://gitlab.gnome.org/GNOME/gnome-shell/commit/5703a25e
-Bug-Ubuntu: https://bugs.launchpad.net/oem-priority/+bug/1809788
-Applied: 3.28.4
----
- js/ui/dialog.js | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/js/ui/dialog.js b/js/ui/dialog.js
-index 89db963..3377957 100644
---- a/js/ui/dialog.js
-+++ b/js/ui/dialog.js
-@@ -185,7 +185,7 @@ var MessageDialogContent = new Lang.Class({
-             this[`_${prop}`].add_style_class_name(`message-dialog-${prop}`);
-         });
- 
--        let textProps = { ellipsize_mode: Pango.EllipsizeMode.NONE,
-+        let textProps = { ellipsize: Pango.EllipsizeMode.NONE,
-                           line_wrap: true };
-         Object.assign(this._subtitle.clutter_text, textProps);
-         Object.assign(this._body.clutter_text, textProps);
diff --git a/debian/patches/dnd-Only-handle-touch-events-in-wayland.patch b/debian/patches/dnd-Only-handle-touch-events-in-wayland.patch
deleted file mode 100644
index adb0ad8..0000000
--- a/debian/patches/dnd-Only-handle-touch-events-in-wayland.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From: Andrea Azzarone <[email protected]>
-Date: Mon, 4 Mar 2019 16:14:22 +0000
-Subject: dnd: Only handle touch events in wayland
-
-There are serveral issues around touch passive grab and touch/pointer doubly
-handling to use these on X11, so we stick to single-touch/pointer there.
-
-Cherry picked from commit 60ccdc2deb746c0d96b0268ee5034b65478ce779
-
-Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1015
-
-Ubuntu-Bug: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1817020
-GNOME-Bug: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1015
-Origin: https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/457
-Applied-Upstream: 3.28.4
----
- js/ui/dnd.js | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-diff --git a/js/ui/dnd.js b/js/ui/dnd.js
-index 9e961a1..af7a27a 100644
---- a/js/ui/dnd.js
-+++ b/js/ui/dnd.js
-@@ -132,6 +132,16 @@ var _Draggable = new Lang.Class({
-     },
- 
-     _onTouchEvent(actor, event) {
-+        // Here we only handle touch events on wayland. On X11
-+        // we do get emulated pointer events, which already works
-+        // for single-touch cases. Besides, the X11 passive touch grab
-+        // set up by Mutter will make us see first the touch events
-+        // and later the pointer events, so it will look like two
-+        // unrelated series of events, we want to avoid double handling
-+        // in these cases.
-+        if (!Meta.is_wayland_compositor())
-+            return Clutter.EVENT_PROPAGATE;
-+
-         if (event.type() != Clutter.EventType.TOUCH_BEGIN ||
-             !global.display.is_pointer_emulating_sequence(event.get_event_sequence()))
-             return Clutter.EVENT_PROPAGATE;
diff --git a/debian/patches/js-fix-invalid-access-errors.patch b/debian/patches/js-fix-invalid-access-errors.patch
index 782ee1f..3855752 100644
--- a/debian/patches/js-fix-invalid-access-errors.patch
+++ b/debian/patches/js-fix-invalid-access-errors.patch
@@ -33,7 +33,7 @@ Forwarded: yes, https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/4
  2 files changed, 89 insertions(+), 39 deletions(-)
 
 diff --git a/js/ui/dnd.js b/js/ui/dnd.js
-index ec1ba1d..9e961a1 100644
+index a36b1f6..af7a27a 100644
 --- a/js/ui/dnd.js
 +++ b/js/ui/dnd.js
 @@ -27,6 +27,12 @@ var DragMotionResult = {
@@ -75,7 +75,7 @@ index ec1ba1d..9e961a1 100644
          this._animationInProgress = false; // The drag is over and the item is in the process of animating to its original position (snapping back or reverting).
          this._dragCancellable = true;
  
-@@ -206,9 +213,10 @@ var _Draggable = new Lang.Class({
+@@ -216,9 +223,10 @@ var _Draggable = new Lang.Class({
              (event.type() == Clutter.EventType.TOUCH_END &&
               global.display.is_pointer_emulating_sequence(event.get_event_sequence()))) {
              this._buttonDown = false;
@@ -88,7 +88,7 @@ index ec1ba1d..9e961a1 100644
                  // Drag must have been cancelled with Esc.
                  this._dragComplete();
                  return Clutter.EVENT_STOP;
-@@ -222,14 +230,14 @@ var _Draggable = new Lang.Class({
+@@ -232,14 +240,14 @@ var _Draggable = new Lang.Class({
          } else if (event.type() == Clutter.EventType.MOTION ||
                     (event.type() == Clutter.EventType.TOUCH_UPDATE &&
                      global.display.is_pointer_emulating_sequence(event.get_event_sequence()))) {
@@ -106,7 +106,7 @@ index ec1ba1d..9e961a1 100644
              let symbol = event.get_key_symbol();
              if (symbol == Clutter.Escape) {
                  this._cancelDrag(event.get_time());
-@@ -265,7 +273,7 @@ var _Draggable = new Lang.Class({
+@@ -275,7 +283,7 @@ var _Draggable = new Lang.Class({
       */
      startDrag(stageX, stageY, time, sequence) {
          currentDraggable = this;
@@ -115,7 +115,7 @@ index ec1ba1d..9e961a1 100644
  
          // Special-case St.Button: the pointer grab messes with the internal
          // state, so force a reset to a reasonable state here
-@@ -342,6 +350,13 @@ var _Draggable = new Lang.Class({
+@@ -352,6 +360,13 @@ var _Draggable = new Lang.Class({
              Shell.util_set_hidden_from_pick(this._dragActor, true);
          }
  
@@ -129,7 +129,7 @@ index ec1ba1d..9e961a1 100644
          this._dragOrigOpacity = this._dragActor.opacity;
          if (this._dragActorOpacity != undefined)
              this._dragActor.opacity = this._dragActorOpacity;
-@@ -518,7 +533,7 @@ var _Draggable = new Lang.Class({
+@@ -528,7 +543,7 @@ var _Draggable = new Lang.Class({
                                                  event.get_time())) {
                      // If it accepted the drop without taking the actor,
                      // handle it ourselves.
@@ -138,7 +138,7 @@ index ec1ba1d..9e961a1 100644
                          if (this._restoreOnSuccess) {
                              this._restoreDragActor(event.get_time());
                              return true;
-@@ -526,7 +541,7 @@ var _Draggable = new Lang.Class({
+@@ -536,7 +551,7 @@ var _Draggable = new Lang.Class({
                              this._dragActor.destroy();
                      }
  
@@ -147,7 +147,7 @@ index ec1ba1d..9e961a1 100644
                      global.screen.set_cursor(Meta.Cursor.DEFAULT);
                      this.emit('drag-end', event.get_time(), true);
                      this._dragComplete();
-@@ -575,20 +590,22 @@ var _Draggable = new Lang.Class({
+@@ -585,20 +600,22 @@ var _Draggable = new Lang.Class({
  
      _cancelDrag(eventTime) {
          this.emit('drag-cancelled', eventTime);
@@ -174,7 +174,7 @@ index ec1ba1d..9e961a1 100644
          this._animateDragEnd(eventTime,
                               { x: snapBackX,
                                 y: snapBackY,
-@@ -599,7 +616,7 @@ var _Draggable = new Lang.Class({
+@@ -609,7 +626,7 @@ var _Draggable = new Lang.Class({
      },
  
      _restoreDragActor(eventTime) {
@@ -183,7 +183,7 @@ index ec1ba1d..9e961a1 100644
          let [restoreX, restoreY, restoreScale] = this._getRestoreLocation();
  
          // fade the actor back in at its original location
-@@ -614,12 +631,6 @@ var _Draggable = new Lang.Class({
+@@ -624,12 +641,6 @@ var _Draggable = new Lang.Class({
      _animateDragEnd(eventTime, params) {
          this._animationInProgress = true;
  
@@ -196,7 +196,7 @@ index ec1ba1d..9e961a1 100644
          params['opacity']          = this._dragOrigOpacity;
          params['transition']       = 'easeOutQuad';
          params['onComplete']       = this._onAnimationComplete;
-@@ -642,9 +653,6 @@ var _Draggable = new Lang.Class({
+@@ -652,9 +663,6 @@ var _Draggable = new Lang.Class({
      },
  
      _onAnimationComplete(dragActor, eventTime) {
@@ -206,7 +206,7 @@ index ec1ba1d..9e961a1 100644
          if (this._dragOrigParent) {
              Main.uiGroup.remove_child(this._dragActor);
              this._dragOrigParent.add_actor(this._dragActor);
-@@ -659,7 +667,7 @@ var _Draggable = new Lang.Class({
+@@ -669,7 +677,7 @@ var _Draggable = new Lang.Class({
      },
  
      _dragComplete() {
@@ -215,7 +215,7 @@ index ec1ba1d..9e961a1 100644
              Shell.util_set_hidden_from_pick(this._dragActor, false);
  
          this._ungrabEvents();
-@@ -670,7 +678,12 @@ var _Draggable = new Lang.Class({
+@@ -680,7 +688,12 @@ var _Draggable = new Lang.Class({
              this._updateHoverId = 0;
          }
  
diff --git a/debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch b/debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
index 8d15dd2..0b59af4 100644
--- a/debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
+++ b/debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
@@ -76,7 +76,7 @@ index d75af65..4d3fe73 100644
          this._showAppsIcon = new ShowAppsIcon();
          this._showAppsIcon.childScale = 1;
 diff --git a/js/ui/dialog.js b/js/ui/dialog.js
-index cfa192d..89db963 100644
+index 66cc851..3377957 100644
 --- a/js/ui/dialog.js
 +++ b/js/ui/dialog.js
 @@ -6,6 +6,7 @@ const GObject = imports.gi.GObject;
diff --git a/debian/patches/series b/debian/patches/series
index 944c446..e9c28b3 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -24,8 +24,4 @@ power-Label-the-PENDING_CHARGE-state-as-Not-Charging.patch
 CVE-2019-3820-1.patch
 CVE-2019-3820-2.patch
 switchMonitor-switch-to-next-config-upon-initial-keypress.patch
-dnd-Only-handle-touch-events-in-wayland.patch
 st-widget-Add-missing-g_return_val_if_fail.patch
-windowManager-listen-actively-to-windows-being-destroyed-.patch
-dialog-Really-set-ellipsize-mode-in-subtitle-and-body.patch
-st-adjustment-Mark-all-properties-as-EXPLICIT_NOTIFY.patch
diff --git a/debian/patches/st-adjustment-Mark-all-properties-as-EXPLICIT_NOTIFY.patch b/debian/patches/st-adjustment-Mark-all-properties-as-EXPLICIT_NOTIFY.patch
deleted file mode 100644
index 65a15de..0000000
--- a/debian/patches/st-adjustment-Mark-all-properties-as-EXPLICIT_NOTIFY.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From: Carlos Garnacho <[email protected]>
-Date: Thu, 28 Jun 2018 20:22:40 +0200
-Subject: st-adjustment: Mark all properties as EXPLICIT_NOTIFY
-
-All adjustment setter functions take good care of avoiding emission of
-notify:: when it's not needed. The set_property() implementation already
-calls into the setter functions, so mark the properties as EXPLICITY_NOTIFY
-in order to optimize notify:: emission away through g_object_set (rather
-common from JS code).
-
-(cherry picked from commit b1b455ff1a0e856149142747e77fb1c98df34c03)
-
-Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1270
-
-Origin: https://gitlab.gnome.org/GNOME/gnome-shell/commit/8702d66
-Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1827284
-Applied-Upstream: 3.28.4
----
- src/st/st-adjustment.c | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/st/st-adjustment.c b/src/st/st-adjustment.c
-index 005c6eb..598df4e 100644
---- a/src/st/st-adjustment.c
-+++ b/src/st/st-adjustment.c
-@@ -205,7 +205,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
-                                                         G_MAXDOUBLE,
-                                                         0.0,
-                                                         ST_PARAM_READWRITE |
--                                                        G_PARAM_CONSTRUCT));
-+                                                        G_PARAM_CONSTRUCT |
-+                                                        G_PARAM_EXPLICIT_NOTIFY));
-   g_object_class_install_property (object_class,
-                                    PROP_UPPER,
-                                    g_param_spec_double ("upper",
-@@ -215,7 +216,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
-                                                         G_MAXDOUBLE,
-                                                         0.0,
-                                                         ST_PARAM_READWRITE |
--                                                        G_PARAM_CONSTRUCT));
-+                                                        G_PARAM_CONSTRUCT |
-+                                                        G_PARAM_EXPLICIT_NOTIFY));
-   g_object_class_install_property (object_class,
-                                    PROP_VALUE,
-                                    g_param_spec_double ("value",
-@@ -225,7 +227,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
-                                                         G_MAXDOUBLE,
-                                                         0.0,
-                                                         ST_PARAM_READWRITE |
--                                                        G_PARAM_CONSTRUCT));
-+                                                        G_PARAM_CONSTRUCT |
-+                                                        G_PARAM_EXPLICIT_NOTIFY));
-   g_object_class_install_property (object_class,
-                                    PROP_STEP_INC,
-                                    g_param_spec_double ("step-increment",
-@@ -235,7 +238,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
-                                                         G_MAXDOUBLE,
-                                                         0.0,
-                                                         ST_PARAM_READWRITE |
--                                                        G_PARAM_CONSTRUCT));
-+                                                        G_PARAM_CONSTRUCT |
-+                                                        G_PARAM_EXPLICIT_NOTIFY));
-   g_object_class_install_property (object_class,
-                                    PROP_PAGE_INC,
-                                    g_param_spec_double ("page-increment",
-@@ -245,7 +249,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
-                                                         G_MAXDOUBLE,
-                                                         0.0,
-                                                         ST_PARAM_READWRITE |
--                                                        G_PARAM_CONSTRUCT));
-+                                                        G_PARAM_CONSTRUCT |
-+                                                        G_PARAM_EXPLICIT_NOTIFY));
-   g_object_class_install_property (object_class,
-                                    PROP_PAGE_SIZE,
-                                    g_param_spec_double ("page-size",
-@@ -255,7 +260,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
-                                                         G_MAXDOUBLE,
-                                                         0.0,
-                                                         ST_PARAM_READWRITE |
--                                                        G_PARAM_CONSTRUCT));
-+                                                        G_PARAM_CONSTRUCT |
-+                                                        G_PARAM_EXPLICIT_NOTIFY));
-   /**
-    * StAdjustment::changed:
-    * @self: the #StAdjustment
diff --git a/debian/patches/windowManager-listen-actively-to-windows-being-destroyed-.patch b/debian/patches/windowManager-listen-actively-to-windows-being-destroyed-.patch
deleted file mode 100644
index 76cbcf0..0000000
--- a/debian/patches/windowManager-listen-actively-to-windows-being-destroyed-.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From: Carlos Garnacho <[email protected]>
-Date: Thu, 6 Sep 2018 21:50:21 +0200
-Subject: windowManager: listen actively to windows being destroyed during WS
- switch
-
-Prevents gjs from dealing with already dispose()d objects.
-
-Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/539
-
-(cherry-picked from b087752b5539a8cbb1d61979cb069aef8a3475be)
-
-Origin: https://gitlab.gnome.org/GNOME/gnome-shell/commit/b087752b
-Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1812527
----
- js/ui/windowManager.js | 12 ++++++++++--
- 1 file changed, 10 insertions(+), 2 deletions(-)
-
-diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
-index 8e7e7a6..49d7035 100644
---- a/js/ui/windowManager.js
-+++ b/js/ui/windowManager.js
-@@ -1763,6 +1763,14 @@ var WindowManager = new Lang.Class({
-             }
-         }
- 
-+        for (let i = 0; i < switchData.windows.length; i++) {
-+            let w = switchData.windows[i];
-+
-+            w.windowDestroyId = w.window.connect('destroy', () => {
-+                switchData.windows.splice(switchData.windows.indexOf(w), 1);
-+            });
-+        }
-+
-         switchData.inGroup.set_position(-xDest, -yDest);
-         switchData.inGroup.raise_top();
- 
-@@ -1793,8 +1801,8 @@ var WindowManager = new Lang.Class({
- 
-         for (let i = 0; i < switchData.windows.length; i++) {
-                 let w = switchData.windows[i];
--                if (w.window.is_destroyed()) // Window gone
--                    continue;
-+                w.window.disconnect(w.windowDestroyId);
-+
-                 if (w.window.get_parent() == switchData.outGroup) {
-                     w.window.reparent(w.parent);
-                     w.window.hide();
diff --git a/debian/watch b/debian/watch
index ac38817..580c64a 100644
--- a/debian/watch
+++ b/debian/watch
@@ -1,3 +1,3 @@
 version=4
-https://download.gnome.org/sources/@PACKAGE@/([\d\.]+[02468])/ \
+https://download.gnome.org/sources/@PACKAGE@/3.28/ \
 	@PACKAGE@@ANY_VERSION@\.tar\.xz
diff --git a/js/ui/closeDialog.js b/js/ui/closeDialog.js
index aa0b5ce..c4b0332 100644
--- a/js/ui/closeDialog.js
+++ b/js/ui/closeDialog.js
@@ -2,6 +2,7 @@
 
 const Clutter = imports.gi.Clutter;
 const Gio = imports.gi.Gio;
+const GLib = imports.gi.GLib;
 const GObject = imports.gi.GObject;
 const Lang = imports.lang;
 const Meta = imports.gi.Meta;
@@ -13,6 +14,7 @@ const Tweener = imports.ui.tweener;
 
 var FROZEN_WINDOW_BRIGHTNESS = -0.3
 var DIALOG_TRANSITION_TIME = 0.15
+var ALIVE_TIMEOUT = 5000;
 
 var CloseDialog = new Lang.Class({
     Name: 'CloseDialog',
@@ -26,6 +28,10 @@ var CloseDialog = new Lang.Class({
         this.parent();
         this._window = window;
         this._dialog = null;
+        this._tracked = undefined;
+        this._timeoutId = 0;
+        this._windowFocusChangedId = 0;
+        this._keyFocusChangedId = 0;
     },
 
     get window() {
@@ -93,10 +99,57 @@ var CloseDialog = new Lang.Class({
         this.response(Meta.CloseDialogResponse.FORCE_CLOSE);
     },
 
+    _onFocusChanged() {
+        if (Meta.is_wayland_compositor())
+            return;
+
+        let focusWindow = global.display.focus_window;
+        let keyFocus = global.stage.key_focus;
+
+        let shouldTrack;
+        if (focusWindow != null)
+            shouldTrack = focusWindow == this._window;
+        else
+            shouldTrack = keyFocus && this._dialog.contains(keyFocus);
+
+        if (this._tracked === shouldTrack)
+            return;
+
+        if (shouldTrack)
+            Main.layoutManager.trackChrome(this._dialog,
+                                           { affectsInputRegion: true });
+        else
+            Main.layoutManager.untrackChrome(this._dialog);
+
+        // The buttons are broken when they aren't added to the input region,
+        // so disable them properly in that case
+        this._dialog.buttonLayout.get_children().forEach(b => {
+            b.reactive = shouldTrack;
+        });
+
+        this._tracked = shouldTrack;
+    },
+
     vfunc_show() {
         if (this._dialog != null)
             return;
 
+        Meta.disable_unredirect_for_screen(global.screen);
+
+        this._timeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, ALIVE_TIMEOUT,
+            () => {
+                this._window.check_alive(global.display.get_current_time_roundtrip());
+                return GLib.SOURCE_CONTINUE;
+            });
+
+        this._windowFocusChangedId =
+            global.display.connect('notify::focus-window',
+                                   this._onFocusChanged.bind(this));
+
+        this._keyFocusChangedId =
+            global.stage.connect('notify::key-focus',
+                                 this._onFocusChanged.bind(this));
+
         this._addWindowEffect();
         this._initDialog();
 
@@ -107,9 +160,7 @@ var CloseDialog = new Lang.Class({
                          { scale_y: 1,
                            transition: 'linear',
                            time: DIALOG_TRANSITION_TIME,
-                           onComplete: () => {
-                               Main.layoutManager.trackChrome(this._dialog, { affectsInputRegion: true });
-                           }
+                           onComplete: this._onFocusChanged.bind(this)
                          });
     },
 
@@ -117,6 +168,17 @@ var CloseDialog = new Lang.Class({
         if (this._dialog == null)
             return;
 
+        Meta.enable_unredirect_for_screen(global.screen);
+
+        GLib.source_remove(this._timeoutId);
+        this._timeoutId = 0;
+
+        global.display.disconnect(this._windowFocusChangedId)
+        this._windowFocusChangedId = 0;
+
+        global.stage.disconnect(this._keyFocusChangedId);
+        this._keyFocusChangedId = 0;
+
         let dialog = this._dialog;
         this._dialog = null;
         this._removeWindowEffect();
diff --git a/js/ui/dialog.js b/js/ui/dialog.js
index cfa192d..66cc851 100644
--- a/js/ui/dialog.js
+++ b/js/ui/dialog.js
@@ -183,7 +183,7 @@ var MessageDialogContent = new Lang.Class({
             this[`_${prop}`].add_style_class_name(`message-dialog-${prop}`);
         });
 
-        let textProps = { ellipsize_mode: Pango.EllipsizeMode.NONE,
+        let textProps = { ellipsize: Pango.EllipsizeMode.NONE,
                           line_wrap: true };
         Object.assign(this._subtitle.clutter_text, textProps);
         Object.assign(this._body.clutter_text, textProps);
diff --git a/js/ui/dnd.js b/js/ui/dnd.js
index ec1ba1d..a36b1f6 100644
--- a/js/ui/dnd.js
+++ b/js/ui/dnd.js
@@ -125,6 +125,16 @@ var _Draggable = new Lang.Class({
     },
 
     _onTouchEvent(actor, event) {
+        // Here we only handle touch events on wayland. On X11
+        // we do get emulated pointer events, which already works
+        // for single-touch cases. Besides, the X11 passive touch grab
+        // set up by Mutter will make us see first the touch events
+        // and later the pointer events, so it will look like two
+        // unrelated series of events, we want to avoid double handling
+        // in these cases.
+        if (!Meta.is_wayland_compositor())
+            return Clutter.EVENT_PROPAGATE;
+
         if (event.type() != Clutter.EventType.TOUCH_BEGIN ||
             !global.display.is_pointer_emulating_sequence(event.get_event_sequence()))
             return Clutter.EVENT_PROPAGATE;
diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
index 8e7e7a6..49d7035 100644
--- a/js/ui/windowManager.js
+++ b/js/ui/windowManager.js
@@ -1763,6 +1763,14 @@ var WindowManager = new Lang.Class({
             }
         }
 
+        for (let i = 0; i < switchData.windows.length; i++) {
+            let w = switchData.windows[i];
+
+            w.windowDestroyId = w.window.connect('destroy', () => {
+                switchData.windows.splice(switchData.windows.indexOf(w), 1);
+            });
+        }
+
         switchData.inGroup.set_position(-xDest, -yDest);
         switchData.inGroup.raise_top();
 
@@ -1793,8 +1801,8 @@ var WindowManager = new Lang.Class({
 
         for (let i = 0; i < switchData.windows.length; i++) {
                 let w = switchData.windows[i];
-                if (w.window.is_destroyed()) // Window gone
-                    continue;
+                w.window.disconnect(w.windowDestroyId);
+
                 if (w.window.get_parent() == switchData.outGroup) {
                     w.window.reparent(w.parent);
                     w.window.hide();
diff --git a/meson.build b/meson.build
index f38798c..2bda6a2 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
 project('gnome-shell', 'c',
-  version: '3.28.3',
+  version: '3.28.4',
   meson_version: '>= 0.42.0',
   license: 'GPLv2+'
 )
diff --git a/src/st/st-adjustment.c b/src/st/st-adjustment.c
index 005c6eb..598df4e 100644
--- a/src/st/st-adjustment.c
+++ b/src/st/st-adjustment.c
@@ -205,7 +205,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
                                                         G_MAXDOUBLE,
                                                         0.0,
                                                         ST_PARAM_READWRITE |
-                                                        G_PARAM_CONSTRUCT));
+                                                        G_PARAM_CONSTRUCT |
+                                                        G_PARAM_EXPLICIT_NOTIFY));
   g_object_class_install_property (object_class,
                                    PROP_UPPER,
                                    g_param_spec_double ("upper",
@@ -215,7 +216,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
                                                         G_MAXDOUBLE,
                                                         0.0,
                                                         ST_PARAM_READWRITE |
-                                                        G_PARAM_CONSTRUCT));
+                                                        G_PARAM_CONSTRUCT |
+                                                        G_PARAM_EXPLICIT_NOTIFY));
   g_object_class_install_property (object_class,
                                    PROP_VALUE,
                                    g_param_spec_double ("value",
@@ -225,7 +227,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
                                                         G_MAXDOUBLE,
                                                         0.0,
                                                         ST_PARAM_READWRITE |
-                                                        G_PARAM_CONSTRUCT));
+                                                        G_PARAM_CONSTRUCT |
+                                                        G_PARAM_EXPLICIT_NOTIFY));
   g_object_class_install_property (object_class,
                                    PROP_STEP_INC,
                                    g_param_spec_double ("step-increment",
@@ -235,7 +238,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
                                                         G_MAXDOUBLE,
                                                         0.0,
                                                         ST_PARAM_READWRITE |
-                                                        G_PARAM_CONSTRUCT));
+                                                        G_PARAM_CONSTRUCT |
+                                                        G_PARAM_EXPLICIT_NOTIFY));
   g_object_class_install_property (object_class,
                                    PROP_PAGE_INC,
                                    g_param_spec_double ("page-increment",
@@ -245,7 +249,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
                                                         G_MAXDOUBLE,
                                                         0.0,
                                                         ST_PARAM_READWRITE |
-                                                        G_PARAM_CONSTRUCT));
+                                                        G_PARAM_CONSTRUCT |
+                                                        G_PARAM_EXPLICIT_NOTIFY));
   g_object_class_install_property (object_class,
                                    PROP_PAGE_SIZE,
                                    g_param_spec_double ("page-size",
@@ -255,7 +260,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
                                                         G_MAXDOUBLE,
                                                         0.0,
                                                         ST_PARAM_READWRITE |
-                                                        G_PARAM_CONSTRUCT));
+                                                        G_PARAM_CONSTRUCT |
+                                                        G_PARAM_EXPLICIT_NOTIFY));
   /**
    * StAdjustment::changed:
    * @self: the #StAdjustment
-- 
ubuntu-desktop mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-desktop

Reply via email to