linear-view: Remove the scrollbar
The scrollbar is the main culprit for cluttered controls in the linear view - all its functionality is already provided by the workspace indicators, so it is save to remove the scrollbar in order to clean up the interface. https://bugzilla.gnome.org/show_bug.cgi?id=634948
This commit is contained in:
parent
be6e189b49
commit
4e9a530a64
@ -322,10 +322,6 @@ StTooltip StLabel {
|
|||||||
spacing: 15px;
|
spacing: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.workspaces-bar {
|
|
||||||
height: 48px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.workspaces-bar {
|
.workspaces-bar {
|
||||||
spacing: 5px;
|
spacing: 5px;
|
||||||
}
|
}
|
||||||
@ -391,14 +387,6 @@ StTooltip StLabel {
|
|||||||
background-image: url("mosaic-view-active.svg");
|
background-image: url("mosaic-view-active.svg");
|
||||||
}
|
}
|
||||||
|
|
||||||
#SwitchScroll {
|
|
||||||
height: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#SwitchScroll #hhandle {
|
|
||||||
border-radius: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Dash */
|
/* Dash */
|
||||||
|
|
||||||
#dash {
|
#dash {
|
||||||
|
@ -691,14 +691,23 @@ SingleView.prototype = {
|
|||||||
this.actor.set_clip(x, y, width, height);
|
this.actor.set_clip(x, y, width, height);
|
||||||
this._activeWorkspaceX = 0; // x offset of active ws while dragging
|
this._activeWorkspaceX = 0; // x offset of active ws while dragging
|
||||||
this._activeWorkspaceY = 0; // y offset of active ws while dragging
|
this._activeWorkspaceY = 0; // y offset of active ws while dragging
|
||||||
this._scroll = null;
|
|
||||||
this._lostWorkspaces = [];
|
this._lostWorkspaces = [];
|
||||||
this._animating = false; // tweening
|
this._animating = false; // tweening
|
||||||
this._scrolling = false; // dragging scroll bar or desktop
|
this._scrolling = false; // dragging desktop
|
||||||
this._animatingScroll = false; // programatically move the scroll bar
|
this._animatingScroll = false; // programatically updating the adjustment
|
||||||
this._inDrag = false; // dragging a window
|
this._inDrag = false; // dragging a window
|
||||||
this._lastMotionTime = -1; // used to track "stopping" while dragging workspaces
|
this._lastMotionTime = -1; // used to track "stopping" while dragging workspaces
|
||||||
|
|
||||||
|
let active = global.screen.get_active_workspace_index();
|
||||||
|
this._scrollAdjustment = new St.Adjustment({ value: active,
|
||||||
|
lower: 0,
|
||||||
|
page_increment: 1,
|
||||||
|
page_size: 1,
|
||||||
|
step_increment: 0,
|
||||||
|
upper: this._workspaces.length });
|
||||||
|
this._scrollAdjustment.connect('notify::value',
|
||||||
|
Lang.bind(this, this._onScroll));
|
||||||
|
|
||||||
this._dragIndex = -1;
|
this._dragIndex = -1;
|
||||||
|
|
||||||
this._buttonPressId = 0;
|
this._buttonPressId = 0;
|
||||||
@ -800,7 +809,7 @@ SingleView.prototype = {
|
|||||||
|
|
||||||
this._computeWorkspacePositions();
|
this._computeWorkspacePositions();
|
||||||
this._updateWorkspaceActors(showAnimation);
|
this._updateWorkspaceActors(showAnimation);
|
||||||
this._scrollScrollBarToIndex(active, showAnimation);
|
this._updateScrollAdjustment(active, showAnimation);
|
||||||
},
|
},
|
||||||
|
|
||||||
// _setWorkspaceDraggable:
|
// _setWorkspaceDraggable:
|
||||||
@ -875,7 +884,7 @@ SingleView.prototype = {
|
|||||||
// If the user has moved more than half a workspace, we want to "settle"
|
// If the user has moved more than half a workspace, we want to "settle"
|
||||||
// to the new workspace even if the user stops dragging rather "throws"
|
// to the new workspace even if the user stops dragging rather "throws"
|
||||||
// by releasing during the drag.
|
// by releasing during the drag.
|
||||||
let noStop = Math.abs(activate - this._scroll.adjustment.value) > 0.5;
|
let noStop = Math.abs(activate - this._scrollAdjustment.value) > 0.5;
|
||||||
|
|
||||||
// We detect if the user is stopped by comparing the timestamp of the button
|
// We detect if the user is stopped by comparing the timestamp of the button
|
||||||
// release with the timestamp of the last motion. Experimentally, a difference
|
// release with the timestamp of the last motion. Experimentally, a difference
|
||||||
@ -906,7 +915,7 @@ SingleView.prototype = {
|
|||||||
let dx = this._dragX - stageX;
|
let dx = this._dragX - stageX;
|
||||||
let primary = global.get_primary_monitor();
|
let primary = global.get_primary_monitor();
|
||||||
|
|
||||||
this._scroll.adjustment.value += (dx / primary.width);
|
this._scrollAdjustment.value += (dx / primary.width);
|
||||||
this._dragX = stageX;
|
this._dragX = stageX;
|
||||||
this._lastMotionTime = event.get_time();
|
this._lastMotionTime = event.get_time();
|
||||||
|
|
||||||
@ -1078,14 +1087,14 @@ SingleView.prototype = {
|
|||||||
this._updateWorkspaceActors(false);
|
this._updateWorkspaceActors(false);
|
||||||
},
|
},
|
||||||
|
|
||||||
_scrollScrollBarToIndex: function(index, showAnimation) {
|
_updateScrollAdjustment: function(index, showAnimation) {
|
||||||
if (!this._scroll || this._scrolling)
|
if (this._scrolling)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._animatingScroll = true;
|
this._animatingScroll = true;
|
||||||
|
|
||||||
if (showAnimation) {
|
if (showAnimation) {
|
||||||
Tweener.addTween(this._scroll.adjustment, {
|
Tweener.addTween(this._scrollAdjustment, {
|
||||||
value: index,
|
value: index,
|
||||||
time: WORKSPACE_SWITCH_TIME,
|
time: WORKSPACE_SWITCH_TIME,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
@ -1095,7 +1104,7 @@ SingleView.prototype = {
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this._scroll.adjustment.value = index;
|
this._scrollAdjustment.value = index;
|
||||||
this._animatingScroll = false;
|
this._animatingScroll = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1106,8 +1115,7 @@ SingleView.prototype = {
|
|||||||
for (let l = 0; l < lostWorkspaces.length; l++)
|
for (let l = 0; l < lostWorkspaces.length; l++)
|
||||||
lostWorkspaces[l].disconnectAll();
|
lostWorkspaces[l].disconnectAll();
|
||||||
|
|
||||||
if (this._scroll != null)
|
Tweener.addTween(this._scrollAdjustment,
|
||||||
Tweener.addTween(this._scroll.adjustment,
|
|
||||||
{ upper: newNumWorkspaces,
|
{ upper: newNumWorkspaces,
|
||||||
time: WORKSPACE_SWITCH_TIME,
|
time: WORKSPACE_SWITCH_TIME,
|
||||||
transition: 'easeOutQuad'
|
transition: 'easeOutQuad'
|
||||||
@ -1129,12 +1137,9 @@ SingleView.prototype = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._scrollToActive(true);
|
this._scrollToActive(true);
|
||||||
this._updatePanelVisibility();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_activeWorkspaceChanged: function(wm, from, to, direction) {
|
_activeWorkspaceChanged: function(wm, from, to, direction) {
|
||||||
this._updatePanelVisibility();
|
|
||||||
|
|
||||||
if (this._scrolling)
|
if (this._scrolling)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1169,7 +1174,7 @@ SingleView.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_dragBegin: function() {
|
_dragBegin: function() {
|
||||||
if (!this._scroll || this._scrolling)
|
if (this._scrolling)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._inDrag = true;
|
this._inDrag = true;
|
||||||
@ -1273,8 +1278,7 @@ SingleView.prototype = {
|
|||||||
this._workspaces[i].setReservedSlot(null);
|
this._workspaces[i].setReservedSlot(null);
|
||||||
},
|
},
|
||||||
|
|
||||||
// handle changes to the scroll bar's adjustment:
|
// sync the workspaces' positions to the value of the scroll adjustment
|
||||||
// sync the workspaces' positions to the position of the scroll bar handle
|
|
||||||
// and change the active workspace if appropriate
|
// and change the active workspace if appropriate
|
||||||
_onScroll: function(adj) {
|
_onScroll: function(adj) {
|
||||||
if (this._animatingScroll)
|
if (this._animatingScroll)
|
||||||
@ -1285,20 +1289,7 @@ SingleView.prototype = {
|
|||||||
|
|
||||||
if (active != current) {
|
if (active != current) {
|
||||||
let metaWorkspace = this._workspaces[current].metaWorkspace;
|
let metaWorkspace = this._workspaces[current].metaWorkspace;
|
||||||
|
|
||||||
if (!this._scrolling) {
|
|
||||||
// This here is a little tricky - we get here when StScrollBar
|
|
||||||
// animates paging; we switch the active workspace, but
|
|
||||||
// leave out any extra animation (just like we would do when
|
|
||||||
// the handle was dragged)
|
|
||||||
// If StScrollBar emitted scroll-start before and scroll-stop
|
|
||||||
// after the animation, this would not be necessary
|
|
||||||
this._scrolling = true;
|
|
||||||
metaWorkspace.activate(global.get_current_time());
|
metaWorkspace.activate(global.get_current_time());
|
||||||
this._scrolling = false;
|
|
||||||
} else {
|
|
||||||
metaWorkspace.activate(global.get_current_time());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let last = this._workspaces.length - 1;
|
let last = this._workspaces.length - 1;
|
||||||
@ -1306,8 +1297,6 @@ SingleView.prototype = {
|
|||||||
let lastWorkspaceX = this._workspaces[last].actor.x;
|
let lastWorkspaceX = this._workspaces[last].actor.x;
|
||||||
let workspacesWidth = lastWorkspaceX - firstWorkspaceX;
|
let workspacesWidth = lastWorkspaceX - firstWorkspaceX;
|
||||||
|
|
||||||
// The scrollbar is hidden when there is only one workspace, so
|
|
||||||
// adj.upper should at least be 2 - but better be safe than sorry
|
|
||||||
if (adj.upper == 1)
|
if (adj.upper == 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1321,12 +1310,6 @@ SingleView.prototype = {
|
|||||||
this._workspaces[i].actor.visible = Math.abs(i - adj.value) <= 1;
|
this._workspaces[i].actor.visible = Math.abs(i - adj.value) <= 1;
|
||||||
this._workspaces[i].actor.x += dx;
|
this._workspaces[i].actor.x += dx;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this._scrolling && active == adj.value) {
|
|
||||||
// Again, work around the paging in StScrollBar: simulate
|
|
||||||
// the effect of scroll-stop
|
|
||||||
this._updateWorkspaceActors(false);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// handle scroll wheel events:
|
// handle scroll wheel events:
|
||||||
@ -1353,37 +1336,6 @@ SingleView.prototype = {
|
|||||||
pack_start: true,
|
pack_start: true,
|
||||||
vertical: true });
|
vertical: true });
|
||||||
|
|
||||||
let active = global.screen.get_active_workspace_index();
|
|
||||||
let adj = new St.Adjustment({ value: active,
|
|
||||||
lower: 0,
|
|
||||||
page_increment: 1,
|
|
||||||
page_size: 1,
|
|
||||||
step_increment: 0,
|
|
||||||
upper: this._workspaces.length });
|
|
||||||
this._scroll = new St.ScrollBar({ adjustment: adj,
|
|
||||||
vertical: false,
|
|
||||||
name: 'SwitchScroll' });
|
|
||||||
|
|
||||||
// we have set adj.step_increment to 0, so all scroll wheel events
|
|
||||||
// are processed with this handler - this allows us to animate the
|
|
||||||
// workspace switch
|
|
||||||
this._scroll.connect('scroll-event',
|
|
||||||
Lang.bind(this, this._onScrollEvent));
|
|
||||||
|
|
||||||
this._scroll.adjustment.connect('notify::value',
|
|
||||||
Lang.bind(this, this._onScroll));
|
|
||||||
|
|
||||||
|
|
||||||
this._scroll.connect('scroll-start', Lang.bind(this,
|
|
||||||
function() {
|
|
||||||
this._scrolling = true;
|
|
||||||
}));
|
|
||||||
this._scroll.connect('scroll-stop', Lang.bind(this,
|
|
||||||
function() {
|
|
||||||
this._scrolling = false;
|
|
||||||
this._scrollToActive(true);
|
|
||||||
}));
|
|
||||||
|
|
||||||
let indicator = new WorkspaceIndicator(Lang.bind(this, function(i) {
|
let indicator = new WorkspaceIndicator(Lang.bind(this, function(i) {
|
||||||
if (this._workspaces[i] != undefined)
|
if (this._workspaces[i] != undefined)
|
||||||
this._workspaces[i].metaWorkspace.activate(global.get_current_time());
|
this._workspaces[i].metaWorkspace.activate(global.get_current_time());
|
||||||
@ -1398,26 +1350,9 @@ SingleView.prototype = {
|
|||||||
}), Lang.bind(this, this._onScrollEvent));
|
}), Lang.bind(this, this._onScrollEvent));
|
||||||
|
|
||||||
actor.add(indicator.actor, { expand: true, x_fill: true, y_fill: true });
|
actor.add(indicator.actor, { expand: true, x_fill: true, y_fill: true });
|
||||||
actor.add(this._scroll, { expand: true,
|
|
||||||
x_fill: true,
|
|
||||||
y_fill: false,
|
|
||||||
y_align: St.Align.START });
|
|
||||||
|
|
||||||
this._updatePanelVisibility();
|
|
||||||
|
|
||||||
return actor;
|
return actor;
|
||||||
},
|
},
|
||||||
|
|
||||||
_updatePanelVisibility: function() {
|
|
||||||
let showSwitches = (global.screen.n_workspaces > 1);
|
|
||||||
if (this._scroll != null) {
|
|
||||||
Tweener.addTween(this._scroll,
|
|
||||||
{ opacity: showSwitches ? 255 : 0,
|
|
||||||
time: WORKSPACE_SWITCH_TIME,
|
|
||||||
transition: 'easeOutQuad' });
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
addWorkspace: function() {
|
addWorkspace: function() {
|
||||||
let ws = GenericWorkspacesView.prototype.addWorkspace.call(this);
|
let ws = GenericWorkspacesView.prototype.addWorkspace.call(this);
|
||||||
if (ws != null)
|
if (ws != null)
|
||||||
|
Loading…
Reference in New Issue
Block a user