--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock
Please allow the upload of a new gnome-shell version. This will be the
last upstream on the 3.14 branch, and it includes only bugfixes and
translations, including a workaround for the very annoying bug with the
proprietary nVidia driver.
As with mutter, I can upload a targeted fix for the nVidia problem if
it’s too much.
3.14.4
======
* Fix erroneous week numbers in calendar [Florian; #736722]
* Make slider scrolling smoother [Adel; #742648]
* Fix current day highlight on day change [Sebastian; #742492]
* Do not wake up the screen for disabled notifications [Florian; #744114]
* gdm: Fix user list accessibility [Florian; #729603]
* Work around background corruption with NVIDIA driver [Rui; #739178]
* Misc. bug fixes [Florian, Rui, Michele; #744575, #743993, #745245, #745570,
#737502]
Contributors:
Michele, Adel Gadllah, Sebastian Keller, Rui Matos, Florian Müllner
Translations:
Matej Urbančič [sl], Samir Ribic [bs]
3.14.3
======
* Properly remove network connections from list [Ryan; #740227]
* Fix handling of cancel button on login screen [Ray; #740141]
* Fix build when using dash as default shell [Alexander; #739241]
* Make event list in calendar scrollable [Stalin; #705115]
* Fix calendar-server crash on DBus timeout [Giovanni; #735308]
* Fix gestures triggering erroneously [Florian; #740237]
Contributors:
Giovanni Campagna, Ryan Lortie, Florian Müllner, Stalin Pereira, Ray Strode,
Alexander Tsoy
gnome-shell (3.14.4-1) unstable; urgency=medium
* New upstream translation and bugfix release.
+ Includes workaround for #768896 which is very annoying for users
of the proprietary nvidia driver.
* 01_network_list.patch, 02_auth_prompt.patch,
50-compute-weeknumber-with-gdatetime.patch: dropped, merged
upstream.
* Bump (build-)dependencies on mutter as usual.
unblock gnome-shell/3.14.4-1
Thanks for considering.
--
.''`. Josselin Mouette
: :' :
`. `'
`-
diff --git a/NEWS b/NEWS
index 3aa03e6..25bcda3 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,33 @@
+3.14.4
+======
+* Fix erroneous week numbers in calendar [Florian; #736722]
+* Make slider scrolling smoother [Adel; #742648]
+* Fix current day highlight on day change [Sebastian; #742492]
+* Do not wake up the screen for disabled notifications [Florian; #744114]
+* gdm: Fix user list accessibility [Florian; #729603]
+* Work around background corruption with NVIDIA driver [Rui; #739178]
+* Misc. bug fixes [Florian, Rui, Michele; #744575, #743993, #745245, #745570,
+ #737502]
+
+Contributors:
+ Michele, Adel Gadllah, Sebastian Keller, Rui Matos, Florian Müllner
+
+Translations:
+ Matej Urbančič [sl], Samir Ribic [bs]
+
+3.14.3
+======
+* Properly remove network connections from list [Ryan; #740227]
+* Fix handling of cancel button on login screen [Ray; #740141]
+* Fix build when using dash as default shell [Alexander; #739241]
+* Make event list in calendar scrollable [Stalin; #705115]
+* Fix calendar-server crash on DBus timeout [Giovanni; #735308]
+* Fix gestures triggering erroneously [Florian; #740237]
+
+Contributors:
+ Giovanni Campagna, Ryan Lortie, Florian Müllner, Stalin Pereira, Ray Strode,
+ Alexander Tsoy
+
3.14.2
======
* Do not hard-depend on latest NetworkManager [Florian; #738485]
diff --git a/configure.ac b/configure.ac
index 790b7b2..2a779e8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
AC_PREREQ(2.63)
-AC_INIT([gnome-shell],[3.14.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
+AC_INIT([gnome-shell],[3.14.4],[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.2
+MUTTER_MIN_VERSION=3.14.4
GTK_MIN_VERSION=3.13.2
GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3
@@ -232,7 +232,9 @@ esac
AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS"
AC_SUBST(AM_CFLAGS)
-BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}"
+if test -z "${BROWSER_PLUGIN_DIR}"; then
+ BROWSER_PLUGIN_DIR="\${libdir}/mozilla/plugins"
+fi
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
AC_CONFIG_FILES([
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index ca4db89..a4d69d9 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -260,6 +260,7 @@ const AuthPrompt = new Lang.Class({
_onVerificationComplete: function() {
this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
+ this.cancelButton.reactive = false;
},
_onReset: function() {
@@ -431,6 +432,7 @@ const AuthPrompt = new Lang.Class({
reset: function() {
let oldStatus = this.verificationStatus;
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
+ this.cancelButton.reactive = true;
if (oldStatus == AuthPromptStatus.VERIFYING)
this._userVerifier.cancel();
@@ -499,6 +501,9 @@ const AuthPrompt = new Lang.Class({
},
cancel: function() {
+ if (this.verificationStatus == AuthPromptStatus.NOT_VERIFYING || this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) {
+ return;
+ }
this.reset();
this.emit('cancelled');
}
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
index 6a8ae0a..7fbeb3e 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -22,6 +22,7 @@ const Clutter = imports.gi.Clutter;
const Gdm = imports.gi.Gdm;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
+const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
@@ -70,6 +71,9 @@ const UserListItem = new Lang.Class({
this._userWidget = new UserWidget.UserWidget(this.user);
layout.add(this._userWidget.actor);
+ this._userWidget.actor.bind_property('label-actor', this.actor, 'label-actor',
+ GObject.BindingFlags.SYNC_CREATE);
+
this._timedLoginIndicator = new St.Bin({ style_class: 'login-dialog-timed-login-indicator',
scale_x: 0 });
layout.add(this._timedLoginIndicator);
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index 4a12698..ae40f3e 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -1658,7 +1658,10 @@ const AppIcon = new Lang.Class({
if (!isPoppedUp)
this._onMenuPoppedDown();
}));
- Main.overview.connect('hiding', Lang.bind(this, function () { this._menu.close(); }));
+ let id = Main.overview.connect('hiding', Lang.bind(this, function () { this._menu.close(); }));
+ this.actor.connect('destroy', function() {
+ Main.overview.disconnect(id);
+ });
this._menuManager.addMenu(this._menu);
}
diff --git a/js/ui/calendar.js b/js/ui/calendar.js
index e0e6a9e..52f6cb5 100644
--- a/js/ui/calendar.js
+++ b/js/ui/calendar.js
@@ -2,6 +2,7 @@
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
+const Gtk = imports.gi.Gtk;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
const St = imports.gi.St;
@@ -234,11 +235,24 @@ const DBusEventSource = new Lang.Class({
this._initialized = false;
this._dbusProxy = new CalendarServer();
this._dbusProxy.init_async(GLib.PRIORITY_DEFAULT, null, Lang.bind(this, function(object, result) {
+ let loaded = false;
+
try {
this._dbusProxy.init_finish(result);
+ loaded = true;
} catch(e) {
- log('Error loading calendars: ' + e.message);
- return;
+ if (e.matches(Gio.DBusError, Gio.DBusError.TIMED_OUT)) {
+ // Ignore timeouts and install signals as normal, because with high
+ // probability the service will appear later on, and we will get a
+ // NameOwnerChanged which will finish loading
+ //
+ // (But still _initialized to false, because the proxy does not know
+ // about the HasCalendars property and would cause an exception trying
+ // to read it)
+ } else {
+ log('Error loading calendars: ' + e.message);
+ return;
+ }
}
this._dbusProxy.connectSignal('Changed', Lang.bind(this, this._onChanged));
@@ -254,9 +268,11 @@ const DBusEventSource = new Lang.Class({
this.emit('notify::has-calendars');
}));
- this._initialized = true;
- this.emit('notify::has-calendars');
- this._onNameAppeared();
+ this._initialized = loaded;
+ if (loaded) {
+ this.emit('notify::has-calendars');
+ this._onNameAppeared();
+ }
}));
},
@@ -278,6 +294,7 @@ const DBusEventSource = new Lang.Class({
},
_onNameAppeared: function(owner) {
+ this._initialized = true;
this._resetCache();
this._loadEvents(true);
},
@@ -586,6 +603,7 @@ const Calendar = new Lang.Class({
beginDate.setHours(12);
this._calendarBegin = new Date(beginDate);
+ this._markedAsToday = now;
let year = beginDate.getYear();
@@ -677,7 +695,7 @@ const Calendar = new Lang.Class({
else
this._monthLabel.text = this._selectedDate.toLocaleFormat(this._headerFormat);
- if (!this._calendarBegin || !_sameMonth(this._selectedDate, this._calendarBegin))
+ if (!this._calendarBegin || !_sameMonth(this._selectedDate, this._calendarBegin) || !_sameDay(now, this._markedAsToday))
this._rebuildCalendar();
this._buttons.forEach(Lang.bind(this, function(button) {
@@ -714,6 +732,8 @@ const EventsList = new Lang.Class({
},
_addEvent: function(event, index, includeDayName, periodBegin, periodEnd) {
+ let eventBox = new St.BoxLayout();
+ eventBox.set_vertical(false);
let dayString;
if (includeDayName) {
if (event.date >= periodBegin)
@@ -734,7 +754,7 @@ const EventsList = new Lang.Class({
let rtl = this.actor.get_text_direction() == Clutter.TextDirection.RTL;
let layout = this.actor.layout_manager;
- layout.attach(dayLabel, rtl ? 2 : 0, index, 1, 1);
+ eventBox.add_actor(dayLabel);
let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);
let timeString = _formatEventTime(event, clockFormat, periodBegin, periodEnd);
let timeLabel = new St.Label({ style_class: 'events-day-time',
@@ -754,11 +774,12 @@ const EventsList = new Lang.Class({
if (event.allDay || event.end <= periodEnd)
postEllipsisLabel.opacity = 0;
- let timeLabelBoxLayout = new St.BoxLayout();
+ let timeLabelBoxLayout = new St.BoxLayout({ x_align: Clutter.ActorAlign.START });
timeLabelBoxLayout.add(preEllipsisLabel);
timeLabelBoxLayout.add(timeLabel);
timeLabelBoxLayout.add(postEllipsisLabel);
- layout.attach(timeLabelBoxLayout, 1, index, 1, 1);
+ timeLabelBoxLayout.set_size(50, 1);
+ eventBox.add_actor(timeLabelBoxLayout);
let titleLabel = new St.Label({ style_class: 'events-day-task',
text: event.summary,
@@ -766,7 +787,8 @@ const EventsList = new Lang.Class({
titleLabel.clutter_text.line_wrap = true;
titleLabel.clutter_text.ellipsize = false;
- layout.attach(titleLabel, rtl ? 0 : 2, index, 1, 1);
+ eventBox.add_actor(titleLabel);
+ this._eventListBox.add_actor(eventBox);
},
_addPeriod: function(header, index, periodBegin, periodEnd, includeDayName, showNothingScheduled) {
@@ -776,8 +798,7 @@ const EventsList = new Lang.Class({
return index;
let label = new St.Label({ style_class: 'events-day-header', text: header });
- let layout = this.actor.layout_manager;
- layout.attach(label, 0, index, 3, 1);
+ this._eventListBox.add_actor(label);
index++;
for (let n = 0; n < events.length; n++) {
@@ -796,8 +817,6 @@ const EventsList = new Lang.Class({
},
_showOtherDay: function(day) {
- this.actor.destroy_all_children();
-
let dayBegin = _getBeginningOfDay(day);
let dayEnd = _getEndOfDay(day);
@@ -813,7 +832,6 @@ const EventsList = new Lang.Class({
},
_showToday: function() {
- this.actor.destroy_all_children();
let index = 0;
let now = new Date();
@@ -858,6 +876,24 @@ const EventsList = new Lang.Class({
if (this._eventSource.isLoading)
return;
+ this.actor.destroy_all_children();
+
+ let layout = this.actor.layout_manager;
+
+ this._eventListContainer = new St.BoxLayout({ x_expand: true, y_expand: true });
+ this._eventListContainer.set_vertical(true);
+
+ this._eventListBox = new St.BoxLayout();
+ this._eventListBox.set_vertical(true);
+
+ let eventScrollView = new St.ScrollView({style_class: 'vfade',
+ hscrollbar_policy: Gtk.PolicyType.NEVER,
+ vscrollbar_policy: Gtk.PolicyType.AUTOMATIC});
+ eventScrollView.add_actor(this._eventListBox);
+ this._eventListContainer.add_actor(eventScrollView);
+
+ layout.attach(this._eventListContainer, 0, 0, 1, 1);
+
let today = new Date();
if (_sameDay (this._date, today)) {
this._showToday();
diff --git a/js/ui/dash.js b/js/ui/dash.js
index 99635cd..01727e3 100644
--- a/js/ui/dash.js
+++ b/js/ui/dash.js
@@ -513,10 +513,13 @@ const Dash = new Lang.Class({
this._syncLabel(item, appIcon);
}));
- Main.overview.connect('hiding', Lang.bind(this, function() {
+ let id = Main.overview.connect('hiding', Lang.bind(this, function() {
this._labelShowing = false;
item.hideLabel();
}));
+ item.child.connect('destroy', function() {
+ Main.overview.disconnect(id);
+ });
if (appIcon) {
appIcon.connect('sync-tooltip', Lang.bind(this, function() {
diff --git a/js/ui/dateMenu.js b/js/ui/dateMenu.js
index 8b0213c..37c8cb1 100644
--- a/js/ui/dateMenu.js
+++ b/js/ui/dateMenu.js
@@ -59,7 +59,7 @@ const DateMenuButton = new Lang.Class({
// Fill up the first column
- vbox = new St.BoxLayout({vertical: true});
+ vbox = new St.BoxLayout({vertical: true, x_expand: true, y_expand: true });
hbox.add(vbox);
// Date
@@ -96,11 +96,11 @@ const DateMenuButton = new Lang.Class({
this._openCalendarItem = new PopupMenu.PopupMenuItem(_("Open Calendar"));
this._openCalendarItem.connect('activate', Lang.bind(this, this._onOpenCalendarActivate));
- vbox.add(this._openCalendarItem.actor, {y_align: St.Align.END, expand: true, y_fill: false});
+ vbox.add(this._openCalendarItem.actor, {y_align: St.Align.END, expand: false, y_fill: false});
this._openClocksItem = new PopupMenu.PopupMenuItem(_("Open Clocks"));
this._openClocksItem.connect('activate', Lang.bind(this, this._onOpenClocksActivate));
- vbox.add(this._openClocksItem.actor, {y_align: St.Align.END, expand: true, y_fill: false});
+ vbox.add(this._openClocksItem.actor, {y_align: St.Align.END, expand: false, y_fill: false});
Shell.AppSystem.get_default().connect('installed-changed',
Lang.bind(this, this._appInstalledChanged));
diff --git a/js/ui/edgeDragAction.js b/js/ui/edgeDragAction.js
index 692da41..46e96d7 100644
--- a/js/ui/edgeDragAction.js
+++ b/js/ui/edgeDragAction.js
@@ -6,6 +6,8 @@ const Meta = imports.gi.Meta;
const Clutter = imports.gi.Clutter;
const St = imports.gi.St;
+const Main = imports.ui.main;
+
const EDGE_THRESHOLD = 20;
const DRAG_DISTANCE = 80;
@@ -13,9 +15,10 @@ const EdgeDragAction = new Lang.Class({
Name: 'EdgeDragAction',
Extends: Clutter.GestureAction,
- _init : function(side) {
+ _init : function(side, allowedModes) {
this.parent();
this._side = side;
+ this._allowedModes = allowedModes;
this.set_n_touch_points(1);
global.display.connect('grab-op-begin', Lang.bind(this, function() {
@@ -34,6 +37,9 @@ const EdgeDragAction = new Lang.Class({
if (this.get_n_current_points() == 0)
return false;
+ if (!(this._allowedModes & Main.keybindingMode))
+ return false;
+
let [x, y] = this.get_press_coords(0);
let monitorRect = this._getMonitorRect(x, y);
diff --git a/js/ui/layout.js b/js/ui/layout.js
index 9228bd1..e9aab13 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -11,6 +11,7 @@ const St = imports.gi.St;
const Background = imports.ui.background;
const BackgroundMenu = imports.ui.backgroundMenu;
+const LoginManager = imports.misc.loginManager;
const DND = imports.ui.dnd;
const Main = imports.ui.main;
@@ -248,6 +249,18 @@ const LayoutManager = new Lang.Class({
global.screen.connect('in-fullscreen-changed',
Lang.bind(this, this._updateFullscreen));
this._monitorsChanged();
+
+ // NVIDIA drivers don't preserve FBO contents across
+ // suspend/resume, see
+ // https://bugzilla.gnome.org/show_bug.cgi?id=739178
+ if (Shell.util_need_background_refresh()) {
+ LoginManager.getLoginManager().connect('prepare-for-sleep',
+ function(lm, suspending) {
+ if (suspending)
+ return;
+ Meta.Background.refresh_all();
+ });
+ }
},
// This is called by Main after everything else is constructed
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index ad7c5c8..a034fc3 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -1951,7 +1951,9 @@ const MessageTray = new Lang.Class({
this._messageTrayMenuButton.actor.connect('key-press-event',
Lang.bind(this, this._onTrayButtonKeyPress));
- let gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM);
+ let gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM,
+ Shell.KeyBindingMode.NORMAL |
+ Shell.KeyBindingMode.OVERVIEW);
gesture.connect('activated', Lang.bind(this, this.toggle));
global.stage.add_action(gesture);
},
diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
index 32ef1ca..3a84468 100644
--- a/js/ui/screenShield.js
+++ b/js/ui/screenShield.js
@@ -301,7 +301,8 @@ const NotificationsBox = new Lang.Class({
});
this._updateVisibility();
- this.emit('wake-up-screen');
+ if (obj.sourceBox.visible)
+ this.emit('wake-up-screen');
}
},
diff --git a/js/ui/slider.js b/js/ui/slider.js
index 383dca4..8844d9a 100644
--- a/js/ui/slider.js
+++ b/js/ui/slider.js
@@ -197,7 +197,7 @@ const Slider = new Lang.Class({
let [dx, dy] = event.get_scroll_delta();
// Even though the slider is horizontal, use dy to match
// the UP/DOWN above.
- delta = -dy / 10;
+ delta = -dy * SLIDER_SCROLL_STEP;
}
this._value = Math.min(Math.max(0, this._value + delta), 1);
diff --git a/js/ui/status/system.js b/js/ui/status/system.js
index a2ad289..b053694 100644
--- a/js/ui/status/system.js
+++ b/js/ui/status/system.js
@@ -285,7 +285,7 @@ const Indicator = new Lang.Class({
let disabled = Main.sessionMode.isLocked ||
(Main.sessionMode.isGreeter &&
this._loginScreenSettings.get_boolean(DISABLE_RESTART_KEY));
- this._suspendAction.visible = this._haveShutdown && !disabled;
+ this._suspendAction.visible = this._haveSuspend && !disabled;
this._updateActionsVisibility();
},
diff --git a/js/ui/userWidget.js b/js/ui/userWidget.js
index 314aae0..5286ad1 100644
--- a/js/ui/userWidget.js
+++ b/js/ui/userWidget.js
@@ -6,6 +6,7 @@ const Clutter = imports.gi.Clutter;
const AccountsService = imports.gi.AccountsService;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
+const GObject = imports.gi.GObject;
const Lang = imports.lang;
const St = imports.gi.St;
@@ -117,6 +118,7 @@ const UserWidgetLabel = new Lang.Class({
this._currentLabel = this._realNameLabel;
else
this._currentLabel = this._userNameLabel;
+ this.label_actor = this._currentLabel;
let childBox = new Clutter.ActorBox();
childBox.x1 = 0;
@@ -158,6 +160,9 @@ const UserWidget = new Lang.Class({
this._label = new UserWidgetLabel(user);
this.actor.add_child(this._label);
+ this._label.bind_property('label-actor', this.actor, 'label-actor',
+ GObject.BindingFlags.SYNC_CREATE);
+
this._userLoadedId = this._user.connect('notify::is-loaded', Lang.bind(this, this._updateUser));
this._userChangedId = this._user.connect('changed', Lang.bind(this, this._updateUser));
this._updateUser();
diff --git a/js/ui/viewSelector.js b/js/ui/viewSelector.js
index d0e8140..c2ef9e5 100644
--- a/js/ui/viewSelector.js
+++ b/js/ui/viewSelector.js
@@ -65,7 +65,8 @@ const ShowOverviewAction = new Lang.Class({
},
vfunc_gesture_prepare : function(action, actor) {
- return this.get_n_current_points() == this.get_n_touch_points();
+ return Main.keybindingMode == Shell.KeyBindingMode.NORMAL &&
+ this.get_n_current_points() == this.get_n_touch_points();
},
_getBoundingRect : function(motion) {
@@ -213,9 +214,13 @@ const ViewSelector = new Lang.Class({
Shell.KeyBindingMode.OVERVIEW,
Lang.bind(Main.overview, Main.overview.toggle));
- let gesture;
-
- gesture = new EdgeDragAction.EdgeDragAction(St.Side.LEFT);
+ let side;
+ if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
+ side = St.Side.RIGHT;
+ else
+ side = St.Side.LEFT;
+ let gesture = new EdgeDragAction.EdgeDragAction(side,
+ Shell.KeyBindingMode.NORMAL);
gesture.connect('activated', Lang.bind(this, function() {
if (Main.overview.visible)
Main.overview.hide();
diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
index 60ab30f..e332552 100644
--- a/js/ui/windowManager.js
+++ b/js/ui/windowManager.js
@@ -478,7 +478,9 @@ const WorkspaceSwitchAction = new Lang.Class({
},
vfunc_gesture_prepare : function(action, actor) {
- return this.get_n_current_points() == this.get_n_touch_points();
+ let allowedModes = Shell.KeyBindingMode.NORMAL | Shell.KeyBindingMode.OVERVIEW;
+ return this.get_n_current_points() == this.get_n_touch_points() &&
+ (allowedModes & Main.keybindingMode);
},
vfunc_gesture_end : function(action, actor) {
@@ -526,7 +528,7 @@ const AppSwitchAction = new Lang.Class({
},
vfunc_gesture_prepare : function(action, actor) {
- if (Main.overview.visible) {
+ if (Main.keybindingMode != Shell.KeyBindingMode.NORMAL) {
this.cancel();
return false;
}
diff --git a/js/ui/workspace.js b/js/ui/workspace.js
index e9ab167..e6cf41d 100644
--- a/js/ui/workspace.js
+++ b/js/ui/workspace.js
@@ -156,7 +156,6 @@ const WindowClone = new Lang.Class({
this.actor.add_action(clickAction);
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPress));
- this.actor.connect('enter-event', Lang.bind(this, this._onEnter));
this._draggable = DND.makeDraggable(this.actor,
{ restoreOnSuccess: true,
@@ -353,10 +352,6 @@ const WindowClone = new Lang.Class({
return false;
},
- _onEnter: function() {
- this.actor.grab_key_focus();
- },
-
_onClicked: function(action, actor) {
this._activate();
},
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index ba3a120..e7a3a8c 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -538,6 +538,7 @@ const WorkspacesDisplay = new Lang.Class({
for (let i = 0; i < this._workspacesViews.length; i++)
this._workspacesViews[i].destroy();
+ this._primaryIndex = Main.layoutManager.primaryIndex;
this._workspacesViews = [];
let monitors = Main.layoutManager.monitors;
for (let i = 0; i < monitors.length; i++) {
diff --git a/po/LINGUAS b/po/LINGUAS
index 3bd161a..fac81e5 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -7,6 +7,7 @@ be
bg
bn
bn_IN
+bs
ca
ca@valencia
cs
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index c3a821c..31998fe 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -1,2 +1,4 @@
data/org.gnome.shell.evolution.calendar.gschema.xml.in
src/calendar-server/evolution-calendar.desktop.in
+# Meh, autofools :-(
+sub/src/calendar-server/evolution-calendar.desktop.in
diff --git a/po/bs.po b/po/bs.po
new file mode 100644
index 0000000..2b0d9b3
diff --git a/po/sl.po b/po/sl.po
index 2cfa7e5..b867c68 100644
diff --git a/src/calendar-server/calendar-sources.c b/src/calendar-server/calendar-sources.c
index 219fc45..804fb9c 100644
--- a/src/calendar-server/calendar-sources.c
+++ b/src/calendar-server/calendar-sources.c
@@ -176,18 +176,54 @@ static void
calendar_sources_init (CalendarSources *sources)
{
GError *error = NULL;
+ GDBusConnection *session_bus;
+ GVariant *result;
sources->priv = CALENDAR_SOURCES_GET_PRIVATE (sources);
- /* XXX Not sure what to do if this fails.
- * Should this class implement GInitable or pass the
- * registry in as a G_PARAM_CONSTRUCT_ONLY property? */
- sources->priv->registry = e_source_registry_new_sync (NULL, &error);
+ /* WORKAROUND: the hardcoded timeout for e_source_registry_new_sync()
+ (and other library calls that eventually call g_dbus_proxy_new[_sync]())
+ is 25 seconds. This has been shown to be too small for
+ evolution-source-registry in certain cases (slow disk, concurrent IO,
+ many configured sources), so we first ensure that the service
+ starts with a manual call and a higher timeout.
+
+ HACK: every time the DBus API is bumped in e-d-s we need
+ to update this!
+ */
+ session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+ if (session_bus == NULL)
+ {
+ g_error ("Failed to connect to the session bus: %s", error->message);
+ }
+
+ result = g_dbus_connection_call_sync (session_bus, "org.freedesktop.DBus",
+ "/", "org.freedesktop.DBus",
+ "StartServiceByName",
+ g_variant_new ("(su)",
+ "org.gnome.evolution.dataserver.Sources3",
+ 0),
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ 60 * 1000,
+ NULL, &error);
+ if (result != NULL)
+ {
+ g_variant_unref (result);
+ sources->priv->registry = e_source_registry_new_sync (NULL, &error);
+ }
+
if (error != NULL)
{
- g_error ("%s: %s", G_STRFUNC, error->message);
+ /* Any error is fatal, but we don't want to crash gnome-shell-calendar-server
+ because of e-d-s problems. So just exit here.
+ */
+ g_warning ("Failed to start evolution-source-registry: %s", error->message);
+ exit(EXIT_FAILURE);
}
+ g_object_unref (session_bus);
+
sources->priv->source_added_id = g_signal_connect (sources->priv->registry,
"source-added",
G_CALLBACK (calendar_sources_registry_source_changed_cb),
diff --git a/src/shell-util.c b/src/shell-util.c
index 5ae4fdb..8792403 100644
--- a/src/shell-util.c
+++ b/src/shell-util.c
@@ -5,6 +5,9 @@
#include <sys/types.h>
#include <sys/wait.h>
+#include <GL/gl.h>
+#include <cogl/cogl.h>
+
#include "shell-util.h"
#include <glib/gi18n-lib.h>
#include <gtk/gtk.h>
@@ -330,3 +333,33 @@ shell_util_cursor_tracker_to_clutter (MetaCursorTracker *tracker,
clutter_actor_hide (CLUTTER_ACTOR (texture));
}
}
+
+typedef const gchar *(*ShellGLGetString) (GLenum);
+
+static const gchar *
+get_gl_vendor (void)
+{
+ static const gchar *vendor = NULL;
+
+ if (!vendor)
+ {
+ ShellGLGetString gl_get_string;
+ gl_get_string = (ShellGLGetString) cogl_get_proc_address ("glGetString");
+ if (gl_get_string)
+ vendor = gl_get_string (GL_VENDOR);
+ }
+
+ return vendor;
+}
+
+gboolean
+shell_util_need_background_refresh (void)
+{
+ if (!clutter_check_windowing_backend (CLUTTER_WINDOWING_X11))
+ return FALSE;
+
+ if (g_strcmp0 (get_gl_vendor (), "NVIDIA Corporation") == 0)
+ return TRUE;
+
+ return FALSE;
+}
diff --git a/src/shell-util.h b/src/shell-util.h
index d7ab4fd..be20083 100644
--- a/src/shell-util.h
+++ b/src/shell-util.h
@@ -44,6 +44,8 @@ GdkPixbuf *shell_util_create_pixbuf_from_data (const guchar *data,
void shell_util_cursor_tracker_to_clutter (MetaCursorTracker *tracker,
ClutterTexture *texture);
+gboolean shell_util_need_background_refresh (void);
+
G_END_DECLS
#endif /* __SHELL_UTIL_H__ */
Index: debian/control
===================================================================
--- debian/control (révision 44183)
+++ debian/control (révision 44184)
@@ -36,7 +36,7 @@
libgstreamer1.0-dev (>= 0.11.92),
libgtk-3-dev (>= 3.13.2),
libibus-1.0-dev,
- libmutter-dev (>= 3.14.2),
+ libmutter-dev (>= 3.14.4),
libnm-glib-dev (>= 0.9.8) [linux-any],
libnm-glib-vpn-dev (>= 0.9.8) [linux-any],
libnm-gtk-dev (>= 0.9.8) [linux-any],
@@ -79,7 +79,7 @@
gir1.2-gnomedesktop-3.0 (>= 3.12.0),
gir1.2-gtk-3.0 (>= 3.8),
gir1.2-ibus-1.0 (>= 1.5.2),
- gir1.2-mutter-3.0 (>= 3.14.2),
+ gir1.2-mutter-3.0 (>= 3.14.4),
gir1.2-networkmanager-1.0 [linux-any],
gir1.2-nmgtk-1.0 (>= 0.9.8) [linux-any],
gir1.2-pango-1.0,
@@ -95,7 +95,7 @@
gnome-themes-standard,
gnome-backgrounds (>= 3.13.90),
gsettings-desktop-schemas (>= 3.11),
- mutter (>= 3.14.2),
+ mutter (>= 3.14.4),
python (>= 2.6),
telepathy-mission-control-5,
Recommends: gkbd-capplet,
Index: debian/control.in
===================================================================
--- debian/control.in (révision 44183)
+++ debian/control.in (révision 44184)
@@ -32,7 +32,7 @@
libgstreamer1.0-dev (>= 0.11.92),
libgtk-3-dev (>= 3.13.2),
libibus-1.0-dev,
- libmutter-dev (>= 3.14.2),
+ libmutter-dev (>= 3.14.4),
libnm-glib-dev (>= 0.9.8) [linux-any],
libnm-glib-vpn-dev (>= 0.9.8) [linux-any],
libnm-gtk-dev (>= 0.9.8) [linux-any],
@@ -75,7 +75,7 @@
gir1.2-gnomedesktop-3.0 (>= 3.12.0),
gir1.2-gtk-3.0 (>= 3.8),
gir1.2-ibus-1.0 (>= 1.5.2),
- gir1.2-mutter-3.0 (>= 3.14.2),
+ gir1.2-mutter-3.0 (>= 3.14.4),
gir1.2-networkmanager-1.0 [linux-any],
gir1.2-nmgtk-1.0 (>= 0.9.8) [linux-any],
gir1.2-pango-1.0,
@@ -91,7 +91,7 @@
gnome-themes-standard,
gnome-backgrounds (>= 3.13.90),
gsettings-desktop-schemas (>= 3.11),
- mutter (>= 3.14.2),
+ mutter (>= 3.14.4),
python (>= 2.6),
telepathy-mission-control-5,
Recommends: gkbd-capplet,
Index: debian/changelog
===================================================================
--- debian/changelog (révision 44183)
+++ debian/changelog (révision 44184)
@@ -1,3 +1,15 @@
+gnome-shell (3.14.4-1) unstable; urgency=medium
+
+ * New upstream translation and bugfix release.
+ + Includes workaround for #768896 which is very annoying for users
+ of the proprietary nvidia driver.
+ * 01_network_list.patch, 02_auth_prompt.patch,
+ 50-compute-weeknumber-with-gdatetime.patch: dropped, merged
+ upstream.
+ * Bump (build-)dependencies on mutter as usual.
+
+ -- Josselin Mouette <j...@debian.org> Thu, 26 Mar 2015 21:44:04 +0100
+
gnome-shell (3.14.2-3) unstable; urgency=medium
* Add missing dependency on mutter. Closes: #764715.
Index: debian/patches/02_auth_prompt.patch
===================================================================
Index: debian/patches/01_network_list.patch
===================================================================
Index: debian/patches/50-compute-weeknumber-with-gdatetime.patch
===================================================================
Index: debian/patches/series
===================================================================
--- debian/patches/series (révision 44183)
+++ debian/patches/series (révision 44184)
@@ -1,9 +1,6 @@
-01_network_list.patch
-02_auth_prompt.patch
#10-make-NetworkManager-optional.patch
10_background_race.patch
27-nm-libexec-path.patch
#30-remoteMenu-Prevent-the-shell-from-becoming-unrespons.patch
41-handle-logind-fail.patch
-50-compute-weeknumber-with-gdatetime.patch
51-Delay-caribou-daemon-invocation.patch
--- End Message ---