[gnome-shell/wip/exalm/gestures: 8/19] workspaceThumbnail: Sync indicator with WorkspacesDisplay



commit 2f9192b035c06afd9dd3e14030a7fa1ab2761b9b
Author: Alexander Mikhaylenko <exalm7659 gmail com>
Date:   Mon Jul 8 13:03:20 2019 +0500

    workspaceThumbnail: Sync indicator with WorkspacesDisplay
    
    Now that both ThumbnailsBox and WorkspacesDisplay use single adjustments for
    controlling indicator and scrolling, create the adjustment in OverviewControls
    and pass it to both objects, effectively syncing indicator to scrolling.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/605

 js/ui/overviewControls.js   | 24 ++++++++++++++++++++++--
 js/ui/viewSelector.js       |  4 ++--
 js/ui/workspaceThumbnail.js | 35 +++++------------------------------
 js/ui/workspacesView.js     | 19 ++-----------------
 4 files changed, 31 insertions(+), 51 deletions(-)
---
diff --git a/js/ui/overviewControls.js b/js/ui/overviewControls.js
index e9f81f776..0ff18c8ad 100644
--- a/js/ui/overviewControls.js
+++ b/js/ui/overviewControls.js
@@ -397,10 +397,23 @@ var ControlsManager = class {
         this._dashSpacer = new DashSpacer();
         this._dashSpacer.setDashActor(this._dashSlider.actor);
 
-        this._thumbnailsBox = new WorkspaceThumbnail.ThumbnailsBox();
+        let workspaceManager = global.workspace_manager;
+        let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
+
+        this._workspaceAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
+                                                        lower: 0,
+                                                        page_increment: 1,
+                                                        page_size: 1,
+                                                        step_increment: 0,
+                                                        upper: workspaceManager.n_workspaces });
+        this._updateWorkspaces();
+        workspaceManager.connect('notify::n-workspaces',
+                                 this._updateWorkspaces.bind(this));
+
+        this._thumbnailsBox = new WorkspaceThumbnail.ThumbnailsBox(this._workspaceAdjustment);
         this._thumbnailsSlider = new ThumbnailsSlider(this._thumbnailsBox);
 
-        this.viewSelector = new ViewSelector.ViewSelector(searchEntry,
+        this.viewSelector = new ViewSelector.ViewSelector(searchEntry, this._workspaceAdjustment,
                                                           this.dash.showAppsButton);
         this.viewSelector.connect('page-changed', this._setVisibility.bind(this));
         this.viewSelector.connect('page-empty', this._onPageEmpty.bind(this));
@@ -436,6 +449,13 @@ var ControlsManager = class {
         });
     }
 
