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