diff options
Diffstat (limited to 'extensions/45/vertical-workspaces/lib/overviewControls.js')
-rw-r--r-- | extensions/45/vertical-workspaces/lib/overviewControls.js | 137 |
1 files changed, 84 insertions, 53 deletions
diff --git a/extensions/45/vertical-workspaces/lib/overviewControls.js b/extensions/45/vertical-workspaces/lib/overviewControls.js index df5b371..41db47f 100644 --- a/extensions/45/vertical-workspaces/lib/overviewControls.js +++ b/extensions/45/vertical-workspaces/lib/overviewControls.js @@ -3,7 +3,7 @@ * overviewControls.js * * @author GdH <G-dH@github.com> - * @copyright 2022 - 2023 + * @copyright 2022 - 2024 * @license GPL-3.0 * */ @@ -118,7 +118,7 @@ export const OverviewControlsModule = class { } _replaceOnSearchChanged(reset) { - const searchController = Main.overview._overview.controls._searchController; + const searchController = Main.overview.searchController; if (reset) { if (_searchControllerSigId) { searchController.disconnect(_searchControllerSigId); @@ -128,8 +128,8 @@ export const OverviewControlsModule = class { 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.searchController._searchResults.translation_x = 0; + Main.overview.searchController._searchResults.translation_y = 0; Main.overview.searchEntry.visible = true; Main.overview.searchEntry.opacity = 255; } else { @@ -320,6 +320,9 @@ const ControlsManagerCommon = { }, _onSearchChanged() { + // something is somewhere setting the opacity to 0 if V-Shell is rebased while in overview / search + this._searchController.opacity = 255; + const { finalState, currentState } = this._stateAdjustment.getStateTransitionParams(); const { searchActive } = this._searchController; @@ -366,14 +369,12 @@ const ControlsManagerCommon = { 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._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()); @@ -407,6 +408,8 @@ const ControlsManagerCommon = { } this._searchController._searchResults.ease({ + delay: 150, // wait for results + opacity: searchActive ? 255 : 0, translation_x: searchActive ? 0 : translationX, translation_y: searchActive ? 0 : translationY, duration: SIDE_CONTROLS_ANIMATION_TIME, @@ -414,7 +417,7 @@ const ControlsManagerCommon = { onComplete: () => { this._searchController.visible = searchActive; this._searchTransition = false; - this.layoutManager._searchController._searchResults._statusBin.opacity = 255; + this._searchController._searchResults._statusBin.opacity = 255; }, }); @@ -431,10 +434,9 @@ const ControlsManagerCommon = { this._workspacesDisplay.setPrimaryWorkspaceVisible(true); - this._searchController.opacity = searchActive ? 0 : 255; - this._searchController.ease({ + this._searchController._searchResults.ease({ opacity: searchActive ? 255 : 0, - duration: searchActive ? SIDE_CONTROLS_ANIMATION_TIME : 0, + duration: searchActive ? SIDE_CONTROLS_ANIMATION_TIME / 2 : 0, mode: Clutter.AnimationMode.EASE_OUT_QUAD, onComplete: () => (this._searchController.visible = searchActive), }); @@ -442,10 +444,10 @@ const ControlsManagerCommon = { // 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._searchController._searchResults._content.remove_style_class_name('search-section-content-bg-om2'); + this._searchController._searchResults._content.add_style_class_name('search-section-content-bg'); + this._searchEntry.remove_style_class_name('search-entry-om2'); + const duration = opt.SEARCH_VIEW_ANIMATION ? 140 : 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 @@ -455,17 +457,20 @@ const ControlsManagerCommon = { mode: Clutter.AnimationMode.EASE_OUT_QUAD, onComplete: () => { this._workspacesDisplay.setPrimaryWorkspaceVisible(!searchActive); + // Set the delay before processing a new search entry to 150 on deactivation, so search providers can't make make the workspace animation stuttering + // set it back to 0 after in-animation, so the search can be snappy + opt.SEARCH_DELAY = searchActive || !opt.SEARCH_VIEW_ANIMATION ? 0 : 150; }, }); } 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'); + this._searchController._searchResults._content.remove_style_class_name('search-section-content-bg'); + this._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'); + this._searchController._searchResults._content.add_style_class_name('search-section-content-bg'); + this._searchController._searchResults._content.remove_style_class_name('search-section-content-bg-om2'); + this._searchEntry.remove_style_class_name('search-entry-om2'); } }, @@ -662,7 +667,7 @@ const ControlsManagerCommon = { _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); + const animationsDisabled = !St.Settings.get().enable_animations || ((opt.SHOW_WS_PREVIEW_BG && !opt.OVERVIEW_MODE2) && !Main.layoutManager._startingUp); if (animationsDisabled) return [0, 0, 0, 0, 0]; @@ -840,13 +845,16 @@ const ControlsManagerCommon = { 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; + // In GNOME 46 the "sigma" property has been renamed to "radius" + const radius = blurEffect.sigma !== undefined ? 'sigma' : 'radius'; + blurEffect[radius] = 0; + + const searchActive = this._searchController.searchActive; if (searchActive) BRIGHTNESS = opt.SEARCH_BG_BRIGHTNESS; @@ -877,48 +885,61 @@ const ControlsManagerCommon = { 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; + if (blurEffect[radius] !== opt.OVERVIEW_BG_BLUR_SIGMA) + blurEffect[radius] = 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)) { + if (sigma !== blurEffect[radius]) + blurEffect[radius] = sigma; + } else if (stateValue < 1 && !searchActive && (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE && blurEffect[radius])) { const sigma = Math.round(Util.lerp(0, opt.OVERVIEW_BG_BLUR_SIGMA, progress)); - if (sigma !== blurEffect.sigma) - blurEffect.sigma = sigma; + if (sigma !== blurEffect[radius]) + blurEffect[radius] = 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; + if (sigma !== blurEffect[radius]) + blurEffect[radius] = 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; + if (sigma !== blurEffect[radius]) + blurEffect[radius] = sigma; } else if (stateValue === 1 && !(opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE)) { - blurEffect.sigma = opt.OVERVIEW_BG_BLUR_SIGMA; + blurEffect[radius] = opt.OVERVIEW_BG_BLUR_SIGMA; } else if (stateValue === 0 || (stateValue === 1 && (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE))) { - blurEffect.sigma = 0; + blurEffect[radius] = 0; } } } }, + + _updatePositionFromDashToDock() { + // update variables that cannot be processed within settings + const dash = Main.overview.dash; + opt.DASH_POSITION = dash._position; + opt.DASH_TOP = opt.DASH_POSITION === 0; + opt.DASH_RIGHT = opt.DASH_POSITION === 1; + opt.DASH_BOTTOM = opt.DASH_POSITION === 2; + opt.DASH_LEFT = opt.DASH_POSITION === 3; + opt.DASH_VERTICAL = opt.DASH_LEFT || opt.DASH_RIGHT; + }, }; const ControlsManagerLayoutVertical = { _computeWorkspacesBoxForState(state, box, workAreaBox, dashWidth, dashHeight, thumbnailsWidth, thumbnailsHeight, searchHeight, startY) { // in case the function is called from the DtD - if (startY === undefined) { + if (startY === undefined) workAreaBox = box; - } + const workspaceBox = box.copy(); let [width, height] = workspaceBox.get_size(); - const { spacing } = this; + const spacing = 12; const dash = Main.overview.dash; // including Dash to Dock and clones properties for compatibility if (Me.Util.dashIsDashToDock()) { + // ensure or position variables are updated + ControlsManagerCommon._updatePositionFromDashToDock(); // Dash to Dock also always affects workAreaBox Main.layoutManager._trackedActors.forEach(actor => { if (actor.affectsStruts && actor.actor.width === dash.width) { @@ -1028,15 +1049,15 @@ const ControlsManagerLayoutVertical = { _getAppDisplayBoxForState(state, box, workAreaBox, searchHeight, dashWidth, dashHeight, thumbnailsWidth, startY) { // in case the function is called from the DtD - if (startY === undefined) { + 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 spacing = 12; searchHeight = opt.SHOW_SEARCH_ENTRY ? searchHeight : 0; const xOffsetL = (opt.WS_TMB_LEFT ? thumbnailsWidth : 0) + (opt.DASH_LEFT ? dashWidth : 0); @@ -1083,7 +1104,7 @@ const ControlsManagerLayoutVertical = { vfunc_allocate(container, box) { const childBox = new Clutter.ActorBox(); const transitionParams = this._stateAdjustment.getStateTransitionParams(); - const { spacing } = this; + const spacing = 12; const halfSpacing = spacing / 2; const monitor = Main.layoutManager.findMonitorForActor(this._container); const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor.index); @@ -1111,6 +1132,8 @@ const ControlsManagerLayoutVertical = { // dash cloud be overridden by the Dash to Dock clone const dash = Main.overview.dash; if (Me.Util.dashIsDashToDock()) { + // ensure our position variables are updated + ControlsManagerCommon._updatePositionFromDashToDock(); // 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) @@ -1320,16 +1343,18 @@ const ControlsManagerLayoutVertical = { const ControlsManagerLayoutHorizontal = { _computeWorkspacesBoxForState(state, box, workAreaBox, dashWidth, dashHeight, thumbnailWidth, thumbnailsHeight, searchHeight, startY) { // in case the function is called from the DtD - if (startY === undefined) { + if (startY === undefined) workAreaBox = box; - } + const workspaceBox = box.copy(); let [width, height] = workspaceBox.get_size(); - const { spacing } = this; + const spacing = 12; const dash = Main.overview.dash; // including Dash to Dock and clones properties for compatibility if (Me.Util.dashIsDashToDock()) { + // ensure our position variables are updated + ControlsManagerCommon._updatePositionFromDashToDock(); // Dash to Dock always affects workAreaBox Main.layoutManager._trackedActors.forEach(actor => { if (actor.affectsStruts && actor.actor.width === dash.width) { @@ -1448,7 +1473,7 @@ const ControlsManagerLayoutHorizontal = { // const { y1: startY } = workAreaBox; let height = workAreaBox.get_height(); const appDisplayBox = new Clutter.ActorBox(); - const { spacing } = this; + const spacing = 12; 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); @@ -1495,7 +1520,7 @@ const ControlsManagerLayoutHorizontal = { vfunc_allocate(container, box) { const transitionParams = this._stateAdjustment.getStateTransitionParams(); const childBox = new Clutter.ActorBox(); - const { spacing } = this; + const spacing = 12; const halfSpacing = spacing / 2; const monitor = Main.layoutManager.findMonitorForActor(this._container); const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor.index); @@ -1528,7 +1553,7 @@ const ControlsManagerLayoutHorizontal = { // if (Main.panel.y === monitor.y) // startY = Main.panel.height + spacing; } - dashHeight = dash.height; + dashHeight = dash.height + halfSpacing; dashWidth = dash.width; opt.DASH_TOP = dash._position === 0; opt.DASH_VERTICAL = [1, 3].includes(dash._position); @@ -1587,9 +1612,13 @@ const ControlsManagerLayoutHorizontal = { else wsTmbY = Math.round(startY + height - (opt.DASH_BOTTOM ? dashHeight : halfSpacing) - wsTmbHeight); - let wstOffset = (width - wsTmbWidth - dashWidthReservation) / 2; + let wstOffset = (width - wsTmbWidth) / 2; wstOffset -= opt.WS_TMB_POSITION_ADJUSTMENT * wstOffset; - let wsTmbX = Math.round(startX + (opt.DASH_LEFT ? dashWidthReservation : 0) + wstOffset); + let wsTmbX = Math.round(startX + wstOffset); + if (opt.DASH_LEFT) + wsTmbX = Math.max(wsTmbX, startX + dashWidthReservation); + else if (opt.DASH_RIGHT) + wsTmbX = Math.min(wsTmbX, startX + width - wsTmbWidth - dashWidthReservation); childBox.set_origin(wsTmbX, wsTmbY); childBox.set_size(Math.max(wsTmbWidth, 1), Math.max(wsTmbHeight, 1)); @@ -1748,8 +1777,10 @@ function _getFitModeForState(state) { const LayoutManager = { _startupAnimation() { - if (Me.Util.dashIsDashToDock() && !Meta.is_restart()) { - // DtD breaks overview on startup + const dtdEnabled = !!((Me.Util.getEnabledExtensions('dash-to-dock').length && !Me.Util.getEnabledExtensions('dash-to-dock-vshell').length) || + Me.Util.getEnabledExtensions('ubuntu-dock').length); + if (dtdEnabled && !Meta.is_restart()) { + // DtD without V-Shell patch breaks overview on startup // Skip animation to hide the mess this._startupAnimationComplete(); Main.overview._overview.controls._finishStartupSequence(); |