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/821
This commit is contained in:
parent
f55ff01239
commit
9c1940ef9d
@ -436,11 +436,28 @@ class ControlsManager extends St.Widget {
|
|||||||
this._dashSpacer = new DashSpacer();
|
this._dashSpacer = new DashSpacer();
|
||||||
this._dashSpacer.setDashActor(this._dashSlider);
|
this._dashSpacer.setDashActor(this._dashSlider);
|
||||||
|
|
||||||
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._nWorkspacesNotifyId =
|
||||||
|
workspaceManager.connect('notify::n-workspaces',
|
||||||
|
this._updateAdjustment.bind(this));
|
||||||
|
|
||||||
|
this._thumbnailsBox =
|
||||||
|
new WorkspaceThumbnail.ThumbnailsBox(this._workspaceAdjustment);
|
||||||
this._thumbnailsSlider = new ThumbnailsSlider(this._thumbnailsBox);
|
this._thumbnailsSlider = new ThumbnailsSlider(this._thumbnailsBox);
|
||||||
|
|
||||||
this.viewSelector = new ViewSelector.ViewSelector(searchEntry,
|
this.viewSelector = new ViewSelector.ViewSelector(searchEntry,
|
||||||
this.dash.showAppsButton);
|
this._workspaceAdjustment, this.dash.showAppsButton);
|
||||||
this.viewSelector.connect('page-changed', this._setVisibility.bind(this));
|
this.viewSelector.connect('page-changed', this._setVisibility.bind(this));
|
||||||
this.viewSelector.connect('page-empty', this._onPageEmpty.bind(this));
|
this.viewSelector.connect('page-empty', this._onPageEmpty.bind(this));
|
||||||
|
|
||||||
@ -457,6 +474,24 @@ class ControlsManager extends St.Widget {
|
|||||||
layout.connect('allocation-changed', this._updateWorkspacesGeometry.bind(this));
|
layout.connect('allocation-changed', this._updateWorkspacesGeometry.bind(this));
|
||||||
|
|
||||||
Main.overview.connect('showing', this._updateSpacerVisibility.bind(this));
|
Main.overview.connect('showing', this._updateSpacerVisibility.bind(this));
|
||||||
|
|
||||||
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
_onDestroy() {
|
||||||
|
global.workspace_manager.disconnect(this._nWorkspacesNotifyId);
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateAdjustment() {
|
||||||
|
let workspaceManager = global.workspace_manager;
|
||||||
|
let newNumWorkspaces = workspaceManager.n_workspaces;
|
||||||
|
let activeIndex = workspaceManager.get_active_workspace_index();
|
||||||
|
|
||||||
|
this._workspaceAdjustment.upper = newNumWorkspaces;
|
||||||
|
|
||||||
|
// A workspace might have been inserted or removed before the active
|
||||||
|
// one, causing the adjustment to go out of sync, so update the value
|
||||||
|
this._workspaceAdjustment.value = activeIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateWorkspacesGeometry() {
|
_updateWorkspacesGeometry() {
|
||||||
|
@ -128,7 +128,7 @@ var ViewSelector = GObject.registerClass({
|
|||||||
'page-empty': {},
|
'page-empty': {},
|
||||||
},
|
},
|
||||||
}, class ViewSelector extends Shell.Stack {
|
}, class ViewSelector extends Shell.Stack {
|
||||||
_init(searchEntry, showAppsButton) {
|
_init(searchEntry, workspaceAdjustment, showAppsButton) {
|
||||||
super._init({
|
super._init({
|
||||||
name: 'viewSelector',
|
name: 'viewSelector',
|
||||||
x_expand: true,
|
x_expand: true,
|
||||||
@ -171,7 +171,8 @@ var ViewSelector = GObject.registerClass({
|
|||||||
this._iconClickedId = 0;
|
this._iconClickedId = 0;
|
||||||
this._capturedEventId = 0;
|
this._capturedEventId = 0;
|
||||||
|
|
||||||
this._workspacesDisplay = new WorkspacesView.WorkspacesDisplay();
|
this._workspacesDisplay =
|
||||||
|
new WorkspacesView.WorkspacesDisplay(workspaceAdjustment);
|
||||||
this._workspacesPage = this._addPage(this._workspacesDisplay,
|
this._workspacesPage = this._addPage(this._workspacesDisplay,
|
||||||
_("Windows"), 'focus-windows-symbolic');
|
_("Windows"), 'focus-windows-symbolic');
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@ const Background = imports.ui.background;
|
|||||||
const DND = imports.ui.dnd;
|
const DND = imports.ui.dnd;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Workspace = imports.ui.workspace;
|
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
|
// The maximum size of a thumbnail is 1/10 the width and height of the screen
|
||||||
let MAX_THUMBNAIL_SCALE = 1 / 10.;
|
let MAX_THUMBNAIL_SCALE = 1 / 10.;
|
||||||
@ -628,7 +627,7 @@ var ThumbnailsBox = GObject.registerClass({
|
|||||||
0, Infinity, 0),
|
0, Infinity, 0),
|
||||||
},
|
},
|
||||||
}, class ThumbnailsBox extends St.Widget {
|
}, class ThumbnailsBox extends St.Widget {
|
||||||
_init() {
|
_init(scrollAdjustment) {
|
||||||
super._init({ reactive: true,
|
super._init({ reactive: true,
|
||||||
style_class: 'workspace-thumbnails',
|
style_class: 'workspace-thumbnails',
|
||||||
request_mode: Clutter.RequestMode.WIDTH_FOR_HEIGHT });
|
request_mode: Clutter.RequestMode.WIDTH_FOR_HEIGHT });
|
||||||
@ -701,18 +700,17 @@ var ThumbnailsBox = GObject.registerClass({
|
|||||||
this._syncStackingId = 0;
|
this._syncStackingId = 0;
|
||||||
this._workareasChangedId = 0;
|
this._workareasChangedId = 0;
|
||||||
|
|
||||||
let workspaceManager = global.workspace_manager;
|
this._scrollAdjustment = scrollAdjustment;
|
||||||
let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
|
|
||||||
this._scrollAdjustment = new St.Adjustment({
|
this._scrollAdjustment.connect('notify::value', adj => {
|
||||||
value: activeWorkspaceIndex,
|
let workspaceManager = global.workspace_manager;
|
||||||
lower: 0,
|
let activeIndex = workspaceManager.get_active_workspace_index();
|
||||||
page_increment: 1,
|
|
||||||
page_size: 1,
|
this._animatingIndicator = adj.value !== activeIndex;
|
||||||
step_increment: 0,
|
|
||||||
upper: workspaceManager.n_workspaces,
|
if (!this._animatingIndicator)
|
||||||
});
|
this._queueUpdateStates();
|
||||||
|
|
||||||
this._scrollAdjustment.connect('notify::value', () => {
|
|
||||||
this.queue_relayout();
|
this.queue_relayout();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -915,9 +913,6 @@ var ThumbnailsBox = GObject.registerClass({
|
|||||||
_createThumbnails() {
|
_createThumbnails() {
|
||||||
let workspaceManager = global.workspace_manager;
|
let workspaceManager = global.workspace_manager;
|
||||||
|
|
||||||
this._switchWorkspaceNotifyId =
|
|
||||||
global.window_manager.connect('switch-workspace',
|
|
||||||
this._activeWorkspaceChanged.bind(this));
|
|
||||||
this._nWorkspacesNotifyId =
|
this._nWorkspacesNotifyId =
|
||||||
workspaceManager.connect('notify::n-workspaces',
|
workspaceManager.connect('notify::n-workspaces',
|
||||||
this._workspacesChanged.bind(this));
|
this._workspacesChanged.bind(this));
|
||||||
@ -950,10 +945,6 @@ var ThumbnailsBox = GObject.registerClass({
|
|||||||
if (this._thumbnails.length == 0)
|
if (this._thumbnails.length == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (this._switchWorkspaceNotifyId > 0) {
|
|
||||||
global.window_manager.disconnect(this._switchWorkspaceNotifyId);
|
|
||||||
this._switchWorkspaceNotifyId = 0;
|
|
||||||
}
|
|
||||||
if (this._nWorkspacesNotifyId > 0) {
|
if (this._nWorkspacesNotifyId > 0) {
|
||||||
let workspaceManager = global.workspace_manager;
|
let workspaceManager = global.workspace_manager;
|
||||||
workspaceManager.disconnect(this._nWorkspacesNotifyId);
|
workspaceManager.disconnect(this._nWorkspacesNotifyId);
|
||||||
@ -982,8 +973,6 @@ var ThumbnailsBox = GObject.registerClass({
|
|||||||
let oldNumWorkspaces = validThumbnails.length;
|
let oldNumWorkspaces = validThumbnails.length;
|
||||||
let newNumWorkspaces = workspaceManager.n_workspaces;
|
let newNumWorkspaces = workspaceManager.n_workspaces;
|
||||||
|
|
||||||
this._scrollAdjustment.upper = newNumWorkspaces;
|
|
||||||
|
|
||||||
if (newNumWorkspaces > oldNumWorkspaces) {
|
if (newNumWorkspaces > oldNumWorkspaces) {
|
||||||
this.addThumbnails(oldNumWorkspaces, newNumWorkspaces - oldNumWorkspaces);
|
this.addThumbnails(oldNumWorkspaces, newNumWorkspaces - oldNumWorkspaces);
|
||||||
} else {
|
} else {
|
||||||
@ -1368,17 +1357,4 @@ var ThumbnailsBox = GObject.registerClass({
|
|||||||
childBox.y2 = indicatorY2 + indicatorBottomFullBorder;
|
childBox.y2 = indicatorY2 + indicatorBottomFullBorder;
|
||||||
this._indicator.allocate(childBox, flags);
|
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();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
@ -410,23 +410,12 @@ class ExtraWorkspaceView extends WorkspacesViewBase {
|
|||||||
|
|
||||||
var WorkspacesDisplay = GObject.registerClass(
|
var WorkspacesDisplay = GObject.registerClass(
|
||||||
class WorkspacesDisplay extends St.Widget {
|
class WorkspacesDisplay extends St.Widget {
|
||||||
_init() {
|
_init(scrollAdjustment) {
|
||||||
super._init({ clip_to_allocation: true });
|
super._init({ clip_to_allocation: true });
|
||||||
this.connect('notify::allocation', this._updateWorkspacesActualGeometry.bind(this));
|
this.connect('notify::allocation', this._updateWorkspacesActualGeometry.bind(this));
|
||||||
|
|
||||||
let workspaceManager = global.workspace_manager;
|
let workspaceManager = global.workspace_manager;
|
||||||
let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
|
this._scrollAdjustment = scrollAdjustment;
|
||||||
this._scrollAdjustment = new St.Adjustment({
|
|
||||||
value: activeWorkspaceIndex,
|
|
||||||
lower: 0,
|
|
||||||
page_increment: 1,
|
|
||||||
page_size: 1,
|
|
||||||
step_increment: 0,
|
|
||||||
upper: workspaceManager.n_workspaces,
|
|
||||||
});
|
|
||||||
|
|
||||||
workspaceManager.bind_property('n-workspaces',
|
|
||||||
this._scrollAdjustment, 'upper', GObject.BindingFlags.SYNC_CREATE);
|
|
||||||
|
|
||||||
this._switchWorkspaceId =
|
this._switchWorkspaceId =
|
||||||
global.window_manager.connect('switch-workspace',
|
global.window_manager.connect('switch-workspace',
|
||||||
|
Loading…
Reference in New Issue
Block a user