123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- 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;
|