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