diff options
Diffstat (limited to 'extensions/45/vertical-workspaces/lib/overviewControls.js')
-rw-r--r-- | extensions/45/vertical-workspaces/lib/overviewControls.js | 1764 |
1 files changed, 0 insertions, 1764 deletions
diff --git a/extensions/45/vertical-workspaces/lib/overviewControls.js b/extensions/45/vertical-workspaces/lib/overviewControls.js deleted file mode 100644 index df5b371..0000000 --- a/extensions/45/vertical-workspaces/lib/overviewControls.js +++ /dev/null @@ -1,1764 +0,0 @@ -/** - * V-Shell (Vertical Workspaces) - * overviewControls.js - * - * @author GdH <G-dH@github.com> - * @copyright 2022 - 2023 - * @license GPL-3.0 - * - */ - -'use strict'; - -import GLib from 'gi://GLib'; -import Clutter from 'gi://Clutter'; -import St from 'gi://St'; -import Meta from 'gi://Meta'; -import Shell from 'gi://Shell'; -import GObject from 'gi://GObject'; - -import * as Main from 'resource:///org/gnome/shell/ui/main.js'; -import * as Overview from 'resource:///org/gnome/shell/ui/overview.js'; -import * as Layout from 'resource:///org/gnome/shell/ui/layout.js'; -import * as OverviewControls from 'resource:///org/gnome/shell/ui/overviewControls.js'; -import * as WorkspacesView from 'resource:///org/gnome/shell/ui/workspacesView.js'; -import * as Background from 'resource:///org/gnome/shell/ui/background.js'; -import * as Util from 'resource:///org/gnome/shell/misc/util.js'; - -let Me; -let opt; -// gettext -let _; - -const ControlsState = OverviewControls.ControlsState; -const FitMode = WorkspacesView.FitMode; - -const ANIMATION_TIME = Overview.ANIMATION_TIME; -const DASH_MAX_SIZE_RATIO = 0.25; - -let _originalSearchControllerSigId; -let _searchControllerSigId; -let _timeouts; - -export const OverviewControlsModule = class { - constructor(me) { - Me = me; - opt = Me.opt; - _ = Me.gettext; - - this._firstActivation = true; - this.moduleEnabled = false; - this._overrides = null; - } - - cleanGlobals() { - Me = null; - opt = null; - _ = null; - } - - update(reset) { - this._removeTimeouts(); - this.moduleEnabled = true; - const conflict = false; - - reset = reset || !this.moduleEnabled || conflict; - - // don't touch the original code if module disabled - if (reset && !this._firstActivation) { - this._disableModule(); - } else if (!reset) { - this._firstActivation = false; - this._activateModule(); - } - if (reset && this._firstActivation) - console.debug(' OverviewControlsModule - Keeping untouched'); - } - - _activateModule() { - if (!this._overrides) - this._overrides = new Me.Util.Overrides(); - - _timeouts = {}; - - this._replaceOnSearchChanged(); - - this._overrides.addOverride('ControlsManager', OverviewControls.ControlsManager.prototype, ControlsManagerCommon); - - if (opt.ORIENTATION === Clutter.Orientation.VERTICAL) - this._overrides.addOverride('ControlsManagerLayout', Main.overview._overview.controls.layoutManager, ControlsManagerLayoutVertical); - else - this._overrides.addOverride('ControlsManagerLayout', Main.overview._overview.controls.layoutManager, ControlsManagerLayoutHorizontal); - - this._overrides.addOverride('LayoutManager', Layout.LayoutManager.prototype, LayoutManager); - - console.debug(' OverviewControlsModule - Activated'); - } - - _disableModule() { - if (this._overrides) - this._overrides.removeAll(); - this._overrides = null; - - const reset = true; - this._replaceOnSearchChanged(reset); - Main.overview._overview._controls._appDisplay.opacity = 255; - - console.debug(' OverviewControlsModule - Disabled'); - } - - _removeTimeouts() { - if (_timeouts) { - Object.values(_timeouts).forEach(t => { - if (t) - GLib.source_remove(t); - }); - _timeouts = null; - } - } - - _replaceOnSearchChanged(reset) { - const searchController = Main.overview._overview.controls._searchController; - if (reset) { - if (_searchControllerSigId) { - searchController.disconnect(_searchControllerSigId); - _searchControllerSigId = 0; - } - if (_originalSearchControllerSigId) { - searchController.unblock_signal_handler(_originalSearchControllerSigId); - _originalSearchControllerSigId = 0; - } - Main.overview._overview._controls.layoutManager._searchController._searchResults.translation_x = 0; - Main.overview._overview._controls.layoutManager._searchController._searchResults.translation_y = 0; - Main.overview.searchEntry.visible = true; - Main.overview.searchEntry.opacity = 255; - } else { - // reconnect signal to use custom function (callbacks cannot be overridden in class prototype, they are already in memory as a copy for the given callback) - if (!_originalSearchControllerSigId) - _originalSearchControllerSigId = GObject.signal_handler_find(searchController, { signalId: 'notify', detail: 'search-active' }); - if (_originalSearchControllerSigId) - searchController.block_signal_handler(_originalSearchControllerSigId); - - if (!_searchControllerSigId) - _searchControllerSigId = searchController.connect('notify::search-active', ControlsManagerCommon._onSearchChanged.bind(Main.overview._overview.controls)); - } - } -}; - -const ControlsManagerCommon = { - // this function is used as a callback by a signal handler, needs to be reconnected after modification as the original callback uses a copy of the original function - /* _update: function() { - ... - }*/ - - // this function has duplicate in WorkspaceView so we use one function for both to avoid issues with syncing them - _getFitModeForState(state) { - return _getFitModeForState(state); - }, - - _updateThumbnailsBox() { - const { currentState } = this._stateAdjustment.getStateTransitionParams(); - const { shouldShow } = this._thumbnailsBox; - const thumbnailsBoxVisible = shouldShow && - ((currentState < ControlsState.APP_GRID && opt.SHOW_WS_TMB) || - (currentState > ControlsState.WINDOW_PICKER && opt.SHOW_WS_TMB_APPGRID) || - (currentState > ControlsState.WINDOW_PICKER && this._searchController.searchActive && opt.SHOW_WS_TMB) - ); - this._thumbnailsBox.visible = thumbnailsBoxVisible; - - // this call should be directly in _update(), but it's used as a callback function and it would require to reconnect the signal - this._updateOverview(); - }, - - // this function is pure addition to the original code and handles wsDisp transition to APP_GRID view - _updateOverview() { - this._workspacesDisplay.translation_x = 0; - this._workspacesDisplay.translation_y = 0; - this._workspacesDisplay.scale_x = 1; - this._workspacesDisplay.scale_y = 1; - const { initialState, finalState, progress, currentState } = this._stateAdjustment.getStateTransitionParams(); - - const paramsForState = s => { - let opacity; - switch (s) { - case ControlsState.HIDDEN: - case ControlsState.WINDOW_PICKER: - opacity = 255; - break; - case ControlsState.APP_GRID: - opacity = 0; - break; - default: - opacity = 255; - break; - } - return { opacity }; - }; - - let initialParams = paramsForState(initialState); - let finalParams = paramsForState(finalState); - - let opacity = Math.round(Util.lerp(initialParams.opacity, finalParams.opacity, progress)); - - let workspacesDisplayVisible = opacity !== 0; - - // improve transition from search results to desktop - if (finalState === 0 && this._searchController._searchResults.visible) - this._searchController.hide(); - - // reset Static Workspace window picker mode - if (currentState === 0 && opt.OVERVIEW_MODE && opt.WORKSPACE_MODE) - opt.WORKSPACE_MODE = 0; - - if (!opt.WS_ANIMATION || !opt.SHOW_WS_TMB) { - this._workspacesDisplay.opacity = opacity; - } else if (!opt.SHOW_WS_TMB_BG) { - // fade out ws wallpaper during transition to ws switcher if ws switcher background disabled - const ws = this._workspacesDisplay._workspacesViews[global.display.get_primary_monitor()]?._workspaces[this._workspaceAdjustment.value]; - if (ws) - ws._background.opacity = opacity; - } - - // if ws preview background is disabled, animate tmb box and dash - const tmbBox = this._thumbnailsBox; - const dash = this.dash; - const searchEntryBin = this._searchEntryBin; - // this dash transition collides with startup animation and freezes GS for good, needs to be delayed (first Main.overview 'hiding' event enables it) - const skipDash = Me.Util.dashNotDefault(); - - // OVERVIEW_MODE 2 should animate dash and wsTmbBox only if WORKSPACE_MODE === 0 (windows not spread) - const animateOverviewMode2 = opt.OVERVIEW_MODE2 && !(finalState === 1 && opt.WORKSPACE_MODE); - if (!Main.layoutManager._startingUp && ((!opt.SHOW_WS_PREVIEW_BG && !opt.OVERVIEW_MODE2) || animateOverviewMode2)) { - if (!tmbBox._translationOriginal || Math.abs(tmbBox._translationOriginal[0]) > 500) { // swipe gesture can call this calculation before tmbBox is finalized, giving nonsense width - const [dashTranslationX, dashTranslationY, tmbTranslationX, tmbTranslationY, searchTranslationY] = this._getOverviewTranslations(dash, tmbBox, searchEntryBin); - tmbBox._translationOriginal = [tmbTranslationX, tmbTranslationY]; - dash._translationOriginal = [dashTranslationX, dashTranslationY]; - searchEntryBin._translationOriginal = searchTranslationY; - } - if (finalState === 0 || initialState === 0) { - const prg = Math.abs((finalState === 0 ? 0 : 1) - progress); - tmbBox.translation_x = Math.round(prg * tmbBox._translationOriginal[0]); - tmbBox.translation_y = Math.round(prg * tmbBox._translationOriginal[1]); - if (!skipDash) { - dash.translation_x = Math.round(prg * dash._translationOriginal[0]); - dash.translation_y = Math.round(prg * dash._translationOriginal[1]); - } - searchEntryBin.translation_y = Math.round(prg * searchEntryBin._translationOriginal); - } - if (progress === 1) { - tmbBox._translationOriginal = 0; - if (!skipDash) - dash._translationOriginal = 0; - - searchEntryBin._translationOriginal = 0; - } - } else if (!Main.layoutManager._startingUp && (tmbBox.translation_x || tmbBox.translation_y)) { - tmbBox.translation_x = 0; - tmbBox.translation_y = 0; - if (!skipDash) { - dash.translation_x = 0; - dash.translation_y = 0; - } - searchEntryBin.translation_y = 0; - } - - if (!Main.layoutManager._startingUp) { - if (initialState === ControlsState.HIDDEN && finalState === ControlsState.APP_GRID) - this._appDisplay.opacity = Math.round(progress * 255); - else - this._appDisplay.opacity = 255 - opacity; - } - - if (currentState === ControlsState.APP_GRID) { - // in app grid hide workspaces so they're not blocking app grid or ws thumbnails - this._workspacesDisplay.scale_x = 0; - } else { - this._workspacesDisplay.scale_x = 1; - } - this._workspacesDisplay.setPrimaryWorkspaceVisible(workspacesDisplayVisible); - - if (!this.dash._isAbove && progress > 0 && opt.OVERVIEW_MODE2) { - // set searchEntry above appDisplay - this.set_child_above_sibling(this._searchEntryBin, null); - // move dash above wsTmb for case that dash and wsTmb animate from the same side - if (!Me.Util.dashNotDefault()) - this.set_child_above_sibling(dash, null); - this.set_child_below_sibling(this._thumbnailsBox, null); - this.set_child_below_sibling(this._workspacesDisplay, null); - this.set_child_below_sibling(this._appDisplay, null); - } else if (!this.dash._isAbove && progress === 1 && finalState > ControlsState.HIDDEN) { - // set dash above workspace in the overview - this.set_child_above_sibling(this._thumbnailsBox, null); - this.set_child_above_sibling(this._searchEntryBin, null); - if (!Me.Util.dashNotDefault()) - this.set_child_above_sibling(this.dash, null); - - this.dash._isAbove = true; - } else if (this.dash._isAbove && progress < 1) { - // keep dash below for ws transition between the overview and hidden state - this.set_child_above_sibling(this._workspacesDisplay, null); - this.dash._isAbove = false; - } - }, - - // fix for upstream bug - appGrid.visible after transition from APP_GRID to HIDDEN - _updateAppDisplayVisibility(stateTransitionParams = null) { - if (!stateTransitionParams) - stateTransitionParams = this._stateAdjustment.getStateTransitionParams(); - - const { currentState } = stateTransitionParams; - if (this.dash.showAppsButton.checked) - this._searchTransition = false; - - // if !APP_GRID_ANIMATION, appGrid needs to be hidden in WINDOW_PICKER mode (1) - // but needs to be visible for transition from HIDDEN (0) to APP_GRID (2) - this._appDisplay.visible = - currentState > ControlsState.HIDDEN && - !this._searchController.searchActive && - !(currentState === ControlsState.WINDOW_PICKER && !opt.APP_GRID_ANIMATION) && - !this._searchTransition; - }, - - _onSearchChanged() { - const { finalState, currentState } = this._stateAdjustment.getStateTransitionParams(); - - const { searchActive } = this._searchController; - const SIDE_CONTROLS_ANIMATION_TIME = 250; // OverviewControls.SIDE_CONTROLS_ANIMATION_TIME = Overview.ANIMATION_TIME = 250 - - const entry = this._searchEntry; - if (opt.SHOW_SEARCH_ENTRY) { - entry.visible = true; - entry.opacity = 255; - } else if (!(searchActive && entry.visible)) { - entry.visible = true; - entry.opacity = searchActive ? 0 : 255; - // show search entry only if the user starts typing, and hide it when leaving the search mode - entry.ease({ - opacity: searchActive ? 255 : 0, - duration: SIDE_CONTROLS_ANIMATION_TIME / 2, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => { - entry.visible = searchActive; - }, - }); - } - - // if user start typing or activated search provider during overview animation, this switcher will be called again after animation ends - if (opt.SEARCH_VIEW_ANIMATION && Main.overview._animationInProgress && finalState !== ControlsState.HIDDEN) - return; - - if (!searchActive) { - this._workspacesDisplay.reactive = true; - this._workspacesDisplay.setPrimaryWorkspaceVisible(true); - } else { - if (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE) - this._searchController._searchResults._statusText.add_style_class_name('search-statustext-om2'); - else - this._searchController._searchResults._statusText.remove_style_class_name('search-statustext-om2'); - this._searchController.show(); - entry.visible = true; - entry.opacity = 255; - } - - if (opt.SHOW_BG_IN_OVERVIEW && this._bgManagers) - this._updateBackground(this._bgManagers[0]); - this._searchTransition = true; - - this._searchController._searchResults.translation_x = 0; - this._searchController._searchResults.translation_y = 0; - this._searchController.opacity = 255; - this._searchController.visible = true; - - if (opt.SEARCH_VIEW_ANIMATION && ![4, 8].includes(opt.WS_TMB_POSITION)) { - this._updateAppDisplayVisibility(); - this.layoutManager._searchController._searchResults._statusBin.opacity = 1; - - this._searchController.opacity = searchActive ? 255 : 0; - let translationX = 0; - let translationY = 0; - const geometry = global.display.get_monitor_geometry(global.display.get_primary_monitor()); - - switch (opt.SEARCH_VIEW_ANIMATION) { - case 1: - // make it longer to cover the delay before results appears - translationX = geometry.width; - translationY = 0; - break; - case 2: - translationX = -geometry.width; - translationY = 0; - break; - case 3: - translationX = 0; - translationY = geometry.height; - break; - case 5: - translationX = 0; - translationY = -geometry.height; - break; - } - - if (searchActive) { - this._searchController._searchResults.translation_x = translationX; - this._searchController._searchResults.translation_y = translationY; - } else { - this._searchController._searchResults.translation_x = 0; - this._searchController._searchResults.translation_y = 0; - } - - this._searchController._searchResults.ease({ - translation_x: searchActive ? 0 : translationX, - translation_y: searchActive ? 0 : translationY, - duration: SIDE_CONTROLS_ANIMATION_TIME, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => { - this._searchController.visible = searchActive; - this._searchTransition = false; - this.layoutManager._searchController._searchResults._statusBin.opacity = 255; - }, - }); - - this._workspacesDisplay.opacity = 255; - } else { - this._appDisplay.ease({ - opacity: searchActive || currentState < 2 ? 0 : 255, - duration: SIDE_CONTROLS_ANIMATION_TIME / 2, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => { - this._updateAppDisplayVisibility(); - }, - }); - - this._workspacesDisplay.setPrimaryWorkspaceVisible(true); - - this._searchController.opacity = searchActive ? 0 : 255; - this._searchController.ease({ - opacity: searchActive ? 255 : 0, - duration: searchActive ? SIDE_CONTROLS_ANIMATION_TIME : 0, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => (this._searchController.visible = searchActive), - }); - } - - // reuse already tuned overview transition, just replace APP_GRID with the search view - if (!(opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE) && !Main.overview._animationInProgress && finalState !== ControlsState.HIDDEN && !this.dash.showAppsButton.checked) { - Main.overview._overview._controls.layoutManager._searchController._searchResults._content.remove_style_class_name('search-section-content-bg-om2'); - Main.overview._overview._controls.layoutManager._searchController._searchResults._content.add_style_class_name('search-section-content-bg'); - Main.overview.searchEntry.remove_style_class_name('search-entry-om2'); - const duration = opt.SEARCH_VIEW_ANIMATION ? 150 : 0; - this._stateAdjustment.ease(searchActive ? ControlsState.APP_GRID : ControlsState.WINDOW_PICKER, { - // shorter animation time when entering search view can avoid stuttering in transition - // collecting search results take some time and the problematic part is the realization of the object on the screen - // if the ws animation ends before this event, the whole transition is smoother - // removing the ws transition (duration: 0) seems like the best solution here - duration: searchActive ? duration : SIDE_CONTROLS_ANIMATION_TIME, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => { - this._workspacesDisplay.setPrimaryWorkspaceVisible(!searchActive); - }, - }); - } else if (opt.OVERVIEW_MODE2 && !(opt.WORKSPACE_MODE || this.dash.showAppsButton.checked)) { - // add background to search results and make searchEntry border thicker for better visibility - Main.overview._overview._controls.layoutManager._searchController._searchResults._content.remove_style_class_name('search-section-content-bg'); - Main.overview._overview._controls.layoutManager._searchController._searchResults._content.add_style_class_name('search-section-content-bg-om2'); - Main.overview.searchEntry.add_style_class_name('search-entry-om2'); - } else { - Main.overview._overview._controls.layoutManager._searchController._searchResults._content.add_style_class_name('search-section-content-bg'); - Main.overview._overview._controls.layoutManager._searchController._searchResults._content.remove_style_class_name('search-section-content-bg-om2'); - Main.overview.searchEntry.remove_style_class_name('search-entry-om2'); - } - }, - - async runStartupAnimation(callback) { - this._ignoreShowAppsButtonToggle = true; - - this.prepareToEnterOverview(); - - this._stateAdjustment.value = ControlsState.HIDDEN; - this._stateAdjustment.ease(ControlsState.WINDOW_PICKER, { - duration: ANIMATION_TIME, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - }); - - this.dash.showAppsButton.checked = false; - this._ignoreShowAppsButtonToggle = false; - - // Set the opacity here to avoid a 1-frame flicker - this.opacity = 1; - this._appDisplay.opacity = 1; - - // We can't run the animation before the first allocation happens - await this.layout_manager.ensureAllocation(); - - this._setBackground(); - Main.panel.opacity = 255; - - const STARTUP_ANIMATION_TIME = 500; - // Opacity - this.ease({ - opacity: opt.STARTUP_STATE === 1 ? 0 : 255, - duration: STARTUP_ANIMATION_TIME, - mode: Clutter.AnimationMode.LINEAR, - onComplete: () => { - // part of the workaround for stuttering first app grid animation - this._appDisplay.visible = true; - }, - }); - - const dash = this.dash; - const tmbBox = this._thumbnailsBox; - - // Set the opacity here to avoid a 1-frame flicker - dash.opacity = 0; - for (const view of this._workspacesDisplay._workspacesViews) { - if (view._monitorIndex !== global.display.get_primary_monitor()) - view._thumbnails.opacity = 0; - } - - const searchEntryBin = this._searchEntryBin; - const [dashTranslationX, dashTranslationY, tmbTranslationX, tmbTranslationY, searchTranslationY] = - this._getOverviewTranslations(dash, tmbBox, searchEntryBin); - - const onComplete = function () { - // running init callback again causes issues (multiple connections) - if (!Main.overview._startupInitComplete) - callback(); - - const appDisplayModule = Me.Modules.appDisplayModule; - if (!appDisplayModule.moduleEnabled) - this._finishStartupSequence(); - else - this._realizeAppDisplayAndFinishSequence(); - - Main.overview._startupInitComplete = true; - }.bind(this); - - if (dash.visible && !Me.Util.dashNotDefault()) { - dash.translation_x = dashTranslationX; - dash.translation_y = dashTranslationY; - dash.opacity = 255; - dash.ease({ - translation_x: 0, - translation_y: 0, - delay: STARTUP_ANIMATION_TIME / 2, - duration: STARTUP_ANIMATION_TIME, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete, - }); - } else { - // set dash opacity to make it visible if user enable it later - dash.opacity = 255; - // if dash is hidden, substitute the ease timeout with GLib.timeout - _timeouts.startupAnim2 = GLib.timeout_add( - GLib.PRIORITY_DEFAULT, - // delay + animation time - STARTUP_ANIMATION_TIME * 2 * St.Settings.get().slow_down_factor, - () => { - onComplete(); - Main.overview._startupInitComplete = true; - _timeouts.startupAnim2 = 0; - return GLib.SOURCE_REMOVE; - } - ); - } - - if (searchEntryBin.visible) { - searchEntryBin.translation_y = searchTranslationY; - searchEntryBin.ease({ - translation_y: 0, - delay: STARTUP_ANIMATION_TIME / 2, - duration: STARTUP_ANIMATION_TIME, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - }); - } - - if (tmbBox.visible) { - tmbBox.translation_x = tmbTranslationX; - tmbBox.translation_y = tmbTranslationY; - tmbBox.ease({ - translation_x: 0, - translation_y: 0, - delay: STARTUP_ANIMATION_TIME / 2, - duration: STARTUP_ANIMATION_TIME, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - }); - } - - // upstream bug - following animation will be cancelled, don't know where - // needs further investigation - const workspacesViews = this._workspacesDisplay._workspacesViews; - if (workspacesViews.length > 1) { - for (const view of workspacesViews) { - if (view._monitorIndex !== global.display.get_primary_monitor() && view._thumbnails.visible) { - const secTmbBox = view._thumbnails; - - if (opt.SEC_WS_TMB_LEFT) - secTmbBox.translation_x = -(secTmbBox.width + 12); // compensate for padding - else if (opt.SEC_WS_TMB_RIGHT) - secTmbBox.translation_x = secTmbBox.width + 12; - else if (opt.SEC_WS_TMB_TOP) - secTmbBox.translation_y = -(secTmbBox.height + 12); - else if (opt.SEC_WS_TMB_BOTTOM) - secTmbBox.translation_y = secTmbBox.height + 12; - - secTmbBox.opacity = 255; - - secTmbBox.ease({ - translation_y: 0, - delay: STARTUP_ANIMATION_TIME / 2, - duration: STARTUP_ANIMATION_TIME, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - }); - } - } - } - }, - - _realizeAppDisplayAndFinishSequence() { - const appDisplayModule = Me.Modules.appDisplayModule; - // realize app grid for smoother first animation - appDisplayModule._updateAppGrid(false, this._finishStartupSequence.bind(this)); - }, - - _finishStartupSequence() { - if (!this._bgManagers) - this._setBackground(); - - /* if (Me.Util.dashIsDashToDock()) - return;*/ - - _timeouts.finishStartup = GLib.idle_add( - GLib.PRIORITY_LOW, () => { - this._appDisplay.opacity = 255; - if (opt.STARTUP_STATE === 1) { - Main.overview.hide(); - } else if (opt.STARTUP_STATE === 2) { - Main.overview.show(2); // just because of DtD, because we skipped startup animation - this.dash.showAppsButton.checked = true; - } else if (!opt.STARTUP_STATE && Me.Util.dashNotDefault()) { - Main.overview.show(); - } - - _timeouts.finishStartup = 0; - return GLib.SOURCE_REMOVE; - } - ); - }, - - setInitialTranslations() { - const dash = this.dash; - const tmbBox = this._thumbnailsBox; - const searchEntryBin = this._searchEntryBin; - const [dashTranslationX, dashTranslationY, tmbTranslationX, tmbTranslationY, searchTranslationY] = - this._getOverviewTranslations(dash, tmbBox, searchEntryBin); - if (!Me.Util.dashNotDefault()) { - dash.translation_x = dashTranslationX; - dash.translation_y = dashTranslationY; - } - tmbBox.translation_x = tmbTranslationX; - tmbBox.translation_y = tmbTranslationY; - searchEntryBin.translation_y = searchTranslationY; - }, - - _getOverviewTranslations(dash, tmbBox, searchEntryBin) { - // const tmbBox = Main.overview._overview._controls._thumbnailsBox; - const animationsDisabled = !St.Settings.get().enable_animations || (opt.SHOW_WS_PREVIEW_BG && !opt.OVERVIEW_MODE2); - if (animationsDisabled) - return [0, 0, 0, 0, 0]; - - let searchTranslationY = 0; - if (searchEntryBin.visible) { - const offset = (dash.visible && (!opt.DASH_VERTICAL ? dash.height + 12 : 0)) + - (opt.WS_TMB_TOP ? tmbBox.height + 12 : 0); - searchTranslationY = -searchEntryBin.height - offset - 30; - } - - let tmbTranslationX = 0; - let tmbTranslationY = 0; - let offset; - if (tmbBox.visible) { - const tmbWidth = tmbBox.width === Infinity ? 0 : tmbBox.width; - const tmbHeight = tmbBox.height === Infinity ? 0 : tmbBox.height; - switch (opt.WS_TMB_POSITION) { - case 3: // left - offset = 10 + (dash?.visible && opt.DASH_LEFT ? dash.width : 0); - tmbTranslationX = -tmbWidth - offset; - tmbTranslationY = 0; - break; - case 1: // right - offset = 10 + (dash?.visible && opt.DASH_RIGHT ? dash.width : 0); - tmbTranslationX = tmbWidth + offset; - tmbTranslationY = 0; - break; - case 0: // top - offset = 10 + (dash?.visible && opt.DASH_TOP ? dash.height : 0) + Main.panel.height; - tmbTranslationX = 0; - tmbTranslationY = -tmbHeight - offset; - break; - case 2: // bottom - offset = 10 + (dash?.visible && opt.DASH_BOTTOM ? dash.height : 0) + Main.panel.height; // just for case the panel is at bottom - tmbTranslationX = 0; - tmbTranslationY = tmbHeight + offset; - break; - } - } - - let dashTranslationX = 0; - let dashTranslationY = 0; - let position = opt.DASH_POSITION; - // if DtD replaced the original Dash, read its position - if (Me.Util.dashIsDashToDock()) - position = dash._position; - - if (dash?.visible) { - const dashWidth = dash.width === Infinity ? 0 : dash.width; - const dashHeight = dash.height === Infinity ? 0 : dash.height; - switch (position) { - case 0: // top - dashTranslationX = 0; - dashTranslationY = -dashHeight - dash.margin_bottom - Main.panel.height; - break; - case 1: // right - dashTranslationX = dashWidth; - dashTranslationY = 0; - break; - case 2: // bottom - dashTranslationX = 0; - dashTranslationY = dashHeight + dash.margin_bottom + Main.panel.height; - break; - case 3: // left - dashTranslationX = -dashWidth; - dashTranslationY = 0; - break; - } - } - - return [dashTranslationX, dashTranslationY, tmbTranslationX, tmbTranslationY, searchTranslationY]; - }, - - animateToOverview(state, callback) { - this._ignoreShowAppsButtonToggle = true; - this._searchTransition = false; - - this._stateAdjustment.value = ControlsState.HIDDEN; - - // building window thumbnails takes some time and with many windows on the workspace - // the time can be close to or longer than ANIMATION_TIME - // in which case the the animation is greatly delayed, stuttering, or even skipped - // for user it is more acceptable to watch delayed smooth animation, - // even if it takes little more time, than jumping frames - let delay = 0; - if (opt.DELAY_OVERVIEW_ANIMATION) - delay = global.display.get_tab_list(0, global.workspace_manager.get_active_workspace()).length * 3; - - this._stateAdjustment.ease(state, { - delay, - duration: 250, // Overview.ANIMATION_TIME, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onStopped: () => { - if (callback) - callback(); - }, - }); - - this.dash.showAppsButton.checked = - state === ControlsState.APP_GRID; - - this._ignoreShowAppsButtonToggle = false; - }, - - _setBackground(reset = false) { - if (this._bgManagers) { - this._bgManagers.forEach(bg => { - Main.overview._overview._controls._stateAdjustment.disconnect(bg._fadeSignal); - bg.destroy(); - }); - } - - // if (!SHOW_BG_IN_OVERVIEW && !SHOW_WS_PREVIEW_BG) the background is used for static transition from wallpaper to empty bg in the overview - if (reset || (!opt.SHOW_BG_IN_OVERVIEW && opt.SHOW_WS_PREVIEW_BG)) { - delete this._bgManagers; - return; - } - - this._bgManagers = []; - for (const monitor of Main.layoutManager.monitors) { - const bgManager = new Background.BackgroundManager({ - monitorIndex: monitor.index, - container: Main.layoutManager.overviewGroup, - vignette: true, - }); - - bgManager.backgroundActor.content.vignette_sharpness = 0; - bgManager.backgroundActor.content.brightness = 1; - - - bgManager._fadeSignal = Main.overview._overview._controls._stateAdjustment.connect('notify::value', v => { - this._updateBackground(bgManager, v.value, v); - }); - - if (monitor.index === global.display.get_primary_monitor()) { - bgManager._primary = true; - this._bgManagers.unshift(bgManager); // primary monitor first - } else { - bgManager._primary = false; - this._bgManagers.push(bgManager); - } - } - }, - - _updateBackground(bgManager, stateValue = 2, stateAdjustment = null) { - // Blur My Shell extension destroys all background actors in the overview and doesn't care about consequences - if (this._bgManagers[0] && !Main.layoutManager.overviewGroup.get_children().includes(this._bgManagers[0].backgroundActor)) { - Main.notifyError(`[${Me.metadata.name}]`, _('Overview background crashed!\nIf you are using Blur My Shell, disable overview blur in its settings and re-enable V-Shell Overview Background to avoid visual glitches.')); - // remove and disconnect our destroyed backgrounds to avoid more errors - this._setBackground(true); - return; - } - - const finalState = stateAdjustment?.getStateTransitionParams().finalState; - if (!opt.SHOW_BG_IN_OVERVIEW && !opt.SHOW_WS_PREVIEW_BG) { - // if no bg shown in the overview, fade out the wallpaper - if (!(opt.OVERVIEW_MODE2 && opt.WORKSPACE_MODE && finalState === 1)) - bgManager.backgroundActor.opacity = Util.lerp(255, 0, Math.min(stateValue, 1)); - } else { - let VIGNETTE, BRIGHTNESS, bgValue; - if (opt.OVERVIEW_MODE2 && stateValue <= 1 && !opt.WORKSPACE_MODE) { - VIGNETTE = 0; - BRIGHTNESS = 1; - bgValue = stateValue; - } else { - VIGNETTE = 0.2; - BRIGHTNESS = opt.OVERVIEW_BG_BRIGHTNESS; - if (opt.OVERVIEW_MODE2 && stateValue > 1 && !opt.WORKSPACE_MODE) - bgValue = stateValue - 1; - else - bgValue = stateValue; - } - - let blurEffect = bgManager.backgroundActor.get_effect('blur'); - if (!blurEffect) { - blurEffect = new Shell.BlurEffect({ - brightness: 1, - sigma: 0, - mode: Shell.BlurMode.ACTOR, - }); - bgManager.backgroundActor.add_effect_with_name('blur', blurEffect); - } - - const searchActive = Main.overview._overview.controls._searchController.searchActive; - if (searchActive) - BRIGHTNESS = opt.SEARCH_BG_BRIGHTNESS; - - bgManager.backgroundActor.content.vignette_sharpness = VIGNETTE; - bgManager.backgroundActor.content.brightness = BRIGHTNESS; - - let vignetteInit, brightnessInit;// , sigmaInit; - if (opt.SHOW_BG_IN_OVERVIEW && opt.SHOW_WS_PREVIEW_BG) { - vignetteInit = VIGNETTE; - brightnessInit = BRIGHTNESS; - // sigmaInit = opt.OVERVIEW_BG_BLUR_SIGMA; - } else { - vignetteInit = 0; - brightnessInit = 1; - // sigmaInit = 0; - } - - if (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE) { - bgManager.backgroundActor.content.vignette_sharpness = Util.lerp(vignetteInit, VIGNETTE, bgValue); - bgManager.backgroundActor.content.brightness = Util.lerp(brightnessInit, BRIGHTNESS, bgValue); - } else { - bgManager.backgroundActor.content.vignette_sharpness = Util.lerp(vignetteInit, VIGNETTE, Math.min(stateValue, 1)); - bgManager.backgroundActor.content.brightness = Util.lerp(brightnessInit, BRIGHTNESS, Math.min(stateValue, 1)); - } - - if (opt.OVERVIEW_BG_BLUR_SIGMA || opt.APP_GRID_BG_BLUR_SIGMA) { - // reduce number of steps of blur transition to improve performance - const step = opt.SMOOTH_BLUR_TRANSITIONS ? 0.05 : 0.2; - const progress = stateValue - (stateValue % step); - if (opt.SHOW_WS_PREVIEW_BG && stateValue < 1 && !searchActive) { // no need to animate transition, unless appGrid state is involved, static bg is covered by the ws preview bg - if (blurEffect.sigma !== opt.OVERVIEW_BG_BLUR_SIGMA) - blurEffect.sigma = opt.OVERVIEW_BG_BLUR_SIGMA; - } else if (stateValue < 1 && !searchActive && !(opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE)) { - const sigma = Math.round(Util.lerp(0, opt.OVERVIEW_BG_BLUR_SIGMA, progress)); - if (sigma !== blurEffect.sigma) - blurEffect.sigma = sigma; - } else if (stateValue < 1 && !searchActive && (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE && blurEffect.sigma)) { - const sigma = Math.round(Util.lerp(0, opt.OVERVIEW_BG_BLUR_SIGMA, progress)); - if (sigma !== blurEffect.sigma) - blurEffect.sigma = sigma; - } else if (stateValue > 1 && !searchActive && (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE && finalState === 1)) { - const sigma = Math.round(Util.lerp(0, opt.OVERVIEW_BG_BLUR_SIGMA, progress % 1)); - if (sigma !== blurEffect.sigma) - blurEffect.sigma = sigma; - } else if ((stateValue > 1 && bgManager._primary) || searchActive) { - const sigma = Math.round(Util.lerp(opt.OVERVIEW_BG_BLUR_SIGMA, opt.APP_GRID_BG_BLUR_SIGMA, progress % 1)); - if (sigma !== blurEffect.sigma) - blurEffect.sigma = sigma; - } else if (stateValue === 1 && !(opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE)) { - blurEffect.sigma = opt.OVERVIEW_BG_BLUR_SIGMA; - } else if (stateValue === 0 || (stateValue === 1 && (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE))) { - blurEffect.sigma = 0; - } - } - } - }, -}; - -const ControlsManagerLayoutVertical = { - _computeWorkspacesBoxForState(state, box, workAreaBox, dashWidth, dashHeight, thumbnailsWidth, thumbnailsHeight, searchHeight, startY) { - // in case the function is called from the DtD - if (startY === undefined) { - workAreaBox = box; - } - const workspaceBox = box.copy(); - let [width, height] = workspaceBox.get_size(); - const { spacing } = this; - - const dash = Main.overview.dash; - // including Dash to Dock and clones properties for compatibility - - if (Me.Util.dashIsDashToDock()) { - // Dash to Dock also always affects workAreaBox - Main.layoutManager._trackedActors.forEach(actor => { - if (actor.affectsStruts && actor.actor.width === dash.width) { - if (dash._isHorizontal) { - // disabled inteli-hide don't needs compensation - // startY needs to be corrected in allocate() - if (dash.get_parent()?.get_parent()?.get_parent()?._intellihideIsEnabled) - height += dash.height; - } else { - width += dash.width; - } - } - }); - } - - let wWidth; - let wHeight; - let wsBoxY; - - switch (state) { - case ControlsState.HIDDEN: - // if PANEL_OVERVIEW_ONLY, the affectStruts property is set to false to avoid stuttering - // therefore we added panel height to startY for the overview allocation, - // but here we need to remove the correction because the panel will be in the hidden state - if (opt.START_Y_OFFSET) { - let [x, y] = workAreaBox.get_origin(); - y -= opt.START_Y_OFFSET; - workspaceBox.set_origin(x, y); - } else { - workspaceBox.set_origin(...workAreaBox.get_origin()); - } - workspaceBox.set_size(...workAreaBox.get_size()); - break; - case ControlsState.WINDOW_PICKER: - case ControlsState.APP_GRID: - if (opt.WS_ANIMATION && opt.SHOW_WS_TMB && state === ControlsState.APP_GRID) { - workspaceBox.set_origin(...this._workspacesThumbnails.get_position()); - workspaceBox.set_size(thumbnailsWidth, thumbnailsHeight); - } else if (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE) { - if (opt.START_Y_OFFSET) { - let [x, y] = workAreaBox.get_origin(); - y -= opt.START_Y_OFFSET; - workspaceBox.set_origin(x, y); - } else { - workspaceBox.set_origin(...workAreaBox.get_origin()); - } - workspaceBox.set_size(...workAreaBox.get_size()); - } else { - // if PANEL_OVERVIEW_ONLY, panel doesn't affect workArea height (affectStruts === false), it is necessary to compensate - height = opt.PANEL_POSITION_TOP ? height : height - Main.panel.height; - searchHeight = opt.SHOW_SEARCH_ENTRY ? searchHeight : 0; - wWidth = width - - (opt.DASH_VERTICAL ? dashWidth : 0) - - thumbnailsWidth - - 4 * spacing; - wHeight = height - - (opt.DASH_VERTICAL ? 0 : dashHeight) - - searchHeight - - 4 * spacing; - - const ratio = width / height; - let wRatio = wWidth / wHeight; - let scale = ratio / wRatio; - - if (scale > 1) { - wHeight /= scale; - wWidth = wHeight * ratio; - } else { - wWidth *= scale; - wHeight = wWidth / ratio; - } - - // height decides the actual size, ratio is given by the workarea - wHeight *= opt.WS_PREVIEW_SCALE; - wWidth *= opt.WS_PREVIEW_SCALE; - - let xOffset = 0; - let yOffset = 0; - - const yOffsetT = (opt.DASH_TOP ? dashHeight : 0) + searchHeight; - const yOffsetB = opt.DASH_BOTTOM ? dashHeight : 0; - const yAvailableSpace = (height - yOffsetT - wHeight - yOffsetB) / 2; - yOffset = yOffsetT + yAvailableSpace; - - const centeredBoxX = (width - wWidth) / 2; - - const xOffsetL = (opt.DASH_LEFT ? dashWidth : 0) + (opt.WS_TMB_LEFT ? thumbnailsWidth : 0) + 2 * spacing; - const xOffsetR = (opt.DASH_RIGHT ? dashWidth : 0) + (opt.WS_TMB_RIGHT ? thumbnailsWidth : 0) + 2 * spacing; - - this._xAlignCenter = false; - if (centeredBoxX < Math.max(xOffsetL, xOffsetR)) { - xOffset = xOffsetL + spacing + (width - xOffsetL - wWidth - xOffsetR - 2 * spacing) / 2; - } else { - xOffset = centeredBoxX; - this._xAlignCenter = true; - } - - const wsBoxX = /* startX + */xOffset; - wsBoxY = startY + yOffset; - workspaceBox.set_origin(Math.round(wsBoxX), Math.round(wsBoxY)); - workspaceBox.set_size(Math.round(wWidth), Math.round(wHeight)); - } - } - - return workspaceBox; - }, - - _getAppDisplayBoxForState(state, box, workAreaBox, searchHeight, dashWidth, dashHeight, thumbnailsWidth, startY) { - // in case the function is called from the DtD - if (startY === undefined) { - workAreaBox = box; - } - const [width] = box.get_size(); - const { x1: startX } = workAreaBox; - // const { y1: startY } = workAreaBox; - let height = workAreaBox.get_height(); - const appDisplayBox = new Clutter.ActorBox(); - const { spacing } = this; - searchHeight = opt.SHOW_SEARCH_ENTRY ? searchHeight : 0; - - const xOffsetL = (opt.WS_TMB_LEFT ? thumbnailsWidth : 0) + (opt.DASH_LEFT ? dashWidth : 0); - const xOffsetR = (opt.WS_TMB_RIGHT ? thumbnailsWidth : 0) + (opt.DASH_RIGHT ? dashWidth : 0); - const yOffsetT = (opt.DASH_TOP ? dashHeight : 0) + (opt.SHOW_SEARCH_ENTRY ? searchHeight : 0); - const yOffsetB = opt.DASH_BOTTOM ? dashHeight : 0; - const adWidth = opt.CENTER_APP_GRID ? width - 2 * Math.max(xOffsetL, xOffsetR) - 2 * spacing : width - xOffsetL - xOffsetR - 2 * spacing; - const adHeight = height - yOffsetT - yOffsetB; - - const appDisplayX = opt.CENTER_APP_GRID ? (width - adWidth) / 2 : xOffsetL + 2 * spacing; - const appDisplayY = startY + yOffsetT; - - switch (state) { - case ControlsState.HIDDEN: - case ControlsState.WINDOW_PICKER: - // 1 - left, 2 - right, 3 - bottom, 5 - top - switch (opt.APP_GRID_ANIMATION) { - case 0: - appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(appDisplayY)); - break; - case 1: - appDisplayBox.set_origin(Math.round(startX + width), Math.round(appDisplayY)); - break; - case 2: - appDisplayBox.set_origin(Math.round(startX - adWidth), Math.round(appDisplayY)); - break; - case 3: - appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(workAreaBox.y2)); - break; - case 5: - appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(workAreaBox.y1 - adHeight)); - break; - } - break; - case ControlsState.APP_GRID: - appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(appDisplayY)); - break; - } - - appDisplayBox.set_size(Math.round(adWidth), Math.round(adHeight)); - return appDisplayBox; - }, - - vfunc_allocate(container, box) { - const childBox = new Clutter.ActorBox(); - const transitionParams = this._stateAdjustment.getStateTransitionParams(); - const { spacing } = this; - const halfSpacing = spacing / 2; - const monitor = Main.layoutManager.findMonitorForActor(this._container); - const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor.index); - const startX = workArea.x - monitor.x; - // if PANEL_OVERVIEW_ONLY, the affectStruts property is set to false to avoid stuttering - // therefore we need to add panel height to startY - let startY = workArea.y - monitor.y + opt.START_Y_OFFSET; - const workAreaBox = new Clutter.ActorBox(); - workAreaBox.set_origin(startX, startY); - workAreaBox.set_size(workArea.width, workArea.height); - box.y1 += startY; - box.x1 += startX; - let [width, height] = box.get_size(); - // if panel is at bottom position, - // compensate the height of the available box (the box size is calculated for top panel) - height = opt.PANEL_POSITION_TOP ? height : height - Main.panel.height; - let availableHeight = height; - - // Dash - const maxDashHeight = box.get_height() * DASH_MAX_SIZE_RATIO; - const maxDashWidth = maxDashHeight * 0.8; - let dashHeight = 0; - let dashWidth = 0; - - // dash cloud be overridden by the Dash to Dock clone - const dash = Main.overview.dash; - if (Me.Util.dashIsDashToDock()) { - // if Dash to Dock replaced the default dash and its inteli-hide is disabled we need to compensate for affected startY - if (!Main.overview.dash.get_parent()?.get_parent()?.get_parent()?._intellihideIsEnabled) { - if (Main.panel.y === monitor.y) - startY = Main.panel.height + spacing; - } - dashHeight = dash.height; - dashWidth = dash.width; - opt.DASH_VERTICAL = [1, 3].includes(dash._position); - this._dash.allocate(childBox); - } else if (this._dash.visible) { - // default dock - if (opt.DASH_VERTICAL) { - this._dash.setMaxSize(maxDashWidth, height); - [, dashWidth] = this._dash.get_preferred_width(height); - [, dashHeight] = this._dash.get_preferred_height(dashWidth); - dashWidth = Math.min(dashWidth, maxDashWidth); - dashHeight = Math.min(dashHeight, height); - } else if (!opt.WS_TMB_FULL) { - this._dash.setMaxSize(width, maxDashHeight); - [, dashHeight] = this._dash.get_preferred_height(width); - [, dashWidth] = this._dash.get_preferred_width(dashHeight); - dashHeight = Math.min(dashHeight, maxDashHeight); - dashWidth = Math.min(dashWidth, width); - } - } - - // Workspace Thumbnails - let wsTmbWidth = 0; - let wsTmbHeight = 0; - - let maxWsTmbScale = opt.MAX_THUMBNAIL_SCALE; - if (opt.SHOW_WS_TMB) { - const dashHeightReservation = !opt.WS_TMB_FULL && !opt.DASH_VERTICAL ? dashHeight : 0; - - const searchActive = this._searchController.searchActive; - if (!opt.MAX_THUMBNAIL_SCALE_STABLE && !searchActive) { - const initState = transitionParams.initialState === ControlsState.APP_GRID ? opt.MAX_THUMBNAIL_SCALE_APPGRID : opt.MAX_THUMBNAIL_SCALE; - const finalState = transitionParams.finalState === ControlsState.APP_GRID ? opt.MAX_THUMBNAIL_SCALE_APPGRID : opt.MAX_THUMBNAIL_SCALE; - maxWsTmbScale = Util.lerp(initState, finalState, transitionParams.progress); - } - - wsTmbWidth = width * maxWsTmbScale; - let totalTmbSpacing; - [totalTmbSpacing, wsTmbHeight] = this._workspacesThumbnails.get_preferred_height(wsTmbWidth); - wsTmbHeight += totalTmbSpacing; - - const wsTmbHeightMax = opt.WS_TMB_FULL - ? height - spacing - : height - dashHeightReservation - 2 * spacing; - - if (wsTmbHeight > wsTmbHeightMax) { - wsTmbHeight = wsTmbHeightMax; - wsTmbWidth = Math.round(this._workspacesThumbnails.get_preferred_width(wsTmbHeight)[1]); - } - - let wsTmbX; - if (opt.WS_TMB_RIGHT) - wsTmbX = Math.round(startX + width - (opt.DASH_RIGHT ? dashWidth : 0) - wsTmbWidth /* - halfSpacing*/); // this halfSpacing is a part od dash style - else - wsTmbX = Math.round(opt.DASH_LEFT ? dashWidth : 0/* + halfSpacing*/); // this halfSpacing is a part od dash style - - let wstOffset = (height - wsTmbHeight - (opt.DASH_VERTICAL ? 0 : dashHeightReservation)) / 2; - wstOffset -= opt.WS_TMB_POSITION_ADJUSTMENT * (wstOffset - halfSpacing); - let wsTmbY = Math.round(startY + (dashHeightReservation && opt.DASH_TOP ? dashHeight : 0) + wstOffset); - - childBox.set_origin(wsTmbX, wsTmbY); - childBox.set_size(Math.max(wsTmbWidth, 1), Math.max(wsTmbHeight, 1)); - - this._workspacesThumbnails.allocate(childBox); - } - - if (this._dash.visible) { - const wMaxWidth = width - spacing - wsTmbWidth - 2 * spacing - (opt.DASH_VERTICAL ? dashWidth + spacing : 0); - if (opt.WS_TMB_FULL && !opt.DASH_VERTICAL) { - this._dash.setMaxSize(wMaxWidth, maxDashHeight); - [, dashHeight] = this._dash.get_preferred_height(wMaxWidth); - [, dashWidth] = this._dash.get_preferred_width(dashHeight); - dashHeight = Math.min(dashHeight, maxDashHeight); - dashWidth = Math.min(dashWidth, wMaxWidth); - } - - let dashX, dashY, offset; - if (opt.DASH_RIGHT) - dashX = width - dashWidth; - else if (opt.DASH_LEFT) - dashX = 0; - - else if (opt.DASH_TOP) - dashY = startY; - else - dashY = startY + height - dashHeight; - - if (!opt.DASH_VERTICAL) { - offset = (width - ((opt.WS_TMB_FULL || opt.CENTER_DASH_WS) && !this._xAlignCenter ? wsTmbWidth : 0) - dashWidth) / 2; - offset -= opt.DASH_POSITION_ADJUSTMENT * (offset - halfSpacing); - dashX = offset; - - if ((opt.WS_TMB_FULL || opt.CENTER_DASH_WS) && !this._xAlignCenter) { - if (!opt.WS_TMB_RIGHT) { - dashX = (wsTmbWidth ? wsTmbWidth : 0) + offset; - dashX = Math.max(dashX, wsTmbWidth ? wsTmbWidth + spacing : 0); - dashX = Math.min(dashX, width - dashWidth - spacing); - } - } - if (opt.WS_TMB_FULL && !opt.CENTER_DASH_WS) { - dashX = opt.WS_TMB_RIGHT - ? Math.min(width - wsTmbWidth - dashWidth, dashX + wsTmbWidth / 2 * (1 - Math.abs(opt.DASH_POSITION_ADJUSTMENT))) - : Math.max(wsTmbWidth, dashX - wsTmbWidth / 2 * (1 - Math.abs(opt.DASH_POSITION_ADJUSTMENT))); - } - } else { - offset = (height - dashHeight) / 2; - dashY = startY + (offset - opt.DASH_POSITION_ADJUSTMENT * (offset - halfSpacing)); - } - - childBox.set_origin(Math.round(startX + dashX), Math.round(dashY)); - childBox.set_size(Math.round(dashWidth), Math.round(dashHeight)); - this._dash.allocate(childBox); - } - - availableHeight -= opt.DASH_VERTICAL ? 0 : dashHeight + spacing; - - let [searchHeight] = this._searchEntry.get_preferred_height(width - wsTmbWidth); - - // Workspaces - let params = [box, workAreaBox, dashWidth, dashHeight, wsTmbWidth, wsTmbHeight, searchHeight, startY]; - - // Update cached boxes - for (const state of Object.values(ControlsState)) { - this._cachedWorkspaceBoxes.set( - state, this._computeWorkspacesBoxForState(state, ...params)); - } - - let workspacesBox; - if (!transitionParams.transitioning) - workspacesBox = this._cachedWorkspaceBoxes.get(transitionParams.currentState); - - if (!workspacesBox) { - const initialBox = this._cachedWorkspaceBoxes.get(transitionParams.initialState); - const finalBox = this._cachedWorkspaceBoxes.get(transitionParams.finalState); - workspacesBox = initialBox.interpolate(finalBox, transitionParams.progress); - } - - this._workspacesDisplay.allocate(workspacesBox); - - // Search entry - const searchXoffset = (opt.DASH_LEFT ? dashWidth : 0) + spacing + (opt.WS_TMB_RIGHT ? 0 : wsTmbWidth + spacing); - - // Y position under top Dash - let searchEntryX, searchEntryY; - if (opt.DASH_TOP) - searchEntryY = startY + dashHeight; - else - searchEntryY = startY; - - searchEntryX = searchXoffset; - let searchWidth = width - 2 * spacing - wsTmbWidth - (opt.DASH_VERTICAL ? dashWidth : 0); // xAlignCenter is given by wsBox - searchWidth = this._xAlignCenter ? width - 2 * (wsTmbWidth + spacing) : searchWidth; - - if (opt.CENTER_SEARCH_VIEW) { - childBox.set_origin(0, Math.round(searchEntryY)); - childBox.set_size(Math.round(width), Math.round(searchHeight)); - } else { - childBox.set_origin(Math.round(this._xAlignCenter ? 0 : searchEntryX), Math.round(searchEntryY)); - childBox.set_size(Math.round(this._xAlignCenter ? width : searchWidth - spacing), Math.round(searchHeight)); - } - - this._searchEntry.allocate(childBox); - - availableHeight -= searchHeight + spacing; - - // if (this._appDisplay.visible)... ? Can cause problems - // Calculate appDisplay always for AppGrid state WsTmb scale - let wsTmbWidthAppGrid = opt.MAX_THUMBNAIL_SCALE_APPGRID > 0 - ? wsTmbWidth / maxWsTmbScale * opt.MAX_THUMBNAIL_SCALE_APPGRID - : wsTmbWidth / maxWsTmbScale * opt.MAX_THUMBNAIL_SCALE; - params = [box, workAreaBox, searchHeight, dashWidth, dashHeight, wsTmbWidthAppGrid, startY]; // send startY, can be corrected - let appDisplayBox; - if (!transitionParams.transitioning) { - appDisplayBox = - this._getAppDisplayBoxForState(transitionParams.currentState, ...params); - } else { - const initialBox = - this._getAppDisplayBoxForState(transitionParams.initialState, ...params); - const finalBox = - this._getAppDisplayBoxForState(transitionParams.finalState, ...params); - - appDisplayBox = initialBox.interpolate(finalBox, transitionParams.progress); - } - this._appDisplay.allocate(appDisplayBox); - - // Search - if (opt.CENTER_SEARCH_VIEW) { - const dashW = (opt.DASH_VERTICAL ? dashWidth : 0) + spacing; - searchWidth = width - 2 * wsTmbWidth - 2 * dashW; - childBox.set_origin(Math.round(wsTmbWidth + dashW), Math.round(startY + (opt.DASH_TOP ? dashHeight + spacing : spacing) + searchHeight)); - } else { - childBox.set_origin(Math.round(this._xAlignCenter ? wsTmbWidth + spacing : searchXoffset), Math.round(startY + (opt.DASH_TOP ? dashHeight + spacing : spacing) + searchHeight)); - } - - childBox.set_size(Math.round(searchWidth), Math.round(availableHeight)); - this._searchController.allocate(childBox); - - this._runPostAllocation(); - }, -}; - -const ControlsManagerLayoutHorizontal = { - _computeWorkspacesBoxForState(state, box, workAreaBox, dashWidth, dashHeight, thumbnailWidth, thumbnailsHeight, searchHeight, startY) { - // in case the function is called from the DtD - if (startY === undefined) { - workAreaBox = box; - } - const workspaceBox = box.copy(); - let [width, height] = workspaceBox.get_size(); - const { spacing } = this; - - const dash = Main.overview.dash; - // including Dash to Dock and clones properties for compatibility - if (Me.Util.dashIsDashToDock()) { - // Dash to Dock always affects workAreaBox - Main.layoutManager._trackedActors.forEach(actor => { - if (actor.affectsStruts && actor.actor.width === dash.width) { - if (dash._isHorizontal) { - // disabled inteli-hide don't need compensation - // startY needs to be corrected in allocate() - if (dash.get_parent()?.get_parent()?.get_parent()?._intellihideIsEnabled) - height += dash.height; - else if (opt.DASH_TOP) - height += dash.height; - } else { - width += dash.width; - } - } - }); - } - - let wWidth, wHeight, wsBoxY, wsBoxX; - - switch (state) { - case ControlsState.HIDDEN: - // if PANEL_OVERVIEW_ONLY, the affectStruts property is set to false to avoid stuttering - // therefore we added panel height to startY for the overview allocation, - // but here we need to remove the correction since the panel will be in the hidden state - if (opt.START_Y_OFFSET) { - let [x, y] = workAreaBox.get_origin(); - y -= opt.START_Y_OFFSET; - workspaceBox.set_origin(x, y); - } else { - workspaceBox.set_origin(...workAreaBox.get_origin()); - } - workspaceBox.set_size(...workAreaBox.get_size()); - break; - case ControlsState.WINDOW_PICKER: - case ControlsState.APP_GRID: - if (opt.WS_ANIMATION && opt.SHOW_WS_TMB && state === ControlsState.APP_GRID) { - workspaceBox.set_origin(...this._workspacesThumbnails.get_position()); - workspaceBox.set_size(thumbnailWidth, thumbnailsHeight); - } else if (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE) { - if (opt.START_Y_OFFSET) { - let [x, y] = workAreaBox.get_origin(); - y -= opt.START_Y_OFFSET; - workspaceBox.set_origin(x, y); - } else { - workspaceBox.set_origin(...workAreaBox.get_origin()); - } - workspaceBox.set_size(...workAreaBox.get_size()); - } else { - // if PANEL_OVERVIEW_ONLY, panel doesn't affect workArea height (affectStruts === false), it is necessary to compensate - height = opt.PANEL_POSITION_TOP ? height : height - Main.panel.height; - searchHeight = opt.SHOW_SEARCH_ENTRY ? searchHeight : 0; - wWidth = width - - spacing - - (opt.DASH_VERTICAL ? dashWidth : 0) - - 4 * spacing; - wHeight = height - - (opt.DASH_VERTICAL ? spacing : dashHeight) - - thumbnailsHeight - - searchHeight - - 4 * spacing; - - const ratio = width / height; - let wRatio = wWidth / wHeight; - let scale = ratio / wRatio; - - if (scale > 1) { - wHeight /= scale; - wWidth = wHeight * ratio; - } else { - wWidth *= scale; - wHeight = wWidth / ratio; - } - - // height decides the actual size, ratio is given by the workarea - wHeight *= opt.WS_PREVIEW_SCALE; - wWidth *= opt.WS_PREVIEW_SCALE; - - let xOffset = 0; - let yOffset = 0; - - const yOffsetT = (opt.DASH_TOP ? dashHeight : 0) + (opt.WS_TMB_TOP ? thumbnailsHeight : 0) + searchHeight; - const yOffsetB = (opt.DASH_BOTTOM ? dashHeight : 0) + (opt.WS_TMB_BOTTOM ? thumbnailsHeight : 0); - - const yAvailableSpace = (height - yOffsetT - wHeight - yOffsetB) / 2; - yOffset = yOffsetT + yAvailableSpace; - - const xOffsetL = (opt.DASH_LEFT ? dashWidth : 0) + spacing; - const xOffsetR = (opt.DASH_RIGHT ? dashWidth : 0) + spacing; - const centeredBoxX = (width - wWidth) / 2; - - this._xAlignCenter = false; - if (centeredBoxX < Math.max(xOffsetL, xOffsetR)) { - xOffset = xOffsetL + spacing + (width - xOffsetL - wWidth - xOffsetR) / 2; - } else { - xOffset = centeredBoxX; - this._xAlignCenter = true; - } - - wsBoxX = /* startX + */xOffset; - wsBoxY = startY + yOffset; - workspaceBox.set_origin(Math.round(wsBoxX), Math.round(wsBoxY)); - workspaceBox.set_size(Math.round(wWidth), Math.round(wHeight)); - } - } - - return workspaceBox; - }, - - _getAppDisplayBoxForState(state, box, workAreaBox, searchHeight, dashWidth, dashHeight, thumbnailsHeight, startY) { - // in case the function is called from the DtD - if (startY === undefined) { - workAreaBox = box; - } - const [width] = box.get_size(); - const { x1: startX } = workAreaBox; - // const { y1: startY } = workAreaBox; - let height = workAreaBox.get_height(); - const appDisplayBox = new Clutter.ActorBox(); - const { spacing } = this; - - const yOffsetT = (opt.WS_TMB_TOP ? thumbnailsHeight + spacing : 0) + (opt.DASH_TOP ? dashHeight : 0) + (opt.SHOW_SEARCH_ENTRY ? searchHeight : 0); - const yOffsetB = (opt.WS_TMB_BOTTOM ? thumbnailsHeight + spacing : 0) + (opt.DASH_BOTTOM ? dashHeight : 0); - const xOffsetL = opt.DASH_LEFT ? dashWidth : 0; - const xOffsetR = opt.DASH_RIGHT ? dashWidth : 0; - const hSpacing = xOffsetL + xOffsetR ? spacing : 0; - const adWidth = opt.CENTER_APP_GRID ? width - 2 * Math.max(xOffsetL, xOffsetR) - 2 * hSpacing : width - xOffsetL - xOffsetR - 2 * hSpacing; - const adHeight = height - yOffsetT - yOffsetB; - - const appDisplayX = opt.CENTER_APP_GRID ? (width - adWidth) / 2 : xOffsetL + hSpacing; - const appDisplayY = startY + yOffsetT; - - switch (state) { - case ControlsState.HIDDEN: - case ControlsState.WINDOW_PICKER: - // 1 - left, 2 - right, 3 - bottom, 5 - top - switch (opt.APP_GRID_ANIMATION) { - case 0: - appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(appDisplayY)); - break; - case 1: - appDisplayBox.set_origin(Math.round(startX + width), Math.round(appDisplayY)); - break; - case 2: - appDisplayBox.set_origin(Math.round(startX - adWidth), Math.round(appDisplayY)); - break; - case 3: - appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(workAreaBox.y2)); - break; - case 5: - appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(workAreaBox.y1 - adHeight)); - break; - } - break; - case ControlsState.APP_GRID: - appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(appDisplayY)); - break; - } - - appDisplayBox.set_size(Math.round(adWidth), Math.round(adHeight)); - return appDisplayBox; - }, - - vfunc_allocate(container, box) { - const transitionParams = this._stateAdjustment.getStateTransitionParams(); - const childBox = new Clutter.ActorBox(); - const { spacing } = this; - const halfSpacing = spacing / 2; - const monitor = Main.layoutManager.findMonitorForActor(this._container); - const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor.index); - const startX = workArea.x - monitor.x; - // if PANEL_OVERVIEW_ONLY, the affectStruts property is set to false to avoid stuttering - // therefore we need to add panel height to startY - let startY = workArea.y - monitor.y + opt.START_Y_OFFSET; - const workAreaBox = new Clutter.ActorBox(); - workAreaBox.set_origin(startX, startY); - workAreaBox.set_size(workArea.width, workArea.height); - box.y1 += startY; - box.x1 += startX; - let [width, height] = box.get_size(); - // if panel is at bottom position, - // compensate for the height of the available box (the box size is calculated for top panel) - height = opt.PANEL_POSITION_TOP ? height : height - Main.panel.height; - let availableHeight = height; - - // Dash - const maxDashHeight = box.get_height() * DASH_MAX_SIZE_RATIO; - const maxDashWidth = maxDashHeight * 0.8; - let dashHeight = 0; - let dashWidth = 0; - - // dash cloud be overridden by the Dash to Dock clone - const dash = Main.overview.dash; - if (Me.Util.dashIsDashToDock()) { - // if Dash to Dock replaced the default dash and its inteli-hide is disabled we need to compensate for affected startY - if (!Main.overview.dash.get_parent()?.get_parent()?.get_parent()?._intellihideIsEnabled) { - // if (Main.panel.y === monitor.y) - // startY = Main.panel.height + spacing; - } - dashHeight = dash.height; - dashWidth = dash.width; - opt.DASH_TOP = dash._position === 0; - opt.DASH_VERTICAL = [1, 3].includes(dash._position); - this._dash.allocate(childBox); - } else if (this._dash.visible) { - // default dock - if (!opt.DASH_VERTICAL) { - this._dash.setMaxSize(width, maxDashHeight); - [, dashHeight] = this._dash.get_preferred_height(width); - [, dashWidth] = this._dash.get_preferred_width(dashHeight); - dashHeight = Math.min(dashHeight, maxDashHeight); - dashWidth = Math.min(dashWidth, width - spacing); - } else if (!opt.WS_TMB_FULL) { - this._dash.setMaxSize(maxDashWidth, height); - [, dashWidth] = this._dash.get_preferred_width(height); - [, dashHeight] = this._dash.get_preferred_height(dashWidth); - dashHeight = Math.min(dashHeight, height - spacing); - dashWidth = Math.min(dashWidth, width); - } - } - - let [searchHeight] = this._searchEntry.get_preferred_height(width); - - // Workspace Thumbnails - let wsTmbWidth = 0; - let wsTmbHeight = 0; - - let maxWsTmbScale = opt.MAX_THUMBNAIL_SCALE; - if (opt.SHOW_WS_TMB) { - const dashWidthReservation = !opt.WS_TMB_FULL && opt.DASH_VERTICAL ? dashWidth : 0; - - const searchActive = this._searchController.searchActive; - if (!opt.MAX_THUMBNAIL_SCALE_STABLE && !searchActive) { - const initState = transitionParams.initialState === ControlsState.APP_GRID ? opt.MAX_THUMBNAIL_SCALE_APPGRID : opt.MAX_THUMBNAIL_SCALE; - const finalState = transitionParams.finalState === ControlsState.APP_GRID ? opt.MAX_THUMBNAIL_SCALE_APPGRID : opt.MAX_THUMBNAIL_SCALE; - maxWsTmbScale = Util.lerp(initState, finalState, transitionParams.progress); - } - - wsTmbHeight = Math.round(height * maxWsTmbScale); - let totalTmbSpacing; - [totalTmbSpacing, wsTmbWidth] = this._workspacesThumbnails.get_preferred_width(wsTmbHeight); - wsTmbWidth += totalTmbSpacing; - - const wsTmbWidthMax = opt.WS_TMB_FULL - ? width - spacing - : width - dashWidthReservation - 2 * spacing; - - if (wsTmbWidth > wsTmbWidthMax) { - wsTmbWidth = wsTmbWidthMax; - wsTmbHeight = Math.round(this._workspacesThumbnails.get_preferred_height(wsTmbWidth)[1]); - } - - let wsTmbY; - if (opt.WS_TMB_TOP) - wsTmbY = Math.round(startY + (opt.DASH_TOP ? dashHeight : halfSpacing)); - else - wsTmbY = Math.round(startY + height - (opt.DASH_BOTTOM ? dashHeight : halfSpacing) - wsTmbHeight); - - let wstOffset = (width - wsTmbWidth - dashWidthReservation) / 2; - wstOffset -= opt.WS_TMB_POSITION_ADJUSTMENT * wstOffset; - let wsTmbX = Math.round(startX + (opt.DASH_LEFT ? dashWidthReservation : 0) + wstOffset); - - childBox.set_origin(wsTmbX, wsTmbY); - childBox.set_size(Math.max(wsTmbWidth, 1), Math.max(wsTmbHeight, 1)); - - this._workspacesThumbnails.allocate(childBox); - - availableHeight -= wsTmbHeight + spacing; - } - - if (this._dash.visible) { - if (opt.WS_TMB_FULL && opt.DASH_VERTICAL) { - const wMaxHeight = height - spacing - wsTmbHeight; - this._dash.setMaxSize(maxDashWidth, wMaxHeight); - [, dashWidth] = this._dash.get_preferred_width(wMaxHeight); - [, dashHeight] = this._dash.get_preferred_height(dashWidth); - dashWidth = Math.min(dashWidth, maxDashWidth); - dashHeight = Math.min(dashHeight, wMaxHeight); - } - - let dashX, dashY, offset; - if (opt.DASH_RIGHT) - dashX = width - dashWidth; - else if (opt.DASH_LEFT) - dashX = 0; - else if (opt.DASH_TOP) - dashY = startY; - else - dashY = startY + height - dashHeight; - - if (opt.DASH_VERTICAL) { - if (opt.WS_TMB_FULL) { - offset = (height - dashHeight - wsTmbHeight) / 2; - if (opt.WS_TMB_TOP) { - offset -= opt.DASH_POSITION_ADJUSTMENT * (offset - halfSpacing); - dashY = startY + offset + wsTmbHeight; - } else { - offset -= opt.DASH_POSITION_ADJUSTMENT * (offset - halfSpacing); - dashY = startY + offset; - } - } else { - offset = (height - dashHeight) / 2; - offset -= opt.DASH_POSITION_ADJUSTMENT * (offset - halfSpacing); - dashY = startY + offset; - } - } else { - offset = (width - dashWidth) / 2; - dashX = startX + (offset - opt.DASH_POSITION_ADJUSTMENT * (offset - halfSpacing)); - } - - childBox.set_origin(Math.round(startX + dashX), Math.round(dashY)); - childBox.set_size(Math.round(dashWidth), Math.round(dashHeight)); - this._dash.allocate(childBox); - } - - availableHeight -= opt.DASH_VERTICAL ? 0 : dashHeight; - - // Workspaces - let params = [box, workAreaBox, dashWidth, dashHeight, wsTmbWidth, wsTmbHeight, searchHeight, startY]; - - // Update cached boxes - for (const state of Object.values(ControlsState)) { - this._cachedWorkspaceBoxes.set( - state, this._computeWorkspacesBoxForState(state, ...params)); - } - - let workspacesBox; - if (!transitionParams.transitioning) - workspacesBox = this._cachedWorkspaceBoxes.get(transitionParams.currentState); - - if (!workspacesBox) { - const initialBox = this._cachedWorkspaceBoxes.get(transitionParams.initialState); - const finalBox = this._cachedWorkspaceBoxes.get(transitionParams.finalState); - workspacesBox = initialBox.interpolate(finalBox, transitionParams.progress); - } - - this._workspacesDisplay.allocate(workspacesBox); - - // Search entry - const searchXoffset = (opt.DASH_LEFT ? dashWidth : 0) + spacing; - - // Y position under top Dash - let searchEntryX, searchEntryY; - if (opt.DASH_TOP) - searchEntryY = startY + (opt.WS_TMB_TOP ? wsTmbHeight : 0) + dashHeight; - else - searchEntryY = startY + (opt.WS_TMB_TOP ? wsTmbHeight + spacing : 0); - - - searchEntryX = searchXoffset; - let searchWidth = width - 2 * spacing - (opt.DASH_VERTICAL ? dashWidth : 0); // xAlignCenter is given by wsBox - searchWidth = this._xAlignCenter ? width : searchWidth; - - if (opt.CENTER_SEARCH_VIEW) { - childBox.set_origin(0, Math.round(searchEntryY)); - childBox.set_size(width, Math.round(searchHeight)); - } else { - childBox.set_origin(Math.round(this._xAlignCenter ? 0 : searchEntryX), Math.round(searchEntryY)); - childBox.set_size(Math.round(this._xAlignCenter ? width : searchWidth - spacing), Math.round(searchHeight)); - } - - this._searchEntry.allocate(childBox); - - availableHeight -= searchHeight + spacing; - - // if (this._appDisplay.visible)... ? Can cause problems - // Calculate appDisplay always for AppGrid state WsTmb scale - let wsTmbHeightAppGrid = opt.MAX_THUMBNAIL_SCALE_APPGRID > 0 - ? wsTmbHeight / maxWsTmbScale * opt.MAX_THUMBNAIL_SCALE_APPGRID - : wsTmbHeight / maxWsTmbScale * opt.MAX_THUMBNAIL_SCALE; - params = [box, workAreaBox, searchHeight, dashWidth, dashHeight, wsTmbHeightAppGrid, startY]; - let appDisplayBox; - if (!transitionParams.transitioning) { - appDisplayBox = - this._getAppDisplayBoxForState(transitionParams.currentState, ...params); - } else { - const initialBox = - this._getAppDisplayBoxForState(transitionParams.initialState, ...params); - const finalBox = - this._getAppDisplayBoxForState(transitionParams.finalState, ...params); - - appDisplayBox = initialBox.interpolate(finalBox, transitionParams.progress); - } - this._appDisplay.allocate(appDisplayBox); - - // Search - if (opt.CENTER_SEARCH_VIEW) { - const dashW = (opt.DASH_VERTICAL ? dashWidth : 0) + spacing; - searchWidth = width - 2 * dashW; - childBox.set_origin(Math.round(dashW), Math.round(startY + (opt.DASH_TOP ? dashHeight + spacing : spacing) + (opt.WS_TMB_TOP ? wsTmbHeight + spacing : 0) + searchHeight)); - } else { - childBox.set_origin(Math.round(this._xAlignCenter ? spacing : searchXoffset), Math.round(startY + (opt.DASH_TOP ? dashHeight + spacing : spacing) + (opt.WS_TMB_TOP ? wsTmbHeight + spacing : 0) + searchHeight)); - } - - childBox.set_size(Math.round(searchWidth), Math.round(availableHeight)); - this._searchController.allocate(childBox); - - this._runPostAllocation(); - }, -}; - -// same copy of this function should be available in OverviewControls and WorkspacesView -function _getFitModeForState(state) { - switch (state) { - case ControlsState.HIDDEN: - case ControlsState.WINDOW_PICKER: - return FitMode.SINGLE; - case ControlsState.APP_GRID: - if (opt.WS_ANIMATION && opt.SHOW_WS_TMB) - return FitMode.ALL; - else - return FitMode.SINGLE; - default: - return FitMode.SINGLE; - } -} - -const LayoutManager = { - _startupAnimation() { - if (Me.Util.dashIsDashToDock() && !Meta.is_restart()) { - // DtD breaks overview on startup - // Skip animation to hide the mess - this._startupAnimationComplete(); - Main.overview._overview.controls._finishStartupSequence(); - } else if (Meta.is_restart()) { - this._startupAnimationComplete(); - } else if (Main.sessionMode.isGreeter) { - this._startupAnimationGreeter(); - } else { - this._startupAnimationSession(); - } - }, -}; |