[gnome-shell-extensions] dock: refactor and clean up code



commit 2388b8738f181bac91da834cd16d37ac06d2caf1
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Wed Feb 8 16:37:48 2012 +0100

    dock: refactor and clean up code
    
    Modified to avoid global settings variables, that were updated
    unpredictably. Removed the inital show effect and placing the dock
    at primary.y at startup (causing a big and often unexpected jump).
    Ported to the new class framework, which should mean cleaner code.

 extensions/dock/extension.js |  598 +++++++++++++++++++-----------------------
 1 files changed, 265 insertions(+), 333 deletions(-)
---
diff --git a/extensions/dock/extension.js b/extensions/dock/extension.js
index d43a199..7da5bff 100644
--- a/extensions/dock/extension.js
+++ b/extensions/dock/extension.js
@@ -30,16 +30,12 @@ const Me = ExtensionUtils.getCurrentExtension();
 const Convenience = Me.imports.convenience;
 
 // Settings
-const DOCK_SETTINGS_SCHEMA = 'org.gnome.shell.extensions.dock';
 const DOCK_POSITION_KEY = 'position';
 const DOCK_SIZE_KEY = 'size';
 const DOCK_HIDE_KEY = 'autohide';
 const DOCK_EFFECTHIDE_KEY = 'hide-effect';
 const DOCK_AUTOHIDE_ANIMATION_TIME_KEY = 'hide-effect-duration';
 
