summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen W. Taylor <otaylor@fishsoup.net>2014-05-08 18:56:23 -0400
committerOwen W. Taylor <otaylor@fishsoup.net>2014-05-08 19:08:01 -0400
commitb80641f45d909331dd3461cb2fcbdc1661d9b985 (patch)
tree8ebe34ac38b43a0fb7a60568ede8b4ed03b3e076
parente4e3252ffcfbc7fe9d92ff5a66ef9d84206fc81e (diff)
downloadgnome-shell-wip/quadbuffer-stereo.tar.gz
Add support for meta_restart() and MetaDisplay::restartwip/quadbuffer-stereo
Support was added to Mutter to allow it to trigger a restart to allow for restarts when switching in or out of stereo mode. Hook up to the new signals on MetaDisplay to show the restart message and reexec. Meta.is_restart() is used to suppress the startup animation. This also allows us to do 'Alt-F2 r' restarts more cleanly without a visual flash and animation.
-rw-r--r--data/theme/gnome-shell.css5
-rw-r--r--js/ui/layout.js8
-rw-r--r--js/ui/main.js36
-rw-r--r--js/ui/modalDialog.js35
-rw-r--r--js/ui/runDialog.js14
5 files changed, 76 insertions, 22 deletions
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index 90defde8b..afcdb5e38 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -2057,6 +2057,11 @@ StScrollBar StButton#vhandle:active {
font-size: 10pt;
}
+/* Restart message */
+.restart-message {
+ font-size: 14pt;
+}
+
/* ShellMountOperation Dialogs */
.shell-mount-operation-icon {
icon-size: 48px;
diff --git a/js/ui/layout.js b/js/ui/layout.js
index 3a23a4497..dc894c7b9 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -597,7 +597,9 @@ const LayoutManager = new Lang.Class({
reactive: true });
this.addChrome(this._coverPane);
- if (Main.sessionMode.isGreeter) {
+ if (Meta.is_restart()) {
+ // On restart, we don't do an animation
+ } else if (Main.sessionMode.isGreeter) {
this.panelBox.translation_y = -this.panelBox.height;
} else {
this._updateBackgrounds();
@@ -635,7 +637,9 @@ const LayoutManager = new Lang.Class({
},
_startupAnimation: function() {
- if (Main.sessionMode.isGreeter)
+ if (Meta.is_restart())
+ this._startupAnimationComplete();
+ else if (Main.sessionMode.isGreeter)
this._startupAnimationGreeter();
else
this._startupAnimationSession();
diff --git a/js/ui/main.js b/js/ui/main.js
index fba752b5b..de1be0765 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -18,6 +18,7 @@ const ExtensionSystem = imports.ui.extensionSystem;
const ExtensionDownloader = imports.ui.extensionDownloader;
const Keyboard = imports.ui.keyboard;
const MessageTray = imports.ui.messageTray;
+const ModalDialog = imports.ui.modalDialog;
const OsdWindow = imports.ui.osdWindow;
const Overview = imports.ui.overview;
const Panel = imports.ui.panel;
@@ -182,6 +183,16 @@ function _initializeUI() {
overview.toggle();
}));
+ global.display.connect('show-restart-message', function(display, message) {
+ showRestartMessage(message);
+ return true;
+ });
+
+ global.display.connect('restart', function() {
+ global.reexec_self();
+ return true;
+ });
+
// Provide the bus object for gnome-session to
// initiate logouts.
EndSessionDialog.init();
@@ -613,3 +624,28 @@ function queueDeferredWork(workId) {
});
}
}
+
+const RestartMessage = new Lang.Class({
+ Name: 'RestartMessage',
+ Extends: ModalDialog.ModalDialog,
+
+ _init : function(message) {
+ this.parent({ shellReactive: true,
+ styleClass: 'restart-message',
+ shouldFadeIn: false,
+ destroyOnClose: true });
+
+ let label = new St.Label({ text: message });
+
+ this.contentLayout.add(label, { x_fill: false,
+ y_fill: false,
+ x_align: St.Align.MIDDLE,
+ y_align: St.Align.MIDDLE });
+ this.buttonLayout.hide();
+ }
+});
+
+function showRestartMessage(message) {
+ let restartMessage = new RestartMessage(message);
+ restartMessage.open();
+}
diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js
index 5d10613f8..a0369e63d 100644
--- a/js/ui/modalDialog.js
+++ b/js/ui/modalDialog.js
@@ -43,6 +43,7 @@ const ModalDialog = new Lang.Class({
styleClass: null,
keybindingMode: Shell.KeyBindingMode.SYSTEM_MODAL,
shouldFadeIn: true,
+ shouldFadeOut: true,
destroyOnClose: true });
this.state = State.CLOSED;
@@ -50,6 +51,7 @@ const ModalDialog = new Lang.Class({
this._keybindingMode = params.keybindingMode;
this._shellReactive = params.shellReactive;
this._shouldFadeIn = params.shouldFadeIn;
+ this._shouldFadeOut = params.shouldFadeOut;
this._destroyOnClose = params.destroyOnClose;
this._group = new St.Widget({ visible: false,
@@ -307,6 +309,15 @@ const ModalDialog = new Lang.Class({
return true;
},
+ _closeComplete: function() {
+ this.state = State.CLOSED;
+ this._group.hide();
+ this.emit('closed');
+
+ if (this._destroyOnClose)
+ this.destroy();
+ },
+
close: function(timestamp) {
if (this.state == State.CLOSED || this.state == State.CLOSING)
return;
@@ -315,20 +326,16 @@ const ModalDialog = new Lang.Class({
this.popModal(timestamp);
this._savedKeyFocus = null;
- Tweener.addTween(this._group,
- { opacity: 0,
- time: OPEN_AND_CLOSE_TIME,
- transition: 'easeOutQuad',
- onComplete: Lang.bind(this,
- function() {
- this.state = State.CLOSED;
- this._group.hide();
- this.emit('closed');
-
- if (this._destroyOnClose)
- this.destroy();
- })
- });
+ if (this._shouldFadeOut)
+ Tweener.addTween(this._group,
+ { opacity: 0,
+ time: OPEN_AND_CLOSE_TIME,
+ transition: 'easeOutQuad',
+ onComplete: Lang.bind(this,
+ this._closeComplete)
+ })
+ else
+ this._closeComplete();
},
// Drop modal status without closing the dialog; this makes the
diff --git a/js/ui/runDialog.js b/js/ui/runDialog.js
index 10cae4c36..3985f8a9d 100644
--- a/js/ui/runDialog.js
+++ b/js/ui/runDialog.js
@@ -50,14 +50,10 @@ const RunDialog = new Lang.Class({
Main.createLookingGlass().open();
}),
- 'r': Lang.bind(this, function() {
- global.reexec_self();
- }),
+ 'r': Lang.bind(this, this._restart),
// Developer brain backwards compatibility
- 'restart': Lang.bind(this, function() {
- global.reexec_self();
- }),
+ 'restart': Lang.bind(this, this._restart),
'debugexit': Lang.bind(this, function() {
Meta.quit(Meta.ExitCode.ERROR);
@@ -271,6 +267,12 @@ const RunDialog = new Lang.Class({
}
},
+ _restart: function() {
+ this._shouldFadeOut = false;
+ this.close();
+ Meta.restart('Restarting...');
+ },
+
open: function() {
this._history.lastItem();
this._errorBox.hide();