+    _updateWorkspaces() {
+        let workspaceManager = global.workspace_manager;
+        let newNumWorkspaces = workspaceManager.n_workspaces;
+
+        this._workspaceAdjustment.upper = newNumWorkspaces;
+    }
+
     _updateWorkspacesGeometry() {
         let [x, y] = this.actor.get_transformed_position();
         let [width, height] = this.actor.get_transformed_size();
diff --git a/js/ui/viewSelector.js b/js/ui/viewSelector.js
index dabf72eda..c72e57a53 100644
--- a/js/ui/viewSelector.js
+++ b/js/ui/viewSelector.js
@@ -120,7 +120,7 @@ var ShowOverviewAction = GObject.registerClass({
 });
 
 var ViewSelector = class {
-    constructor(searchEntry, showAppsButton) {
+    constructor(searchEntry, workspaceAdjustment, showAppsButton) {
         this.actor = new Shell.Stack({ name: 'viewSelector' });
 
         this._showAppsButton = showAppsButton;
@@ -160,7 +160,7 @@ var ViewSelector = class {
         this._iconClickedId = 0;
         this._capturedEventId = 0;
 
-        this._workspacesDisplay = new WorkspacesView.WorkspacesDisplay();
+        this._workspacesDisplay = new WorkspacesView.WorkspacesDisplay(workspaceAdjustment);
         this._workspacesPage = this._addPage(this._workspacesDisplay.actor,
                                              _("Windows"), 'focus-windows-symbolic');
 
diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js
index 2d31f7f0a..033ffe408 100644
--- a/js/ui/workspaceThumbnail.js
+++ b/js/ui/workspaceThumbnail.js
@@ -595,7 +595,7 @@ Signals.addSignalMethods(WorkspaceThumbnail.prototype);
 
 var ThumbnailsBox = GObject.registerClass(
 class ThumbnailsBox extends St.Widget {
-    _init() {
+    _init(adjustment) {
         super._init({ reactive: true,
                       style_class: 'workspace-thumbnails',
                       request_mode: Clutter.RequestMode.WIDTH_FOR_HEIGHT });
@@ -674,14 +674,12 @@ class ThumbnailsBox extends St.Widget {
 
         let workspaceManager = global.workspace_manager;
         let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
-        this._scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
-                                                     lower: 0,
-                                                     page_increment: 1,
-                                                     page_size: 1,
-                                                     step_increment: 0,
-                                                     upper: workspaceManager.n_workspaces });
+        this._scrollAdjustment = adjustment;
 
         this._scrollAdjustment.connect('notify::value', adj => {
+            this._animatingIndicator = (adj.value % 1) != 0;
+            if (!this._animatingIndicator)
+                this._queueUpdateStates();
             this.queue_relayout();
         });
     }
@@ -871,9 +869,6 @@ class ThumbnailsBox extends St.Widget {
     _createThumbnails() {
         let workspaceManager = global.workspace_manager;
 
-        this._switchWorkspaceNotifyId =
-            global.window_manager.connect('switch-workspace',
-                                          this._activeWorkspaceChanged.bind(this));
         this._nWorkspacesNotifyId =
             workspaceManager.connect('notify::n-workspaces',
                                      this._workspacesChanged.bind(this));
@@ -899,10 +894,6 @@ class ThumbnailsBox extends St.Widget {
         if (this._thumbnails.length == 0)
             return;
 
-        if (this._switchWorkspaceNotifyId > 0) {
-            global.window_manager.disconnect(this._switchWorkspaceNotifyId);
-            this._switchWorkspaceNotifyId = 0;
-        }
         if (this._nWorkspacesNotifyId > 0) {
             let workspaceManager = global.workspace_manager;
             workspaceManager.disconnect(this._nWorkspacesNotifyId);
@@ -926,8 +917,6 @@ class ThumbnailsBox extends St.Widget {
         let oldNumWorkspaces = validThumbnails.length;
         let newNumWorkspaces = workspaceManager.n_workspaces;
 
-        this._scrollAdjustment.upper = newNumWorkspaces;
-
         if (newNumWorkspaces > oldNumWorkspaces) {
             this.addThumbnails(oldNumWorkspaces, newNumWorkspaces - oldNumWorkspaces);
         } else {
@@ -1313,18 +1302,4 @@ class ThumbnailsBox extends St.Widget {
         childBox.y2 = indicatorY2 + indicatorBottomFullBorder;
         this._indicator.allocate(childBox, flags);
     }
-
-    _activeWorkspaceChanged(wm, from, to, direction) {
-        this._scrollAdjustment.value = from;
-        this._animatingIndicator = true;
-        Tweener.addTween(this._scrollAdjustment,
-                         { value: to,
-                           time: WorkspacesView.WORKSPACE_SWITCH_TIME,
-                           transition: 'easeOutQuad',
-                           onComplete: () => {
-                               this._animatingIndicator = false;
-                               this._queueUpdateStates();
-                           }
-                         });
-    }
 });
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index 5012aa361..dc6dc0442 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -379,7 +379,7 @@ class DelegateFocusNavigator extends St.Widget {
 });
 
 var WorkspacesDisplay = class {
-    constructor() {
+    constructor(adjustment) {
         this.actor = new DelegateFocusNavigator({ clip_to_allocation: true });
         this.actor._delegate = this;
         this.actor.connect('notify::allocation', this._updateWorkspacesActualGeometry.bind(this));
@@ -387,16 +387,8 @@ var WorkspacesDisplay = class {
 
         let workspaceManager = global.workspace_manager;
         let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
-        this._scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
-                                                     lower: 0,
-                                                     page_increment: 1,
-                                                     page_size: 1,
-                                                     step_increment: 0,
-                                                     upper: workspaceManager.n_workspaces });
+        this._scrollAdjustment = adjustment;
 
-        this._updateWorkspaces();
-        workspaceManager.connect('notify::n-workspaces',
-                                 this._updateWorkspaces.bind(this));
         this._scrollAdjustment.connect('notify::value',
                                        this._scrollValueChanged.bind(this));
 
@@ -478,13 +470,6 @@ var WorkspacesDisplay = class {
         this._animatingScroll = false; // programmatically updating the adjustment
     }
 
-    _updateWorkspaces() {
-        let workspaceManager = global.workspace_manager;
-        let newNumWorkspaces = workspaceManager.n_workspaces;
-
-        this._scrollAdjustment.upper = newNumWorkspaces;
-    }
-
     _activeWorkspaceChanged(wm, from, to, direction) {
         if (this._scrolling)
             return;


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