-//hide
-//const autohide_animation_time = 0.3;
-
 // Keep enums in sync with GSettings schemas
 const PositionMode = {
     LEFT: 0,
@@ -52,268 +48,222 @@ const AutoHideEffect = {
     MOVE: 2
 };
 
-let position = PositionMode.RIGHT;
-let dockicon_size = 48;
-let hideable = true;
-let hideDock = true;
-let hideEffect = AutoHideEffect.RESIZE;
-let autohide_animation_time = 0.3;
 const DND_RAISE_APP_TIMEOUT = 500;
 
 /*************************************************************************************/
 /**** start resize's Dock functions                                  *****************/
 /*************************************************************************************/
 function hideDock_size () {
-    if (hideable){
-       let monitor = Main.layoutManager.primaryMonitor
-       let position_x = monitor.x;
-       let height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
-       let width = this._item_size + 4*this._spacing;
-
-       Tweener.addTween(this,{
-              _item_size: 1,
-              time: autohide_animation_time,
-              transition: 'easeOutQuad',
-              onUpdate: function () {
-                   height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
-                   width = this._item_size + 4*this._spacing;
-                   switch (position) {
-                       case PositionMode.LEFT:
-                              position_x=monitor.x-2*this._spacing;
-                              break;
-                       case PositionMode.RIGHT:
-                       default:
-                              position_x = monitor.x + (monitor.width-1-this._item_size-2*this._spacing);
-                   }
-                   this.actor.set_position (position_x,monitor.y+(monitor.height-height)/2);
-                   this.actor.set_size(width,height);
-              },
-       });
-       hideDock=true;
-    }
+    if (!this._hideable)
+        return;
+
+    let monitor = Main.layoutManager.primaryMonitor
+    let position_x = monitor.x;
+    let height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
+    let width = this._item_size + 4*this._spacing;
+
+    Tweener.addTween(this, {
+        _item_size: 1,
+        time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
+        transition: 'easeOutQuad',
+        onUpdate: function () {
+            height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
+            width = this._item_size + 4*this._spacing;
+            switch (this._settings.get_enum(DOCK_POSITION_KEY)) {
+            case PositionMode.LEFT:
+                position_x=monitor.x-2*this._spacing;
+                break;
+            case PositionMode.RIGHT:
+            default:
+                position_x = monitor.x + (monitor.width-1-this._item_size-2*this._spacing);
+            }
+            this.actor.set_position (position_x,monitor.y+(monitor.height-height)/2);
+            this.actor.set_size(width,height);
+        },
+    });
+
+    this._hidden = true;
 }
 
 function showDock_size () {
-     let monitor = Main.layoutManager.primaryMonitor;
-     let height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
-     let width = this._item_size + 4*this._spacing;
-     let position_x = monitor.x;
-
-     Tweener.addTween(this,{
-             _item_size: dockicon_size,
-             time: autohide_animation_time,
-             transition: 'easeOutQuad',
-             onUpdate: function () {
-                height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
-                width = this._item_size + 4*this._spacing;
-                switch (position) {
-                   case PositionMode.LEFT:
-                      position_x=monitor.x-2*this._spacing;
-                      break;
-                   case PositionMode.RIGHT:
-                   default:
-                      position_x=monitor.x + (monitor.width-this._item_size-2*this._spacing);
-                }
-                this.actor.set_position (position_x, monitor.y+(monitor.height-height)/2);
-                this.actor.set_size(width,height);
-             }
-     });
-     hideDock=false;
-}
+    let monitor = Main.layoutManager.primaryMonitor;
+    let height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
+    let width = this._item_size + 4*this._spacing;
+    let position_x = monitor.x;
+
+    Tweener.addTween(this, {
+        _item_size: this._settings.get_int(DOCK_SIZE_KEY),
+        time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
+        transition: 'easeOutQuad',
+        onUpdate: function () {
+            height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
+            width = this._item_size + 4*this._spacing;
+            switch (this._settings.get_enum(DOCK_POSITION_KEY)) {
+            case PositionMode.LEFT:
+                position_x=monitor.x-2*this._spacing;
+                break;
+            case PositionMode.RIGHT:
+            default:
+                position_x=monitor.x + (monitor.width-this._item_size-2*this._spacing);
+            }
+            this.actor.set_position (position_x, monitor.y+(monitor.height-height)/2);
+            this.actor.set_size(width,height);
+        }
+    });
 
-function initShowDock_size () {
-        this._item_size=1;
-        this._showDock();
+    this._hidden = false;
 }
 
 function showEffectAddItem_size () {
-        let primary = Main.layoutManager.primaryMonitor;
-        let height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
-        let width = this._item_size + 4*this._spacing;
-
-        Tweener.addTween(this.actor, {
-                y: primary.y + (primary.height-height)/2,
-                height: height,
-                width: width,
-                time: autohide_animation_time,
-                transition: 'easeOutQuad'
-        });
+    let primary = Main.layoutManager.primaryMonitor;
+    let height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
+    let width = this._item_size + 4*this._spacing;
+
+    Tweener.addTween(this.actor, {
+        y: primary.y + (primary.height-height)/2,
+        height: height,
+        width: width,
+        time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
+        transition: 'easeOutQuad'
+    });
 }
 
 /**************************************************************************************/
 /**** start rescale's Dock functions                                  *****************/
 /**************************************************************************************/
 function hideDock_scale () {
-       this._item_size = dockicon_size;
-       let monitor = Main.layoutManager.primaryMonitor;
-       let cornerX = 0;
-       let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
-       let width = this._item_size + 4*this._spacing;
-
-       switch (position) {
-            case PositionMode.LEFT:
-                cornerX=monitor.x;
-                break;
-            case PositionMode.RIGHT:
-            default:
-                cornerX = monitor.x + monitor.width-1;
-        }
+    if (!this._hideable)
+        return;
+
+    this._item_size = this._settings.get_int(DOCK_SIZE_KEY);
+    let monitor = Main.layoutManager.primaryMonitor;
+    let cornerX = 0;
+    let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
+    let width = this._item_size + 4*this._spacing;
+
+    switch (this._settings.get_enum(DOCK_POSITION_KEY)) {
+    case PositionMode.LEFT:
+        cornerX=monitor.x;
+        break;
+    case PositionMode.RIGHT:
+    default:
+        cornerX = monitor.x + monitor.width-1;
+    }
 
-        if (hideable) {
-               Tweener.addTween(this.actor,{
-                       y: monitor.y + (monitor.height-height)/2,
-                       x: cornerX,
-                       height:height,
-                       width: width,
-                       scale_x: 0.025,
-                       time: autohide_animation_time,
-                       transition: 'easeOutQuad'
-                     });
-               hideDock=true;
-        }
+    Tweener.addTween(this.actor,{
+        y: monitor.y + (monitor.height-height)/2,
+        x: cornerX,
+        height:height,
+        width: width,
+        scale_x: 0.025,
+        time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
+        transition: 'easeOutQuad'
+    });
+
+    this._hidden = true;
 }
 
 function showDock_scale () {
-        this._item_size = dockicon_size;
-        let monitor = Main.layoutManager.primaryMonitor;
-        let position_x = monitor.x;
-        let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
-        let width = this._item_size + 4*this._spacing;
-
-        switch (position) {
-            case PositionMode.LEFT:
-                position_x=monitor.x-2*this._spacing;
-                break;
-            case PositionMode.RIGHT:
-            default:
-                 position_x=monitor.x + (monitor.width-this._item_size-2*this._spacing);
-        }
-        Tweener.addTween(this.actor, {
-                y: monitor.y + (monitor.height-height)/2,
-                x: monitor.x + position_x,
-                height: height,
-                width: width,
-                scale_x: 1,
-                time: autohide_animation_time,
-                transition: 'easeOutQuad'
-        });
-        hideDock=false;
-}
-
-function initShowDock_scale () {
-        let primary = Main.layoutManager.primaryMonitor;
-        let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
-        let width = this._item_size + 4*this._spacing;
-
-        this.actor.set_scale (0,0);
-        this.actor.set_size (width,height);
-
-        // set the position of the dock
-        switch (position) {
-                case PositionMode.LEFT:
-                   this.actor.x = 0;
-                   // effect of creation of the dock
-                   Tweener.addTween(this.actor, {
-                       x: primary.x-2*this._spacing,
-                       y: primary.y + (primary.height-height)/2,
-                       time: autohide_animation_time * 3,
-                       transition: 'easeOutQuad'
-                   });
-                   break;
-                case PositionMode.RIGHT:
-                   default:
-                   this.actor.x = primary.width-1;
-                   // effect of creation of the dock
-                   Tweener.addTween(this.actor, {
-                      x: primary.x + primary.width-this._item_size- 2*this._spacing,
-                      y: primary.y + (primary.height-height)/2,
-                      time: autohide_animation_time * 3,
-                      transition: 'easeOutQuad'
-                   });
-        }
-        Tweener.addTween(this.actor,{
-           scale_x: 1,
-           scale_y: 1,
-           time: autohide_animation_time * 3,
-           transition: 'easeOutQuad'
-        });
-        hideDock=false;
+    this._item_size = this._settings.get_int(DOCK_SIZE_KEY);
+    let monitor = Main.layoutManager.primaryMonitor;
+    let position_x = monitor.x;
+    let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
+    let width = this._item_size + 4*this._spacing;
+
+    switch (this._settings.get_enum(DOCK_POSITION_KEY)) {
+    case PositionMode.LEFT:
+        position_x=monitor.x-2*this._spacing;
+        break;
+    case PositionMode.RIGHT:
+    default:
+        position_x=monitor.x + (monitor.width-this._item_size-2*this._spacing);
+    }
+    Tweener.addTween(this.actor, {
+        y: monitor.y + (monitor.height-height)/2,
+        x: monitor.x + position_x,
+        height: height,
+        width: width,
+        scale_x: 1,
+        time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
+        transition: 'easeOutQuad'
+    });
+
+    this._hidden = false;
 }
 
 function showEffectAddItem_scale () {
-        let monitor = Main.layoutManager.primaryMonitor;
-        let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
-        let width = this._item_size + 4*this._spacing;
-
-        Tweener.addTween(this.actor, {
-                y: monitor.y + (monitor.height-height)/2,
-                height: height,
-                width: width,
-                time: autohide_animation_time,
-                transition: 'easeOutQuad'
-        });
+    let monitor = Main.layoutManager.primaryMonitor;
+    let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
+    let width = this._item_size + 4*this._spacing;
+
+    Tweener.addTween(this.actor, {
+        y: monitor.y + (monitor.height-height)/2,
+        height: height,
+        width: width,
+        time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
+        transition: 'easeOutQuad'
+    });
 }
 
 /**************************************************************************************/
 /**** start move Dock functions                                       *****************/
 /**************************************************************************************/
 function hideDock_move () {
-       this._item_size = dockicon_size;
-       let monitor = Main.layoutManager.primaryMonitor;
-       let cornerX = 0;
-       let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
-       let width = this._item_size + 4*this._spacing;
+    if (!this._hideable)
+        return;
+
+    this._item_size = this._settings.get_int(DOCK_SIZE_KEY);
+    let monitor = Main.layoutManager.primaryMonitor;
+    let cornerX = 0;
+    let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
+    let width = this._item_size + 4*this._spacing;
+
+    switch (this._settings.get_enum(DOCK_POSITION_KEY)) {
+    case PositionMode.LEFT:
+        cornerX= monitor.x - width + this._spacing;
+        break;
+    case PositionMode.RIGHT:
+    default:
+        cornerX = monitor.x + monitor.width - this._spacing;
+    }
 
-       switch (position) {
-            case PositionMode.LEFT:
-                cornerX= monitor.x - width + this._spacing;
-                break;
-            case PositionMode.RIGHT:
-            default:
-                cornerX = monitor.x + monitor.width - this._spacing;
-        }
+    Tweener.addTween(this.actor,{
+        x: cornerX,
+        y: monitor.y + (monitor.height - height)/2,
+        width: width,
+        height: height,
+        time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
+        transition: 'easeOutQuad'
+    });
 
-        if (hideable) {
-               Tweener.addTween(this.actor,{
-                       x: cornerX,
-                       y: monitor.y + (monitor.height - height)/2,
-                       width: width,
-                       height: height,
-                       time: autohide_animation_time,
-                       transition: 'easeOutQuad'
-                     });
-               hideDock=true;
-        }
+    this._hidden = true;
 }
 
 function showDock_move () {
-        this._item_size = dockicon_size;
-        let monitor = Main.layoutManager.primaryMonitor;
-        let position_x = monitor.x;
-        let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
-        let width = this._item_size + 4*this._spacing;
-
-        switch (position) {
-            case PositionMode.LEFT:
-                position_x=monitor.x - 2*this._spacing;
-                break;
-            case PositionMode.RIGHT:
-            default:
-                 position_x=monitor.x + (monitor.width-this._item_size-2*this._spacing);
-        }
-        Tweener.addTween(this.actor, {
-                x: position_x,
-                y: monitor.y + (monitor.height - height)/2,
-                width: width,
-                height: height,
-                time: autohide_animation_time,
-                transition: 'easeOutQuad'
-        });
-        hideDock=false;
-}
-
-function initShowDock_move () {
-    this._showDock();
+    this._item_size = this._settings.get_int(DOCK_SIZE_KEY);
+    let monitor = Main.layoutManager.primaryMonitor;
+    let position_x = monitor.x;
+    let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
+    let width = this._item_size + 4*this._spacing;
+
+    switch (this._settings.get_enum(DOCK_POSITION_KEY)) {
+    case PositionMode.LEFT:
+        position_x=monitor.x - 2*this._spacing;
+        break;
+    case PositionMode.RIGHT:
+    default:
+        position_x=monitor.x + (monitor.width-this._item_size-2*this._spacing);
+    }
+    Tweener.addTween(this.actor, {
+        x: position_x,
+        y: monitor.y + (monitor.height - height)/2,
+        width: width,
+        height: height,
+        time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
+        transition: 'easeOutQuad'
+    });
+
+    this._hidden = false;
 }
 
 function showEffectAddItem_move () {
@@ -325,16 +275,14 @@ function showEffectAddItem_move () {
                 y: monitor.y + (monitor.height-height)/2,
                 height: height,
                 width: width,
-                time: autohide_animation_time,
+                time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
                 transition: 'easeOutQuad'
         });
 }
 
