[gnome-shell] modalDialog: Use a Gobject property to manage the state



commit 2f6323afc202961c89815f3e67b1fc7ba764a57e
Author: Marco Trevisan (Treviño) <mail 3v1n0 net>
Date:   Thu May 23 15:58:53 2019 -0500

    modalDialog: Use a Gobject property to manage the state
    
    Make the state read-only while add a "private" function to set it and notify
    when it changes.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/55

 js/ui/modalDialog.js | 29 +++++++++++++++++++++++------
 1 file changed, 23 insertions(+), 6 deletions(-)
---
diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js
index 06476059b..5d661e94a 100644
--- a/js/ui/modalDialog.js
+++ b/js/ui/modalDialog.js
@@ -22,6 +22,11 @@ var State = {
 };
 
 var ModalDialog = GObject.registerClass({
+    Properties: { 'state': GObject.ParamSpec.int('state', 'Dialog state', 'state',
+                                                 GObject.ParamFlags.READABLE,
+                                                 Math.min(...Object.values(State)),
+                                                 Math.max(...Object.values(State)),
+                                                 State.CLOSED) },
     Signals: { 'opened': {}, 'closed': {} }
 }, class ModalDialog extends St.Widget {
     _init(params) {
@@ -37,7 +42,7 @@ var ModalDialog = GObject.registerClass({
                                         shouldFadeOut: true,
                                         destroyOnClose: true });
 
-        this.state = State.CLOSED;
+        this._state = State.CLOSED;
         this._hasModal = false;
         this._actionMode = params.actionMode;
         this._shellReactive = params.shellReactive;
@@ -78,6 +83,18 @@ var ModalDialog = GObject.registerClass({
         this._savedKeyFocus = null;
     }
 
+    get state() {
+        return this._state;
+    }
+
+    _setState(state) {
+        if (this._state == state)
+            return;
+
+        this._state = state;
+        this.notify('state');
+    }
+
     clearButtons() {
         this.dialogLayout.clearButtons();
     }
@@ -99,7 +116,7 @@ var ModalDialog = GObject.registerClass({
         else
             this._monitorConstraint.index = global.display.get_current_monitor();
 
-        this.state = State.OPENING;
+        this._setState(State.OPENING);
 
         this.dialogLayout.opacity = 255;
         if (this._lightbox)
@@ -111,7 +128,7 @@ var ModalDialog = GObject.registerClass({
                            time: this._shouldFadeIn ? OPEN_AND_CLOSE_TIME : 0,
                            transition: 'easeOutQuad',
                            onComplete: () => {
-                               this.state = State.OPENED;
+                               this._setState(State.OPENED);
                                this.emit('opened');
                            }
                          });
@@ -141,7 +158,7 @@ var ModalDialog = GObject.registerClass({
     }
 
     _closeComplete() {
-        this.state = State.CLOSED;
+        this._setState(State.CLOSED);
         this.hide();
         this.emit('closed');
 
@@ -153,7 +170,7 @@ var ModalDialog = GObject.registerClass({
         if (this.state == State.CLOSED || this.state == State.CLOSING)
             return;
 
-        this.state = State.CLOSING;
+        this._setState(State.CLOSING);
         this.popModal(timestamp);
         this._savedKeyFocus = null;
 
@@ -235,7 +252,7 @@ var ModalDialog = GObject.registerClass({
                            time:    FADE_OUT_DIALOG_TIME,
                            transition: 'easeOutQuad',
                            onComplete: () => {
-                               this.state = State.FADED_OUT;
+                               this._setState(State.FADED_OUT);
                            }
                          });
     }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]