[gnome-shell] Add support for meta_restart() and MetaDisplay::restart
- From: Owen Taylor <otaylor src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] Add support for meta_restart() and MetaDisplay::restart
- Date: Wed, 16 Jul 2014 22:10:41 +0000 (UTC)
commit b6f3e15037c9ab96cadabddbae10609b2749e3e2
Author: Owen W. Taylor <otaylor fishsoup net>
Date: Thu May 8 18:56:23 2014 -0400
Add support for meta_restart() and MetaDisplay::restart
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.
https://bugzilla.gnome.org/show_bug.cgi?id=733026
data/theme/gnome-shell.css | 5 +++++
js/ui/layout.js | 8 ++++++--
js/ui/main.js | 36 ++++++++++++++++++++++++++++++++++++
js/ui/modalDialog.js | 35 +++++++++++++++++++++--------------
js/ui/runDialog.js | 14 ++++++++------
5 files changed, 76 insertions(+), 22 deletions(-)
---
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index c2d1f18..db671e7 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -2092,6 +2092,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 789097e..fb1b879 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();
@@ -636,7 +638,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 3e5317f..9f4efa8 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;
@@ -167,6 +168,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();
@@ -606,3 +617,28 @@ function queueDeferredWork(workId) {
GLib.Source.set_name_by_id(_deferredTimeoutId, '[gnome-shell] _runAllDeferredWork');
}
}
+
+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 5d10613..a0369e6 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 faf1689..504e904 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();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]