-function Dock() {
-    this._init();
-}
+const Dock = new Lang.Class({
+    Name: 'Dock.Dock',
 
-Dock.prototype = {
     _init : function() {
         this._placeholderText = null;
         this._menus = [];
@@ -344,19 +292,13 @@ Dock.prototype = {
 
         // Load Settings
         this._settings = Convenience.getSettings();
-        position = this._settings.get_enum(DOCK_POSITION_KEY);
-        dockicon_size = this._settings.get_int(DOCK_SIZE_KEY);
-        hideDock = hideable = this._settings.get_boolean(DOCK_HIDE_KEY);
-        hideEffect = this._settings.get_enum(DOCK_EFFECTHIDE_KEY);
-        autohide_animation_time = this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY);
-        //global.log("POSITION: " + position);
-        //global.log("dockicon_size: " + dockicon_size);
-
+        this._hidden = false;
+        this._hideable = this._settings.get_boolean(DOCK_HIDE_KEY);
 
         this._spacing = 4;
-        this._item_size = dockicon_size;
+        this._item_size = this._settings.get_int(DOCK_SIZE_KEY);
         this._nicons = 0;
-        this._selectFunctionsHide ();
+        this._selectEffectFunctions(this._settings.get_enum(DOCK_EFFECTHIDE_KEY));
 
         this.actor = new St.BoxLayout({ name: 'dock', vertical: true, reactive: true });
 
@@ -387,58 +329,45 @@ Dock.prototype = {
                                      { affectsStruts: !this._settings.get_boolean(DOCK_HIDE_KEY) });
 
         //hidden
-        this._settings.connect('changed::'+DOCK_POSITION_KEY, Lang.bind(this, function (){
-                let primary = Main.layoutManager.primaryMonitor;
-                position = this._settings.get_enum(DOCK_POSITION_KEY);
-                this.actor.y=primary.y;
-                this._redisplay();
-        }));
-
-        this._settings.connect('changed::'+DOCK_SIZE_KEY, Lang.bind(this, function (){
-                dockicon_size = this._settings.get_int(DOCK_SIZE_KEY);
-                this._redisplay();
-        }));
+        this._settings.connect('changed::'+DOCK_POSITION_KEY, Lang.bind(this, this._redisplay));
+        this._settings.connect('changed::'+DOCK_SIZE_KEY, Lang.bind(this, this._redisplay));
 
         this._settings.connect('changed::'+DOCK_HIDE_KEY, Lang.bind(this, function (){
                 Main.layoutManager.removeChrome(this.actor);
                 Main.layoutManager.addChrome(this.actor,
                                              { affectsStruts: !this._settings.get_boolean(DOCK_HIDE_KEY) });
 
-                hideable = this._settings.get_boolean(DOCK_HIDE_KEY);
-                if (hideable){
-                        hideDock=false;
+                this._hideable = this._settings.get_boolean(DOCK_HIDE_KEY);
+                if (this._hideable)
                         this._hideDock();
-                } else {
-                        hideDock=true;
+                else
                         this._showDock();
-                }
         }));
 
-        this._settings.connect('changed::'+DOCK_EFFECTHIDE_KEY, Lang.bind(this, function () {
-                hideEffect = this._settings.get_enum(DOCK_EFFECTHIDE_KEY);
-
-                switch (hideEffect) {
-                        case AutoHideEffect.RESCALE:
-                           this._item_size=dockicon_size;
-                           break;
-                        case AutoHideEffect.RESIZE:
-                           this.actor.set_scale (1,1);
-                           break;
-                        case AutoHideEffect.MOVE:
-                           ;
-                }
-                this.actor.disconnect(this._leave_event);
-                this.actor.disconnect(this._enter_event);
+        this._settings.connect('changed::' + DOCK_EFFECTHIDE_KEY, Lang.bind(this, function () {
+            let hideEffect = this._settings.get_enum(DOCK_EFFECTHIDE_KEY);
+
+            // restore the effects of the other functions
+            switch (hideEffect) {
+            case AutoHideEffect.RESCALE:
+                this._item_size = this._settings.get_int(DOCK_SIZE_KEY);
+                break;
+            case AutoHideEffect.RESIZE:
+                this.actor.set_scale(1, 1);
+                break;
+            case AutoHideEffect.MOVE:
+                this.actor.set_scale(1, 1);
+                this._item_size = this._settings.get_int(DOCK_SIZE_KEY);
+            }
 
-                this._selectFunctionsHide ();
+            this.actor.disconnect(this._leave_event);
+            this.actor.disconnect(this._enter_event);
 
-                this._leave_event = this.actor.connect('leave-event', Lang.bind(this, this._hideDock));
-                this._enter_event = this.actor.connect('enter-event', Lang.bind(this, this._showDock));
-                this._redisplay();
-        }));
+            this._selectEffectFunctions(hideEffect);
 
-        this._settings.connect('changed::'+DOCK_AUTOHIDE_ANIMATION_TIME_KEY, Lang.bind(this,function (){
-                autohide_animation_time = this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY);
+            this._leave_event = this.actor.connect('leave-event', Lang.bind(this, this._hideDock));
+            this._enter_event = this.actor.connect('enter-event', Lang.bind(this, this._showDock));
+            this._redisplay();
         }));
 
         this._leave_event = this.actor.connect('leave-event', Lang.bind(this, this._hideDock));
@@ -483,33 +412,30 @@ Dock.prototype = {
     },
 
     // fuctions hide
-    _restoreHideDock: function(){
-        hideable = this._settings.get_boolean(DOCK_HIDE_KEY);
+    _restoreHideDock: function() {
+        this._hideable = this._settings.get_boolean(DOCK_HIDE_KEY);
     },
 
-    _disableHideDock: function (){
-        hideable = false;
+    _disableHideDock: function() {
+        this._hideable = false;
     },
 
-    _selectFunctionsHide: function () {
+    _selectEffectFunctions: function(hideEffect) {
         switch (hideEffect) {
         case AutoHideEffect.RESCALE:
             this._hideDock = hideDock_scale;
             this._showDock = showDock_scale;
-            this._initShowDock = initShowDock_scale;
             this._showEffectAddItem = showEffectAddItem_scale;
             break;
         case AutoHideEffect.MOVE:
             this._hideDock = hideDock_move;
             this._showDock = showDock_move;
-            this._initShowDock = initShowDock_move;
             this._showEffectAddItem = showEffectAddItem_move;
             break;
         case AutoHideEffect.RESIZE:
         default:
             this._hideDock = hideDock_size;
             this._showDock = showDock_size;
-            this._initShowDock = initShowDock_size;
             this._showEffectAddItem = showEffectAddItem_size;
         }
     },
@@ -568,21 +494,16 @@ Dock.prototype = {
         let height = (icons)*(this._item_size + this._spacing) + 2*this._spacing;
         let width = this._item_size + 4*this._spacing;
 
-        if (this.actor.y != primary.y) {
-                if (hideable && hideDock) {
-                        this._hideDock();
-                } else {
-                   if (dockicon_size == this._item_size) {
-                        // only add/delete icon
-                        this._showEffectAddItem ();
-                    } else {
-                        // change size icon
-                        this._showDock ();
-                    }
-                }
+        if (this._hideable && this._hidden) {
+            this._hideDock();
         } else {
-                // effect of creation
-                this._initShowDock ();
+            if (this._settings.get_int(DOCK_SIZE_KEY) == this._item_size) {
+                // only add/delete icon
+                this._showEffectAddItem ();
+            } else {
+                // change size icon
+                this._showDock ();
+            }
         }
     },
 
@@ -604,7 +525,7 @@ Dock.prototype = {
         let children = this._grid.get_children();
 
         let x = box.x1 + this._spacing;
-        if (position == PositionMode.LEFT)
+        if (this._settings.get_enum(DOCK_POSITION_KEY) == PositionMode.LEFT)
             x = box.x1 + 2*this._spacing;
         let y = box.y1 + this._spacing;
 
@@ -640,14 +561,12 @@ Dock.prototype = {
     addItem: function(actor) {
         this._grid.add_actor(actor);
     }
-};
+});
 Signals.addSignalMethods(Dock.prototype);
 
-function DockIcon(app, dock) {
-    this._init(app, dock);
-}
+const DockIcon = new Lang.Class({
+    Name: 'Dock.DockIcon',
 
-DockIcon.prototype = {
     _init : function(app, dock) {
         this.app = app;
         this.actor = new St.Button({ style_class: 'app-well-app',
@@ -656,12 +575,11 @@ DockIcon.prototype = {
                                      x_fill: true,
                                      y_fill: true });
         this.actor._delegate = this;
-        //this.actor.set_size(dockicon_size, dockicon_size);
 
         this._icon = new AppDisplay.AppIcon(app, { setSizeManually: true,
                                                    showLabel: false });
         this.actor.set_child(this._icon.actor);
-        this._icon.setIconSize(dockicon_size);
+        this._icon.setIconSize(this._settings.get_int(DOCK_SIZE_KEY));
 
         this.actor.connect('clicked', Lang.bind(this, this._onClicked));
 
@@ -681,7 +599,9 @@ DockIcon.prototype = {
         this._stateChangedId = this.app.connect('notify::state',
                                                 Lang.bind(this, this._onStateChanged));
         this._onStateChanged();
-        this._dock=dock;
+
+        this._dock = dock;
+        this._settings = dock._settings;
     },
 
     _onDestroy: function() {
@@ -830,30 +750,25 @@ DockIcon.prototype = {
             }
         }
         Main.overview.hide();
-    },
-
-    shellWorkspaceLaunch : function() {
-        this.app.open_new_window();
     }
-};
+});
 Signals.addSignalMethods(DockIcon.prototype);
 
-function DockIconMenu(source) {
-    this._init(source);
-}
-
-DockIconMenu.prototype = {
-    __proto__: AppDisplay.AppIconMenu.prototype,
+const DockIconMenu = new Lang.Class({
+    Name: 'Dock.DockIconMenu',
+    Extends: PopupMenu.PopupMenu,
 
     _init: function(source) {
-        switch (position) {
-            case PositionMode.LEFT:
-                PopupMenu.PopupMenu.prototype._init.call(this, source.actor, St.Align.MIDDLE, St.Side.LEFT, 0);
-                break;
-            case PositionMode.RIGHT:
-            default:
-                PopupMenu.PopupMenu.prototype._init.call(this, source.actor, St.Align.MIDDLE, St.Side.RIGHT, 0);
+        let side;
+        switch (source._settings.get_enum(DOCK_POSITION_KEY)) {
+        case PositionMode.LEFT:
+            side = St.Side.LEFT;
+            break;
+        case PositionMode.RIGHT:
+        default:
+            side = St.Side.RIGHT;
         }
+        this.parent(source.actor, 0.5, side);
 
         this._source = source;
 
@@ -908,6 +823,23 @@ DockIconMenu.prototype = {
         this._highlightedItem = null;
     },
 
+    _appendSeparator: function () {
+        let separator = new PopupMenu.PopupSeparatorMenuItem();
+        this.addMenuItem(separator);
+    },
+
+    _appendMenuItem: function(labelText) {
+        // FIXME: app-well-menu-item style
+        let item = new PopupMenu.PopupMenuItem(labelText);
+        this.addMenuItem(item);
+        return item;
+    },
+
+    popup: function(activatingButton) {
+        this._redisplay();
+        this.open();
+    },
+
     _onActivate: function (actor, child) {
         if (child._window) {
             let metaWindow = child._window;
@@ -928,7 +860,7 @@ DockIconMenu.prototype = {
         }
         this.close();
     }
-}
+});
 
 function init() {
     Convenience.initTranslations();



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