summaryrefslogtreecommitdiff
path: root/extra/gnome-shell
diff options
context:
space:
mode:
authorNicolás Reynolds <fauno@endefensadelsl.org>2013-12-27 23:55:53 +0000
committerNicolás Reynolds <fauno@endefensadelsl.org>2013-12-27 23:55:53 +0000
commit65eeff79fff8a1bfdf67ca51d147384f46f4d5c0 (patch)
treefbfdff322b28d9a3c37e6e31c94caf1d8e48dac1 /extra/gnome-shell
parentd53c44f055929b18d7d1b25f8367ee5836c435fc (diff)
Fri Dec 27 23:54:04 UTC 2013
Diffstat (limited to 'extra/gnome-shell')
-rw-r--r--extra/gnome-shell/PKGBUILD31
-rw-r--r--extra/gnome-shell/git-fixes.patch195
2 files changed, 213 insertions, 13 deletions
diff --git a/extra/gnome-shell/PKGBUILD b/extra/gnome-shell/PKGBUILD
index f7317b88f..6db41cfe3 100644
--- a/extra/gnome-shell/PKGBUILD
+++ b/extra/gnome-shell/PKGBUILD
@@ -1,27 +1,29 @@
-# $Id: PKGBUILD 198030 2013-10-30 12:22:37Z allan $
+# $Id: PKGBUILD 202388 2013-12-21 15:05:12Z heftig $
# Maintainer: Ionut Biru <ibiru@archlinux.org>
# Contributor: Flamelab <panosfilip@gmail.com
pkgname=gnome-shell
-pkgver=3.10.1
-pkgrel=1
+pkgver=3.10.2.1
+pkgrel=4
pkgdesc="The next generation GNOME Shell"
arch=(i686 x86_64)
url="http://live.gnome.org/GnomeShell"
license=(GPL2)
-depends=(accountsservice caribou evolution-data-server gcr gjs gnome-bluetooth gnome-menus
+depends=(accountsservice caribou gcr gjs gnome-bluetooth gnome-menus
gnome-session gnome-settings-daemon gnome-themes-standard gsettings-desktop-schemas
libcanberra-pulse libcroco libgdm libsecret mutter mutter-wayland network-manager-applet
- telepathy-logger telepathy-mission-control unzip)
-makedepends=(intltool gtk-doc gnome-control-center)
-optdepends=('gnome-control-center: System settings')
-options=('!emptydirs')
+ telepathy-logger telepathy-mission-control unzip gstreamer)
+makedepends=(intltool gtk-doc gnome-control-center evolution-data-server)
+optdepends=('gnome-control-center: System settings'
+ 'evolution-data-server: Evolution calendar integration')
install=gnome-shell.install
groups=(gnome)
source=(http://ftp.gnome.org/pub/GNOME/sources/$pkgname/${pkgver:0:4}/$pkgname-$pkgver.tar.xz
- nm-libexecdir.patch)
-sha256sums=('52f43dcd6df9dd00e5fbcd16a0d7551801cbc77f8777f047e548e7803bb90e02'
- 'e5bb10ad2e5c3e0fde3d05babd1bfdda701e553e02d493f7e54cb7832ce7e607')
+ nm-libexecdir.patch
+ git-fixes.patch)
+sha256sums=('d28cedc4f7dbcbd979ef2a0b80f722ff507989fce193fe59351b1d048d17c44c'
+ 'e5bb10ad2e5c3e0fde3d05babd1bfdda701e553e02d493f7e54cb7832ce7e607'
+ '192d95387dff5ac772968680cb77abef135b3ad7218676ad51c997d474642cc5')
prepare() {
cd $pkgname-$pkgver
@@ -29,8 +31,8 @@ prepare() {
# FS#30747 FS#32730 Problems due to libexecdir different from NM
patch -Np1 -i ../nm-libexecdir.patch
- # Build against mutter-wayland 3.9.92
- sed -ri 's/^(MUTTER_MIN_VERSION)=.*/\1=3.9.92/' configure
+ # Upstream fixes from 3-10 branch. Includes security bugfix for FS#37930
+ patch -Np1 -i ../git-fixes.patch
}
build() {
@@ -49,4 +51,7 @@ build() {
package() {
cd $pkgname-$pkgver
make DESTDIR="$pkgdir" install
+
+ # Must exist; FS#37412
+ mkdir -p "$pkgdir/usr/share/gnome-shell/modes"
}
diff --git a/extra/gnome-shell/git-fixes.patch b/extra/gnome-shell/git-fixes.patch
new file mode 100644
index 000000000..8dbf02d25
--- /dev/null
+++ b/extra/gnome-shell/git-fixes.patch
@@ -0,0 +1,195 @@
+diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
+index 1880e36..996b363 100644
+--- a/js/gdm/authPrompt.js
++++ b/js/gdm/authPrompt.js
+@@ -263,10 +263,8 @@ const AuthPrompt = new Lang.Class({
+ },
+
+ _onReset: function() {
+- if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED) {
+- this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
+- this.reset();
+- }
++ this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
++ this.reset();
+ },
+
+ addActorToDefaultButtonWell: function(actor) {
+diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
+index eb94554..fb3cf70 100644
+--- a/js/gdm/loginDialog.js
++++ b/js/gdm/loginDialog.js
+@@ -907,6 +907,10 @@ const LoginDialog = new Lang.Class({
+ Main.ctrlAltTabManager.removeGroup(this.dialogLayout);
+ },
+
++ cancel: function() {
++ this._authPrompt.cancel();
++ },
++
+ addCharacter: function(unichar) {
+ this._authPrompt.addCharacter(unichar);
+ },
+diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
+index a929451..dde7b82 100644
+--- a/js/ui/extensionSystem.js
++++ b/js/ui/extensionSystem.js
+@@ -76,7 +76,11 @@ function disableExtension(uuid) {
+ theme.unload_stylesheet(extension.stylesheet.get_path());
+ }
+
+- extension.stateObj.disable();
++ try {
++ extension.stateObj.disable();
++ } catch(e) {
++ logExtensionError(uuid, e);
++ }
+
+ for (let i = 0; i < order.length; i++) {
+ let uuid = order[i];
+@@ -89,8 +93,10 @@ function disableExtension(uuid) {
+
+ extensionOrder.splice(orderIdx, 1);
+
+- extension.state = ExtensionState.DISABLED;
+- _signals.emit('extension-state-changed', extension);
++ if ( extension.state != ExtensionState.ERROR ) {
++ extension.state = ExtensionState.DISABLED;
++ _signals.emit('extension-state-changed', extension);
++ }
+ }
+
+ function enableExtension(uuid) {
+@@ -117,10 +123,15 @@ function enableExtension(uuid) {
+ }
+ }
+
+- extension.stateObj.enable();
+-
+- extension.state = ExtensionState.ENABLED;
+- _signals.emit('extension-state-changed', extension);
++ try {
++ extension.stateObj.enable();
++ extension.state = ExtensionState.ENABLED;
++ _signals.emit('extension-state-changed', extension);
++ return;
++ } catch(e) {
++ logExtensionError(uuid, e);
++ return;
++ }
+ }
+
+ function logExtensionError(uuid, error) {
+@@ -150,7 +161,8 @@ function loadExtension(extension) {
+ } else {
+ let enabled = enabledExtensions.indexOf(extension.uuid) != -1;
+ if (enabled) {
+- initExtension(extension.uuid);
++ if (!initExtension(extension.uuid))
++ return;
+ if (extension.state == ExtensionState.DISABLED)
+ enableExtension(extension.uuid);
+ } else {
+@@ -205,7 +217,12 @@ function initExtension(uuid) {
+ extensionModule = extension.imports.extension;
+
+ if (extensionModule.init) {
+- extensionState = extensionModule.init(extension);
++ try {
++ extensionState = extensionModule.init(extension);
++ } catch(e) {
++ logExtensionError(uuid, e);
++ return false;
++ }
+ }
+
+ if (!extensionState)
+@@ -214,6 +231,7 @@ function initExtension(uuid) {
+
+ extension.state = ExtensionState.DISABLED;
+ _signals.emit('extension-loaded', uuid);
++ return true;
+ }
+
+ function getEnabledExtensions() {
+@@ -235,11 +253,7 @@ function onEnabledExtensionsChanged() {
+ newEnabledExtensions.filter(function(uuid) {
+ return enabledExtensions.indexOf(uuid) == -1;
+ }).forEach(function(uuid) {
+- try {
+ enableExtension(uuid);
+- } catch(e) {
+- logExtensionError(uuid, e);
+- }
+ });
+
+ // Find and disable all the newly disabled extensions: UUIDs found in the
+@@ -247,11 +261,7 @@ function onEnabledExtensionsChanged() {
+ enabledExtensions.filter(function(item) {
+ return newEnabledExtensions.indexOf(item) == -1;
+ }).forEach(function(uuid) {
+- try {
+ disableExtension(uuid);
+- } catch(e) {
+- logExtensionError(uuid, e);
+- }
+ });
+
+ enabledExtensions = newEnabledExtensions;
+@@ -263,11 +273,7 @@ function _loadExtensions() {
+
+ let finder = new ExtensionUtils.ExtensionFinder();
+ finder.connect('extension-found', function(signals, extension) {
+- try {
+- loadExtension(extension);
+- } catch(e) {
+- logExtensionError(extension.uuid, e);
+- }
++ loadExtension(extension);
+ });
+ finder.scanExtensions();
+ }
+diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
+index c66c9f6..d290a3d 100644
+--- a/js/ui/messageTray.js
++++ b/js/ui/messageTray.js
+@@ -2392,6 +2392,13 @@ const MessageTray = new Lang.Class({
+ // _updateState() figures out what (if anything) needs to be done
+ // at the present time.
+ _updateState: function() {
++ // If our state changes caused _updateState to be called,
++ // just exit now to prevent reentrancy issues.
++ if (this._updatingState)
++ return;
++
++ this._updatingState = true;
++
+ // Filter out acknowledged notifications.
+ this._notificationQueue = this._notificationQueue.filter(function(n) {
+ return !n.acknowledged;
+@@ -2474,6 +2481,8 @@ const MessageTray = new Lang.Class({
+ } else if (desktopCloneIsVisible && !desktopCloneShouldBeVisible) {
+ this._hideDesktopClone();
+ }
++
++ this._updatingState = false;
+ },
+
+ _tween: function(actor, statevar, value, params) {
+@@ -2838,13 +2847,13 @@ const MessageTray = new Lang.Class({
+ Lang.bind(this, this._onSourceDoneDisplayingContent));
+
+ this._summaryBoxPointer.bin.child = child;
+- this._grabHelper.grab({ actor: this._summaryBoxPointer.bin.child,
+- onUngrab: Lang.bind(this, this._onSummaryBoxPointerUngrabbed) });
+-
+ this._summaryBoxPointer.actor.opacity = 0;
+ this._summaryBoxPointer.actor.show();
+ this._adjustSummaryBoxPointerPosition();
+
++ this._grabHelper.grab({ actor: this._summaryBoxPointer.bin.child,
++ onUngrab: Lang.bind(this, this._onSummaryBoxPointerUngrabbed) });
++
+ this._summaryBoxPointerState = State.SHOWING;
+ this._summaryBoxPointer.show(BoxPointer.PopupAnimation.FULL, Lang.bind(this, function() {
+ this._summaryBoxPointerState = State.SHOWN;