overviewControls: Hide the appDisplay when it's not shown

Hiding actors allows excluding them from layout, so by hidding the
appDisplay in all the cases where the overviewAdjustment is not actually
showing it, we can save a lot of time on the first frame of painting
the overview because we no longer have to layout the whole appGrid.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1755>
This commit is contained in:
Jonas Dreßler 2021-03-09 17:37:22 +01:00 committed by Marge Bot
parent d21a0b186e
commit c239cd398d

View File

@ -179,6 +179,7 @@ class ControlsManagerLayout extends Clutter.BoxLayout {
this._workspacesDisplay.allocate(workspacesBox); this._workspacesDisplay.allocate(workspacesBox);
// AppDisplay // AppDisplay
if (this._appDisplay.visible) {
const workspaceAppGridBox = const workspaceAppGridBox =
this._cachedWorkspaceBoxes.get(ControlsState.APP_GRID); this._cachedWorkspaceBoxes.get(ControlsState.APP_GRID);
@ -195,7 +196,9 @@ class ControlsManagerLayout extends Clutter.BoxLayout {
appDisplayBox = initialBox.interpolate(finalBox, transitionParams.progress); appDisplayBox = initialBox.interpolate(finalBox, transitionParams.progress);
} }
this._appDisplay.allocate(appDisplayBox); this._appDisplay.allocate(appDisplayBox);
}
// Search // Search
childBox.set_origin(0, searchHeight + spacing); childBox.set_origin(0, searchHeight + spacing);
@ -500,6 +503,12 @@ class ControlsManager extends St.Widget {
this._thumbnailsBox.ease(params); this._thumbnailsBox.ease(params);
} }
_updateAppDisplayVisibility() {
this._appDisplay.visible =
this._stateAdjustment.value > ControlsState.WINDOW_PICKER &&
!this._searchController.searchActive;
}
_update() { _update() {
const params = this._stateAdjustment.getStateTransitionParams(); const params = this._stateAdjustment.getStateTransitionParams();
@ -512,13 +521,14 @@ class ControlsManager extends St.Widget {
fitModeAdjustment.value = fitMode; fitModeAdjustment.value = fitMode;
this._updateThumbnailsBox(); this._updateThumbnailsBox();
this._updateAppDisplayVisibility();
} }
_onSearchChanged() { _onSearchChanged() {
const { searchActive } = this._searchController; const { searchActive } = this._searchController;
if (!searchActive) { if (!searchActive) {
this._appDisplay.show(); this._updateAppDisplayVisibility();
this._workspacesDisplay.reactive = true; this._workspacesDisplay.reactive = true;
this._workspacesDisplay.setPrimaryWorkspaceVisible(true); this._workspacesDisplay.setPrimaryWorkspaceVisible(true);
} else { } else {
@ -531,7 +541,7 @@ class ControlsManager extends St.Widget {
opacity: searchActive ? 0 : 255, opacity: searchActive ? 0 : 255,
duration: SIDE_CONTROLS_ANIMATION_TIME, duration: SIDE_CONTROLS_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD, mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => (this._appDisplay.visible = !searchActive), onComplete: () => this._updateAppDisplayVisibility(),
}); });
this._workspacesDisplay.ease({ this._workspacesDisplay.ease({
opacity: searchActive ? 0 : 255, opacity: searchActive ? 0 : 255,