Bug#771535: Pre-approval for gnome-shell/3.14.2-1
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
Hi,
please approve the upload of gnome-shell to unstable for the following
changes including an important bugfix in GDM:
gnome-shell (3.14.2-1) unstable; urgency=medium
* gnome-shell.gsettings-override: remove shotwell which is no longer
part of the default installation.
* New upstream bugfix release.
+ Summarize notifications instead of queuing up.
* Bump (build-)dependencies on mutter.
* 01_network_list.patch: patch from upstream git. Fix an UI bug when
removing network connections.
* 02_auth_prompt.patch: patch from upstream git. Fix the prompt with
disable_user_list after canceling an attempt. Closes: #683338.
Attaching upstream changes between 3.14.1 and 3.14.2.
unblock gnome-shell/3.14.2-1
Thanks,
--
.''`. Josselin Mouette
: :' :
`. `'
`-
diff --git a/NEWS b/NEWS
index 9e721a0..3aa03e6 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,23 @@
+3.14.2
+======
+* Do not hard-depend on latest NetworkManager [Florian; #738485]
+* Fix check for isToday in calendar [Darcy; #738725]
+* Fix workspace changes from app picker [Yuki; #737534]
+* Misc. bug fixes [Yuki; #739497]
+
+Contributors:
+ Darcy, Florian Müllner, Yuki
+
+3.14.1.5
+========
+* Fix handing of SystemBackground [Owen; #738652]
+* Summarize queued up notifications [Devyani; #702460]
+* Plug an animation object leak [Rui; #739252]
+* Improve handling of multi-day events [Andreas; #727302]
+
+Contributors:
+ Andreas Brauchli, Devyani Kota, Rui Matos, Owen W. Taylor
+
3.14.1
======
* Fix pulse animation for scrolled app folders [Florian; #736885]
diff --git a/configure.ac b/configure.ac
index 71cf1da..790b7b2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
AC_PREREQ(2.63)
-AC_INIT([gnome-shell],[3.14.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
+AC_INIT([gnome-shell],[3.14.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@@ -76,7 +76,7 @@ AC_MSG_RESULT($enable_systemd)
CLUTTER_MIN_VERSION=1.15.90
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.39.0
-MUTTER_MIN_VERSION=3.14.1
+MUTTER_MIN_VERSION=3.14.2
GTK_MIN_VERSION=3.13.2
GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index bb5d2c4..10ceb34 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -1494,6 +1494,10 @@ StScrollBar StButton#vhandle:active {
text-align: right;
}
+.events-day-time-ellipses {
+ color: rgba(153, 153, 153, 1.0);
+}
+
.events-day-time:rtl {
text-align: left;
}
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index 1e94015..4a12698 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -1564,10 +1564,11 @@ const AppIcon = new Lang.Class({
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._menuTimeoutId = 0;
- this._stateChangedId = this.app.connect('notify::state',
- Lang.bind(this,
- this._onStateChanged));
- this._onStateChanged();
+ this._stateChangedId = this.app.connect('notify::state', Lang.bind(this,
+ function () {
+ this._updateRunningStyle();
+ }));
+ this._updateRunningStyle();
},
_onDestroy: function() {
@@ -1588,7 +1589,7 @@ const AppIcon = new Lang.Class({
}
},
- _onStateChanged: function() {
+ _updateRunningStyle: function() {
if (this.app.state != Shell.AppState.STOPPED)
this.actor.add_style_class_name('running');
else
diff --git a/js/ui/background.js b/js/ui/background.js
index 781f202..ad0cacc 100644
--- a/js/ui/background.js
+++ b/js/ui/background.js
@@ -106,6 +106,8 @@ const Main = imports.ui.main;
const Params = imports.misc.params;
const Tweener = imports.ui.tweener;
+const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
+
const BACKGROUND_SCHEMA = 'org.gnome.desktop.background';
const PRIMARY_COLOR_KEY = 'primary-color';
const SECONDARY_COLOR_KEY = 'secondary-color';
@@ -160,6 +162,7 @@ const BackgroundCache = new Lang.Class({
}));
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
}
+ return;
}
let animation = new Animation({ filename: params.filename });
@@ -452,6 +455,7 @@ const SystemBackground = new Lang.Class({
if (_systemBackground == null) {
_systemBackground = new Meta.Background({ meta_screen: global.screen });
+ _systemBackground.set_color(DEFAULT_BACKGROUND_COLOR);
_systemBackground.set_filename(filename, GDesktopEnums.BackgroundStyle.WALLPAPER);
}
diff --git a/js/ui/calendar.js b/js/ui/calendar.js
index 77f8b64..ab0cc76 100644
--- a/js/ui/calendar.js
+++ b/js/ui/calendar.js
@@ -13,6 +13,7 @@ const Shell = imports.gi.Shell;
const MSECS_IN_DAY = 24 * 60 * 60 * 1000;
const SHOW_WEEKDATE_KEY = 'show-weekdate';
+const ELLIPSIS_CHAR = '\u2026';
// alias to prevent xgettext from picking up strings translated in GTK+
const gtk30_ = Gettext_gtk30.gettext;
@@ -58,19 +59,21 @@ function _getEndOfDay(date) {
return ret;
}
-function _formatEventTime(event, clockFormat) {
+function _formatEventTime(event, clockFormat, periodBegin, periodEnd) {
let ret;
- if (event.allDay) {
+ let allDay = (event.allDay || (event.date <= periodBegin && event.end >= periodEnd));
+ if (allDay) {
/* Translators: Shown in calendar event list for all day events
* Keep it short, best if you can use less then 10 characters
*/
ret = C_("event list time", "All Day");
} else {
+ let date = event.date >= periodBegin ? event.date : event.end;
switch (clockFormat) {
case '24h':
/* Translators: Shown in calendar event list, if 24h format,
\u2236 is a ratio character, similar to : */
- ret = event.date.toLocaleFormat(C_("event list time", "%H\u2236%M"));
+ ret = date.toLocaleFormat(C_("event list time", "%H\u2236%M"));
break;
default:
@@ -79,7 +82,7 @@ function _formatEventTime(event, clockFormat) {
/* Translators: Shown in calendar event list, if 12h format,
\u2236 is a ratio character, similar to : and \u2009 is
a thin space */
- ret = event.date.toLocaleFormat(C_("event list time", "%l\u2236%M\u2009%p"));
+ ret = date.toLocaleFormat(C_("event list time", "%l\u2236%M\u2009%p"));
break;
}
}
@@ -361,6 +364,12 @@ const DBusEventSource = new Lang.Class({
result.push(event);
}
}
+ result.sort(function(event1, event2) {
+ // sort events by end time on ending day
+ let d1 = event1.date < begin && event1.end <= end ? event1.end : event1.date;
+ let d2 = event2.date < begin && event2.end <= end ? event2.end : event2.date;
+ return d1.getTime() - d2.getTime();
+ });
return result;
},
@@ -721,12 +730,16 @@ const EventsList = new Lang.Class({
this._eventSource.connect('changed', Lang.bind(this, this._update));
},
- _addEvent: function(event, index, includeDayName) {
+ _addEvent: function(event, index, includeDayName, periodBegin, periodEnd) {
let dayString;
- if (includeDayName)
- dayString = _getEventDayAbbreviation(event.date.getDay());
- else
+ if (includeDayName) {
+ if (event.date >= periodBegin)
+ dayString = _getEventDayAbbreviation(event.date.getDay());
+ else /* show event end day if it began earlier */
+ dayString = _getEventDayAbbreviation(event.end.getDay());
+ } else {
dayString = '';
+ }
let dayLabel = new St.Label({ style_class: 'events-day-dayname',
text: dayString,
@@ -739,16 +752,30 @@ const EventsList = new Lang.Class({
let layout = this.actor.layout_manager;
layout.attach(dayLabel, rtl ? 2 : 0, index, 1, 1);
-
let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);
- let timeString = _formatEventTime(event, clockFormat);
+ let timeString = _formatEventTime(event, clockFormat, periodBegin, periodEnd);
let timeLabel = new St.Label({ style_class: 'events-day-time',
text: timeString,
y_align: Clutter.ActorAlign.START });
timeLabel.clutter_text.line_wrap = false;
timeLabel.clutter_text.ellipsize = false;
- layout.attach(timeLabel, 1, index, 1, 1);
+ let preEllipsisLabel = new St.Label({ style_class: 'events-day-time-ellipses',
+ text: ELLIPSIS_CHAR,
+ y_align: Clutter.ActorAlign.START });
+ let postEllipsisLabel = new St.Label({ style_class: 'events-day-time-ellipses',
+ text: ELLIPSIS_CHAR,
+ y_align: Clutter.ActorAlign.START });
+ if (event.allDay || event.date >= periodBegin)
+ preEllipsisLabel.opacity = 0;
+ if (event.allDay || event.end <= periodEnd)
+ postEllipsisLabel.opacity = 0;
+
+ let timeLabelBoxLayout = new St.BoxLayout();
+ timeLabelBoxLayout.add(preEllipsisLabel);
+ timeLabelBoxLayout.add(timeLabel);
+ timeLabelBoxLayout.add(postEllipsisLabel);
+ layout.attach(timeLabelBoxLayout, 1, index, 1, 1);
let titleLabel = new St.Label({ style_class: 'events-day-task',
text: event.summary,
@@ -759,8 +786,8 @@ const EventsList = new Lang.Class({
layout.attach(titleLabel, rtl ? 0 : 2, index, 1, 1);
},
- _addPeriod: function(header, index, begin, end, includeDayName, showNothingScheduled) {
- let events = this._eventSource.getEvents(begin, end);
+ _addPeriod: function(header, index, periodBegin, periodEnd, includeDayName, showNothingScheduled) {
+ let events = this._eventSource.getEvents(periodBegin, periodEnd);
if (events.length == 0 && !showNothingScheduled)
return index;
@@ -771,15 +798,14 @@ const EventsList = new Lang.Class({
index++;
for (let n = 0; n < events.length; n++) {
- this._addEvent(events[n], index, includeDayName);
+ this._addEvent(events[n], index, includeDayName, periodBegin, periodEnd);
index++;
}
if (events.length == 0 && showNothingScheduled) {
- let now = new Date();
/* Translators: Text to show if there are no events */
- let nothingEvent = new CalendarEvent(now, now, _("Nothing Scheduled"), true);
- this._addEvent(nothingEvent, index, false);
+ let nothingEvent = new CalendarEvent(periodBegin, periodBegin, _("Nothing Scheduled"), true);
+ this._addEvent(nothingEvent, index, false, periodBegin, periodEnd);
index++;
}
diff --git a/js/ui/components/networkAgent.js b/js/ui/components/networkAgent.js
index 2a3412d..2d8d715 100644
--- a/js/ui/components/networkAgent.js
+++ b/js/ui/components/networkAgent.js
@@ -604,9 +604,15 @@ const NetworkAgent = new Lang.Class({
Name: 'NetworkAgent',
_init: function() {
- this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent',
- capabilities: NMClient.SecretAgentCapabilities.VPN_HINTS
- });
+ try {
+ this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent',
+ capabilities: NMClient.SecretAgentCapabilities.VPN_HINTS
+ });
+ } catch(e) {
+ // Support older versions without NetworkAgent:capabilities
+ this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent'
+ });
+ }
this._dialogs = { };
this._vpnRequests = { };
diff --git a/js/ui/dateMenu.js b/js/ui/dateMenu.js
index db8f2a5..8b0213c 100644
--- a/js/ui/dateMenu.js
+++ b/js/ui/dateMenu.js
@@ -147,7 +147,7 @@ const DateMenuButton = new Lang.Class({
let now = new Date();
return now.getYear() == date.getYear() &&
now.getMonth() == date.getMonth() &&
- now.getDay() == date.getDay();
+ now.getDate() == date.getDate();
},
_appInstalledChanged: function() {
diff --git a/js/ui/layout.js b/js/ui/layout.js
index c61376d..9228bd1 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -20,7 +20,6 @@ const Tweener = imports.ui.tweener;
const STARTUP_ANIMATION_TIME = 0.5;
const KEYBOARD_ANIMATION_TIME = 0.15;
const BACKGROUND_FADE_ANIMATION_TIME = 1.0;
-const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
// The message tray takes this much pressure
// in the pressure barrier at once to release it.
@@ -160,10 +159,10 @@ const LayoutManager = new Lang.Class({
this._isPopupWindowVisible = false;
this._startingUp = true;
- // Normally, the stage is always covered so Clutter doesn't need to clear
- // it; however it becomes visible during the startup animation
- // See the comment below for a longer explanation
- global.stage.background_color = DEFAULT_BACKGROUND_COLOR;
+ // We don't want to paint the stage background color because either
+ // the SystemBackground we create or the MetaBackgroundActor inside
+ // global.window_group covers the entirety of the screen.
+ global.stage.no_clear_hint = true;
// Set up stage hierarchy to group all UI actors under one container.
this.uiGroup = new Shell.GenericContainer({ name: 'uiGroup' });
@@ -591,10 +590,6 @@ const LayoutManager = new Lang.Class({
//
// When starting a normal user session, we want to grow it out of the middle
// of the screen.
- //
- // Usually, we don't want to paint the stage background color because the
- // MetaBackgroundActor inside global.window_group covers the entirety of the
- // screen. So, we set no_clear_hint at the end of the animation.
_prepareStartupAnimation: function() {
// During the initial transition, add a simple actor to block all events,
@@ -675,10 +670,6 @@ const LayoutManager = new Lang.Class({
},
_startupAnimationComplete: function() {
- // At this point, the UI group is covering everything, so
- // we no longer need to clear the stage
- global.stage.no_clear_hint = true;
-
this._coverPane.destroy();
this._coverPane = null;
diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js
index ccbf8cd..101c14c 100644
--- a/js/ui/magnifier.js
+++ b/js/ui/magnifier.js
@@ -1198,12 +1198,7 @@ const ZoomRegion = new Lang.Class({
// Add a background for when the magnified uiGroup is scrolled
// out of view (don't want to see desktop showing through).
- this._background = new Clutter.Actor({ background_color: Main.DEFAULT_BACKGROUND_COLOR,
- layout_manager: new Clutter.BinLayout(),
- width: global.screen_width,
- height: global.screen_height });
- let noiseTexture = (new Background.SystemBackground()).actor;
- this._background.add_actor(noiseTexture);
+ this._background = (new Background.SystemBackground()).actor;
mainGroup.add_actor(this._background);
// Clone the group that contains all of UI on the screen. This is the
diff --git a/js/ui/main.js b/js/ui/main.js
index f9bb59e..2459069 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -40,8 +40,6 @@ const Magnifier = imports.ui.magnifier;
const XdndHandler = imports.ui.xdndHandler;
const Util = imports.misc.util;
-const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
-
const A11Y_SCHEMA = 'org.gnome.desktop.a11y.keyboard';
const STICKY_KEYS_ENABLE = 'stickykeys-enable';
const GNOMESHELL_STARTED_MESSAGE_ID = 'f3ea493c22934e26811cd62abe8e203a';
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index cedb410..ad7c5c8 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -2432,8 +2432,22 @@ const MessageTray = new Lang.Class({
if (shouldShowNotification && nextNotification) {
let limited = this._busy || Main.layoutManager.bottomMonitor.inFullscreen;
let showNextNotification = (!limited || nextNotification.forFeedback || nextNotification.urgency == Urgency.CRITICAL);
- if (showNextNotification)
- this._showNotification();
+ if (showNextNotification) {
+ let len = this._notificationQueue.length;
+ if (len > 1) {
+ this._notificationQueue.length = 0;
+ let source = new SystemNotificationSource();
+ this.add(source);
+ let notification = new Notification(source, ngettext("%d new message", "%d new messages", len).format(len));
+ notification.setTransient(true);
+ notification.connect('clicked', Lang.bind(this, function() {
+ this.openTray();
+ }));
+ source.notify(notification);
+ } else {
+ this._showNotification();
+ }
+ }
}
} else if (this._notificationState == State.SHOWN) {
let expired = (this._userActiveWhileNotificationShown &&
diff --git a/js/ui/viewSelector.js b/js/ui/viewSelector.js
index e82dfb3..d0e8140 100644
--- a/js/ui/viewSelector.js
+++ b/js/ui/viewSelector.js
@@ -193,8 +193,10 @@ const ViewSelector = new Lang.Class({
// the windows to animate, but now we no longer want to
// show it given that we are now on the apps page or
// search page.
- if (this._activePage != this._workspacesPage)
+ if (this._activePage != this._workspacesPage) {
this._workspacesPage.opacity = 0;
+ this._workspacesPage.hide();
+ }
}));
Main.wm.addKeybinding('toggle-application-view',
Index: debian/changelog
===================================================================
--- debian/changelog (révision 43950)
+++ debian/changelog (copie de travail)
@@ -1,3 +1,16 @@
+gnome-shell (3.14.2-1) unstable; urgency=medium
+
+ * gnome-shell.gsettings-override: remove shotwell which is no longer
+ part of the default installation.
+ * New upstream bugfix release.
+ + Summarize notifications instead of queuing up.
+ * 01_network_list.patch: patch from upstream git. Fix an UI bug when
+ removing network connections.
+ * 02_auth_prompt.patch: patch from upstream git. Fix the prompt with
+ disable_user_list after canceling an attempt. Closes: #683338.
+
+ -- Josselin Mouette <joss@debian.org> Sun, 30 Nov 2014 13:52:46 +0100
+
gnome-shell (3.14.1-2) unstable; urgency=medium
[ Laurent Bigonville ]
Index: debian/gnome-shell.gsettings-override
===================================================================
--- debian/gnome-shell.gsettings-override (révision 43950)
+++ debian/gnome-shell.gsettings-override (copie de travail)
@@ -1,2 +1,2 @@
[org.gnome.shell]
-favorite-apps=[ 'iceweasel.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'org.gnome.Nautilus.desktop', 'yelp.desktop' ]
+favorite-apps=[ 'iceweasel.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'org.gnome.Nautilus.desktop', 'yelp.desktop' ]
Index: debian/control
===================================================================
--- debian/control (révision 43950)
+++ debian/control (copie de travail)
@@ -6,7 +6,7 @@
Section: gnome
Priority: optional
Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
-Uploaders: Andreas Henriksson <andreas@fatal.se>, Laurent Bigonville <bigon@debian.org>
+Uploaders: Andreas Henriksson <andreas@fatal.se>, Jordi Mallach <jordi@debian.org>, Josselin Mouette <joss@debian.org>, Laurent Bigonville <bigon@debian.org>
Build-Depends: autotools-dev,
cdbs,
debhelper (>= 8.1.3~),
Index: debian/patches/01_network_list.patch
===================================================================
--- debian/patches/01_network_list.patch (révision 0)
+++ debian/patches/01_network_list.patch (copie de travail)
@@ -0,0 +1,32 @@
+From 86618ce1f963be53410ac5e68d99a8b7bb82e0c6 Mon Sep 17 00:00:00 2001
+From: Ryan Lortie <desrt@desrt.ca>
+Date: Sun, 16 Nov 2014 15:50:14 -0800
+Subject: network: properly remove connections from list
+
+Due to a typo we were always removing the first (index 0) connection
+from the global list of connections instead of the correct one.
+
+This resulted in some connections remaining in the shell's connection
+list long after they were removed. In particular, this resulted in
+multiple copies of a bluetooth connection appearing after suspend/resume
+(when the device was readded and the cached connection list was
+rescanned).
+
+https://bugzilla.gnome.org/show_bug.cgi?id=740227
+
+diff --git a/js/ui/status/network.js b/js/ui/status/network.js
+index 049406d..4f02d78 100644
+--- a/js/ui/status/network.js
++++ b/js/ui/status/network.js
+@@ -1866,7 +1866,7 @@ const NMApplet = new Lang.Class({
+ _connectionRemoved: function(connection) {
+ let pos = this._connections.indexOf(connection);
+ if (pos != -1)
+- this._connections.splice(connection, 1);
++ this._connections.splice(pos, 1);
+
+ let section = connection._section;
+
+--
+cgit v0.10.1
+
Index: debian/patches/02_auth_prompt.patch
===================================================================
--- debian/patches/02_auth_prompt.patch (révision 0)
+++ debian/patches/02_auth_prompt.patch (copie de travail)
@@ -0,0 +1,34 @@
+From 2ceaa05a5a3aa3e8b9c67877eb968b2813fb4d18 Mon Sep 17 00:00:00 2001
+From: Ray Strode <rstrode@redhat.com>
+Date: Tue, 7 Oct 2014 14:30:34 -0400
+Subject: gdm: fix sensitivity of auth prompt when cancelling early and user
+ list is disabled
+
+If the user list is disabled and the user clicks cancel quickly enough
+after typing their username, they can get in a state where the
+auth prompt gets stuck in the insensitive state.
+
+This is because the login dialog code makes the prompt insensitive
+while while pam is processing the provided username, but the prompt
+only makes itself sensitive again when it is hidden.
+
+This commit makes it sensitive right before asking for a username again.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=740141
+
+diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
+index ceaccaa..6a8ae0a 100644
+--- a/js/gdm/loginDialog.js
++++ b/js/gdm/loginDialog.js
+@@ -643,6 +643,8 @@ const LoginDialog = new Lang.Class({
+ realmManager.release();
+ }));
+ this._updateCancelButton();
++
++ this._authPrompt.updateSensitivity(true);
+ this._showPrompt();
+ },
+
+--
+cgit v0.10.1
+
Index: debian/patches/series
===================================================================
--- debian/patches/series (révision 43950)
+++ debian/patches/series (copie de travail)
@@ -1,3 +1,5 @@
+01_network_list.patch
+02_auth_prompt.patch
#10-make-NetworkManager-optional.patch
27-nm-libexec-path.patch
#30-remoteMenu-Prevent-the-shell-from-becoming-unrespons.patch
Reply to: