[gnome-shell/wip/exalm/gestures: 3/13] workspaceThumbnail: Sync indicator with WorkspacesDisplay



commit 9aa0279060db80f6349f9255b374473358a71e7a
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 | 37 +++++--------------------------------
 js/ui/workspacesView.js     | 19 ++-----------------
 4 files changed, 31 insertions(+), 53 deletions(-)
---
diff --git a/js/ui/overviewControls.js b/js/ui/overviewControls.js
index f5c51eed7a..88a766b5a3 100644
--- a/js/ui/overviewControls.js
+++ b/js/ui/overviewControls.js
@@ -422,10 +422,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));
@@ -450,6 +463,13 @@ var ControlsManager = class {
         Main.overview.connect('showing', this._updateSpacerVisibility.bind(this));
     }
 
+    _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 4ee8f41d6d..6ac88192f3 100644
--- a/js/ui/viewSelector.js
+++ b/js/ui/viewSelector.js
@@ -124,7 +124,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;
@@ -164,7 +164,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 28e4e71b18..608beb7eea 100644
--- a/js/ui/workspaceThumbnail.js
+++ b/js/ui/workspaceThumbnail.js
@@ -8,7 +8,6 @@ const Background = imports.ui.background;
 const DND = imports.ui.dnd;
 const Main = imports.ui.main;
 const Workspace = imports.ui.workspace;
-const WorkspacesView = imports.ui.workspacesView;
 
 // The maximum size of a thumbnail is 1/10 the width and height of the screen
 let MAX_THUMBNAIL_SCALE = 1 / 10.;
@@ -620,7 +619,7 @@ var ThumbnailsBox = GObject.registerClass({
             0, Infinity, 0)
     }
 }, class ThumbnailsBox extends St.Widget {
-    _init() {
+    _init(adjustment) {
         super._init({ reactive: true,
                       style_class: 'workspace-thumbnails',
                       request_mode: Clutter.RequestMode.WIDTH_FOR_HEIGHT });
@@ -697,16 +696,12 @@ var ThumbnailsBox = GObject.registerClass({
         this._syncStackingId = 0;
         this._workareasChangedId = 0;
 
-        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();
         });
     }
@@ -894,9 +889,6 @@ var ThumbnailsBox = GObject.registerClass({
     _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));
@@ -929,10 +921,6 @@ var ThumbnailsBox = GObject.registerClass({
         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);
@@ -961,8 +949,6 @@ var ThumbnailsBox = GObject.registerClass({
         let oldNumWorkspaces = validThumbnails.length;
         let newNumWorkspaces = workspaceManager.n_workspaces;
 
-        this._scrollAdjustment.upper = newNumWorkspaces;
-
         if (newNumWorkspaces > oldNumWorkspaces) {
             this.addThumbnails(oldNumWorkspaces, newNumWorkspaces - oldNumWorkspaces);
         } else {
@@ -1344,17 +1330,4 @@ var ThumbnailsBox = GObject.registerClass({
         childBox.y2 = indicatorY2 + indicatorBottomFullBorder;
         this._indicator.allocate(childBox, flags);
     }
-
-    _activeWorkspaceChanged(_wm, from, to, _direction) {
-        this._scrollAdjustment.value = from;
-        this._animatingIndicator = true;
-        this._scrollAdjustment.ease(to, {
-            progress_mode: Clutter.AnimationMode.EASE_OUT_QUAD,
-            duration: WorkspacesView.WORKSPACE_SWITCH_TIME,
-            onComplete: () => {
-                this._animatingIndicator = false;
-                this._queueUpdateStates();
-            }
-        });
-    }
 });
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index 29f5ac350a..a243692ff6 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -408,7 +408,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));
@@ -416,16 +416,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));
 
@@ -523,13 +515,6 @@ var WorkspacesDisplay = class {
         }
     }
 
-    _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]