[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#781284: marked as done (pu: package gnome-shell/3.14.4-1)



Your message dated Sat, 06 Jun 2015 13:11:11 +0100
with message-id <1433592671.2987.12.camel@adam-barratt.org.uk>
and subject line Fix released with 8.1 point release
has caused the Debian Bug report #781284,
regarding pu: package gnome-shell/3.14.4-1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
781284: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=781284
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@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 <joss@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 ---
--- Begin Message ---
Version: 8.1

Hi,

The fix discussed in this bug was released to stable as part of the 8.1
point release earlier today.

Regards,

Adam

--- End Message ---

Reply to: