[gnome-shell] modalDialog: add mode that leaves shell reactive
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] modalDialog: add mode that leaves shell reactive
- Date: Mon, 29 Aug 2011 16:37:07 +0000 (UTC)
commit db39ba3b9f5905f03949860433202c2e93b6ce69
Author: Ray Strode <rstrode redhat com>
Date: Sat Aug 27 23:04:56 2011 -0400
modalDialog: add mode that leaves shell reactive
A modal dialog in the shell blocks anything but that dialog from
receiving user input. Applications within the session and other
parts of UI are rendered non-reactive.
When GDM gets changed to use the shell for its greeter, the user
list will be presented as a shell dialog. That dialog shouldn't
block access to the panel menus, etc.
This commit adds a shellReactive property that makes the ModalDialog
class continue to block access to applications, but allow the user
to interact with the shell itself.
https://bugzilla.gnome.org/show_bug.cgi?id=657082
js/ui/modalDialog.js | 41 +++++++++++++++++++++++++----------------
1 files changed, 25 insertions(+), 16 deletions(-)
---
diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js
index effc5be..49f086b 100644
--- a/js/ui/modalDialog.js
+++ b/js/ui/modalDialog.js
@@ -35,10 +35,12 @@ function ModalDialog() {
ModalDialog.prototype = {
_init: function(params) {
- params = Params.parse(params, { styleClass: null });
+ params = Params.parse(params, { shellReactive: false,
+ styleClass: null });
this.state = State.CLOSED;
this._hasModal = false;
+ this._shellReactive = params.shellReactive;
this._group = new St.Group({ visible: false,
x: 0,
@@ -54,26 +56,30 @@ ModalDialog.prototype = {
this._actionKeys = {};
this._group.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
- this._lightbox = new Lightbox.Lightbox(this._group,
- { inhibitEvents: true });
-
this._backgroundBin = new St.Bin();
-
this._group.add_actor(this._backgroundBin);
- this._lightbox.highlight(this._backgroundBin);
-
- this._backgroundStack = new Shell.Stack();
- this._backgroundBin.child = this._backgroundStack;
-
- this._eventBlocker = new Clutter.Group({ reactive: true });
- this._backgroundStack.add_actor(this._eventBlocker);
this._dialogLayout = new St.BoxLayout({ style_class: 'modal-dialog',
vertical: true });
if (params.styleClass != null) {
this._dialogLayout.add_style_class_name(params.styleClass);
}
- this._backgroundStack.add_actor(this._dialogLayout);
+
+ if (!this._shellReactive) {
+ this._lightbox = new Lightbox.Lightbox(this._group,
+ { inhibitEvents: true });
+ this._lightbox.highlight(this._backgroundBin);
+
+ let stack = new Shell.Stack();
+ this._backgroundBin.child = stack;
+
+ this._eventBlocker = new Clutter.Group({ reactive: true });
+ stack.add_actor(this._eventBlocker);
+ stack.add_actor(this._dialogLayout);
+ } else {
+ this._backgroundBin.child = this._dialogLayout;
+ }
+
this.contentLayout = new St.BoxLayout({ vertical: true });
this._dialogLayout.add(this.contentLayout,
@@ -179,7 +185,8 @@ ModalDialog.prototype = {
this.state = State.OPENING;
this._dialogLayout.opacity = 255;
- this._lightbox.show();
+ if (this._lightbox)
+ this._lightbox.show();
this._group.opacity = 0;
this._group.show();
Tweener.addTween(this._group,
@@ -245,7 +252,8 @@ ModalDialog.prototype = {
global.gdk_screen.get_display().sync();
this._hasModal = false;
- this._eventBlocker.raise_top();
+ if (!this._shellReactive)
+ this._eventBlocker.raise_top();
},
pushModal: function (timestamp) {
@@ -261,7 +269,8 @@ ModalDialog.prototype = {
} else
this._initialKeyFocus.grab_key_focus();
- this._eventBlocker.lower_bottom();
+ if (!this._shellReactive)
+ this._eventBlocker.lower_bottom();
return true;
},
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]