[gnome-shell/wip/quadbuffer-stereo] Add support for meta_restart() and MetaDisplay::restart
- From: Owen Taylor <otaylor src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/wip/quadbuffer-stereo] Add support for meta_restart() and MetaDisplay::restart
- Date: Thu, 8 May 2014 23:08:04 +0000 (UTC)
commit b80641f45d909331dd3461cb2fcbdc1661d9b985
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.
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 90defde..afcdb5e 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 3a23a44..dc894c7 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 fba752b..de1be07 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 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 10cae4c..3985f8a 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]