diff --git a/0001-Revert-js-Ease-non-animatable-actor-properties.patch b/0001-Revert-js-Ease-non-animatable-actor-properties.patch new file mode 100644 index 0000000..8000e02 --- /dev/null +++ b/0001-Revert-js-Ease-non-animatable-actor-properties.patch @@ -0,0 +1,557 @@ +From 00e2a5c5a540273ac03e6b43bf37817c903c28f4 Mon Sep 17 00:00:00 2001 +From: Adam Williamson +Date: Fri, 23 Aug 2019 12:48:47 -0700 +Subject: [PATCH] Revert "js: Ease non-animatable actor properties" + +This reverts commit fffe7bdf9cde5817736cb5f7fbe777b5c08d122a. +It causes breakage in the overview: +https://bugzilla.redhat.com/show_bug.cgi?id=1740897 +--- + js/ui/keyboard.js | 27 ++++++----- + js/ui/lightbox.js | 68 +++++++++++++-------------- + js/ui/messageList.js | 19 ++++---- + js/ui/osdWindow.js | 9 ++-- + js/ui/overview.js | 29 +++++------- + js/ui/overviewControls.js | 15 +++--- + js/ui/windowManager.js | 37 ++++++++++----- + js/ui/workspaceThumbnail.js | 94 ++++++++++++++++++++----------------- + 8 files changed, 160 insertions(+), 138 deletions(-) + +diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js +index 462d860c4..1d26e6143 100644 +--- a/js/ui/keyboard.js ++++ b/js/ui/keyboard.js +@@ -11,6 +11,7 @@ const Layout = imports.ui.layout; + const Main = imports.ui.main; + const PageIndicators = imports.ui.pageIndicators; + const PopupMenu = imports.ui.popupMenu; ++const Tweener = imports.ui.tweener; + + var KEYBOARD_REST_TIME = Layout.KEYBOARD_ANIMATION_TIME * 2; + var KEY_LONG_PRESS_TIME = 250; +@@ -711,13 +712,15 @@ var EmojiPager = GObject.registerClass({ + let relDelta = Math.abs(this._delta - value) / this._width; + let time = PANEL_SWITCH_ANIMATION_TIME * Math.abs(relDelta); + +- this.remove_all_transitions(); +- this.ease_property('delta', value, { +- duration: time, +- onComplete: () => { +- this.setCurrentPage(this.getFollowingPage()); +- } +- }); ++ Tweener.removeTweens(this); ++ Tweener.addTween(this, ++ { delta: value, ++ time: time / 1000, ++ transition: 'easeInOutQuad', ++ onComplete() { ++ this.setCurrentPage(this.getFollowingPage()); ++ } ++ }); + } + } + +@@ -725,10 +728,12 @@ var EmojiPager = GObject.registerClass({ + let relDelta = Math.abs(this._delta) / this.width; + let time = PANEL_SWITCH_ANIMATION_TIME * Math.abs(relDelta); + +- this.remove_all_transitions(); +- this.ease_property('delta', 0, { +- duration: time, +- }); ++ Tweener.removeTweens(this); ++ Tweener.addTween(this, ++ { delta: 0, ++ time: time / 1000, ++ transition: 'easeInOutQuad', ++ }); + } + + _initPagingInfo() { +diff --git a/js/ui/lightbox.js b/js/ui/lightbox.js +index fbbc01168..0f2578154 100644 +--- a/js/ui/lightbox.js ++++ b/js/ui/lightbox.js +@@ -5,6 +5,7 @@ const { Clutter, GObject, Shell, St } = imports.gi; + const Signals = imports.signals; + + const Params = imports.misc.params; ++const Tweener = imports.ui.tweener; + + var DEFAULT_FADE_FACTOR = 0.4; + var VIGNETTE_BRIGHTNESS = 0.2; +@@ -174,31 +175,29 @@ var Lightbox = class Lightbox { + show(fadeInTime) { + fadeInTime = fadeInTime || 0; + +- this.actor.remove_all_transitions(); +- +- let onComplete = () => { +- this.shown = true; +- this.emit('shown'); +- }; +- + if (this._radialEffect) { +- this.actor.ease_property( +- '@effects.radial.brightness', VIGNETTE_BRIGHTNESS, { +- duration: fadeInTime, +- mode: Clutter.AnimationMode.EASE_OUT_QUAD +- }); +- this.actor.ease_property( +- '@effects.radial.sharpness', VIGNETTE_SHARPNESS, { +- duration: fadeInTime, +- mode: Clutter.AnimationMode.EASE_OUT_QUAD, +- onComplete +- }); ++ let effect = this.actor.get_effect('radial'); ++ Tweener.removeTweens(effect); ++ Tweener.addTween(effect, ++ { brightness: VIGNETTE_BRIGHTNESS, ++ sharpness: VIGNETTE_SHARPNESS, ++ time: fadeInTime / 1000, ++ transition: 'easeOutQuad', ++ onComplete: () => { ++ this.shown = true; ++ this.emit('shown'); ++ } ++ }); + } else { ++ this.actor.remove_all_transitions(); + this.actor.ease({ + opacity: 255 * this._fadeFactor, + duration: fadeInTime, + mode: Clutter.AnimationMode.EASE_OUT_QUAD, +- onComplete ++ onComplete: () => { ++ this.shown = true; ++ this.emit('shown'); ++ } + }); + } + +@@ -209,28 +208,29 @@ var Lightbox = class Lightbox { + fadeOutTime = fadeOutTime || 0; + + this.shown = false; +- this.actor.remove_all_transitions(); +- +- let onComplete = () => this.actor.hide(); + + if (this._radialEffect) { +- this.actor.ease_property( +- '@effects.radial.brightness', 1.0, { +- duration: fadeOutTime, +- mode: Clutter.AnimationMode.EASE_OUT_QUAD +- }); +- this.actor.ease_property( +- '@effects.radial.sharpness', 0.0, { +- duration: fadeOutTime, +- mode: Clutter.AnimationMode.EASE_OUT_QUAD, +- onComplete +- }); ++ let effect = this.actor.get_effect('radial'); ++ Tweener.removeTweens(effect); ++ Tweener.addTween(effect, ++ { brightness: 1.0, ++ sharpness: 0.0, ++ opacity: 0, ++ time: fadeOutTime / 1000, ++ transition: 'easeOutQuad', ++ onComplete: () => { ++ this.actor.hide(); ++ } ++ }); + } else { ++ this.actor.remove_all_transitions(); + this.actor.ease({ + opacity: 0, + duration: fadeOutTime, + mode: Clutter.AnimationMode.EASE_OUT_QUAD, +- onComplete ++ onComplete: () => { ++ this.actor.hide(); ++ } + }); + } + } +diff --git a/js/ui/messageList.js b/js/ui/messageList.js +index 4dcdb6d7f..8fbd79a84 100644 +--- a/js/ui/messageList.js ++++ b/js/ui/messageList.js +@@ -4,6 +4,7 @@ const MessageTray = imports.ui.messageTray; + const Signals = imports.signals; + + const Calendar = imports.ui.calendar; ++const Tweener = imports.ui.tweener; + const Util = imports.misc.util; + + var MESSAGE_ANIMATION_TIME = 100; +@@ -439,11 +440,10 @@ var Message = class Message { + } + + if (animate) { +- this._bodyStack.ease_property('@layout.expansion', 1, { +- progress_mode: Clutter.AnimationMode.EASE_OUT_QUAD, +- duration: MessageTray.ANIMATION_TIME, +- }); +- ++ Tweener.addTween(this._bodyStack.layout_manager, ++ { expansion: 1, ++ time: MessageTray.ANIMATION_TIME / 1000, ++ transition: 'easeOutQuad' }); + this._actionBin.scale_y = 0; + this._actionBin.ease({ + scale_y: 1, +@@ -460,11 +460,10 @@ var Message = class Message { + + unexpand(animate) { + if (animate) { +- this._bodyStack.ease_property('@layout.expansion', 0, { +- progress_mode: Clutter.AnimationMode.EASE_OUT_QUAD, +- duration: MessageTray.ANIMATION_TIME, +- }); +- ++ Tweener.addTween(this._bodyStack.layout_manager, ++ { expansion: 0, ++ time: MessageTray.ANIMATION_TIME / 1000, ++ transition: 'easeOutQuad' }); + this._actionBin.ease({ + scale_y: 0, + duration: MessageTray.ANIMATION_TIME, +diff --git a/js/ui/osdWindow.js b/js/ui/osdWindow.js +index 0f85dce38..cdcd36a18 100644 +--- a/js/ui/osdWindow.js ++++ b/js/ui/osdWindow.js +@@ -7,6 +7,7 @@ const Mainloop = imports.mainloop; + const BarLevel = imports.ui.barLevel; + const Layout = imports.ui.layout; + const Main = imports.ui.main; ++const Tweener = imports.ui.tweener; + + var HIDE_TIMEOUT = 1500; + var FADE_TIME = 100; +@@ -112,10 +113,10 @@ var OsdWindow = class { + this._level.visible = (value != undefined); + if (value != undefined) { + if (this.actor.visible) +- this._level.ease_property('value', value, { +- mode: Clutter.AnimationMode.EASE_OUT_QUAD, +- duration: LEVEL_ANIMATION_TIME +- }); ++ Tweener.addTween(this._level, ++ { value: value, ++ time: LEVEL_ANIMATION_TIME / 1000, ++ transition: 'easeOutQuad' }); + else + this._level.value = value; + } +diff --git a/js/ui/overview.js b/js/ui/overview.js +index 1325eff6b..57dcca278 100644 +--- a/js/ui/overview.js ++++ b/js/ui/overview.js +@@ -13,6 +13,7 @@ const Main = imports.ui.main; + const MessageTray = imports.ui.messageTray; + const OverviewControls = imports.ui.overviewControls; + const Params = imports.misc.params; ++const Tweener = imports.ui.tweener; + const WorkspaceThumbnail = imports.ui.workspaceThumbnail; + + // Time for initial animation going into Overview mode +@@ -173,28 +174,24 @@ var Overview = class { + _unshadeBackgrounds() { + let backgrounds = this._backgroundGroup.get_children(); + for (let i = 0; i < backgrounds.length; i++) { +- backgrounds[i].ease_property('brightness', 1.0, { +- duration: SHADE_ANIMATION_TIME, +- mode: Clutter.AnimationMode.EASE_OUT_QUAD +- }); +- backgrounds[i].ease_property('vignette-sharpness', 0.0, { +- duration: SHADE_ANIMATION_TIME, +- mode: Clutter.AnimationMode.EASE_OUT_QUAD +- }); ++ Tweener.addTween(backgrounds[i], ++ { brightness: 1.0, ++ vignette_sharpness: 0.0, ++ time: SHADE_ANIMATION_TIME / 1000, ++ transition: 'easeOutQuad' ++ }); + } + } + + _shadeBackgrounds() { + let backgrounds = this._backgroundGroup.get_children(); + for (let i = 0; i < backgrounds.length; i++) { +- backgrounds[i].ease_property('brightness', Lightbox.VIGNETTE_BRIGHTNESS, { +- duration: SHADE_ANIMATION_TIME, +- mode: Clutter.AnimationMode.EASE_OUT_QUAD +- }); +- backgrounds[i].ease_property('vignette-sharpness', Lightbox.VIGNETTE_SHARPNESS, { +- duration: SHADE_ANIMATION_TIME, +- mode: Clutter.AnimationMode.EASE_OUT_QUAD +- }); ++ Tweener.addTween(backgrounds[i], ++ { brightness: Lightbox.VIGNETTE_BRIGHTNESS, ++ vignette_sharpness: Lightbox.VIGNETTE_SHARPNESS, ++ time: SHADE_ANIMATION_TIME / 1000, ++ transition: 'easeOutQuad' ++ }); + } + } + +diff --git a/js/ui/overviewControls.js b/js/ui/overviewControls.js +index cf24a5e56..761c69f44 100644 +--- a/js/ui/overviewControls.js ++++ b/js/ui/overviewControls.js +@@ -6,6 +6,7 @@ const { Clutter, GObject, Meta, St } = imports.gi; + const Dash = imports.ui.dash; + const Main = imports.ui.main; + const Params = imports.misc.params; ++const Tweener = imports.ui.tweener; + const ViewSelector = imports.ui.viewSelector; + const WorkspaceThumbnail = imports.ui.workspaceThumbnail; + +@@ -146,10 +147,9 @@ var SlidingControl = class { + } + + _updateSlide() { +- this.actor.ease_property('@layout.slide-x', this._getSlide(), { +- mode: Clutter.AnimationMode.EASE_OUT_QUAD, +- duration: SIDE_CONTROLS_ANIMATION_TIME, +- }); ++ Tweener.addTween(this.layout, { slide_x: this._getSlide(), ++ time: SIDE_CONTROLS_ANIMATION_TIME / 1000, ++ transition: 'easeOutQuad' }); + } + + getVisibleWidth() { +@@ -185,10 +185,9 @@ var SlidingControl = class { + return; + + this.layout.translation_x = translationStart; +- this.actor.ease_property('@layout.translation-x', translationEnd, { +- mode: Clutter.AnimationMode.EASE_OUT_QUAD, +- duration: SIDE_CONTROLS_ANIMATION_TIME, +- }); ++ Tweener.addTween(this.layout, { translation_x: translationEnd, ++ time: SIDE_CONTROLS_ANIMATION_TIME / 1000, ++ transition: 'easeOutQuad' }); + } + + _onOverviewHiding() { +diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js +index 346485ffd..b8200c996 100644 +--- a/js/ui/windowManager.js ++++ b/js/ui/windowManager.js +@@ -12,6 +12,7 @@ const WorkspaceSwitcherPopup = imports.ui.workspaceSwitcherPopup; + const InhibitShortcutsDialog = imports.ui.inhibitShortcutsDialog; + const Main = imports.ui.main; + const ModalDialog = imports.ui.modalDialog; ++const Tweener = imports.ui.tweener; + const WindowMenu = imports.ui.windowMenu; + const PadOsd = imports.ui.padOsd; + const EdgeDragAction = imports.ui.edgeDragAction; +@@ -117,18 +118,17 @@ class DisplayChangeDialog extends ModalDialog.ModalDialog { + var WindowDimmer = class { + constructor(actor) { + this._brightnessEffect = new Clutter.BrightnessContrastEffect({ +- name: 'dim', + enabled: false + }); + actor.add_effect(this._brightnessEffect); + this.actor = actor; + this._enabled = true; ++ this._dimFactor = 0.0; + } + + _syncEnabled() { +- let animating = this.actor.get_transition('@effects.dim.brightness') != null; + let dimmed = this._brightnessEffect.brightness.red != 127; +- this._brightnessEffect.enabled = this._enabled && (animating || dimmed); ++ this._brightnessEffect.enabled = (this._enabled && dimmed); + } + + setEnabled(enabled) { +@@ -137,16 +137,27 @@ var WindowDimmer = class { + } + + setDimmed(dimmed, animate) { +- let val = 127 * (1 + (dimmed ? 1 : 0) * DIM_BRIGHTNESS); +- let color = Clutter.Color.new(val, val, val, 255); +- +- this.actor.ease_property('@effects.dim.brightness', color, { +- mode: Clutter.AnimationMode.LINEAR, +- duration: (dimmed ? DIM_TIME : UNDIM_TIME) * (animate ? 1 : 0), +- onComplete: () => this._syncEnabled() +- }); +- +- this._syncEnabled(); ++ let factor = dimmed ? 1.0 : 0.0; ++ ++ if (animate) { ++ Tweener.addTween(this, { ++ _dimFactor: factor, ++ time: (dimmed ? DIM_TIME : UNDIM_TIME) / 1000, ++ transition: 'linear', ++ onUpdate: () => { ++ let val = 127 * (1 + this._dimFactor * DIM_BRIGHTNESS); ++ let color = Clutter.Color.new(val, val, val, 255); ++ this._brightnessEffect.brightness = color; ++ this._syncEnabled(); ++ } ++ }); ++ } else { ++ this._dimFactor = factor; ++ let val = 127 * (1 + this._dimFactor * DIM_BRIGHTNESS); ++ let color = Clutter.Color.new(val, val, val, 255); ++ this._brightnessEffect.brightness = color; ++ this._syncEnabled(); ++ } + } + }; + +diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js +index c516934c9..989f088d7 100644 +--- a/js/ui/workspaceThumbnail.js ++++ b/js/ui/workspaceThumbnail.js +@@ -8,6 +8,7 @@ const Signals = imports.signals; + const Background = imports.ui.background; + const DND = imports.ui.dnd; + const Main = imports.ui.main; ++const Tweener = imports.ui.tweener; + const Workspace = imports.ui.workspace; + const WorkspacesView = imports.ui.workspacesView; + +@@ -1071,6 +1072,15 @@ var ThumbnailsBox = GObject.registerClass({ + } + } + ++ _tweenScale() { ++ Tweener.addTween(this, ++ { scale: this._targetScale, ++ time: RESCALE_ANIMATION_TIME / 1000, ++ transition: 'easeOutQuad', ++ onComplete: this._queueUpdateStates, ++ onCompleteScope: this }); ++ } ++ + _updateStates() { + this._stateUpdateQueued = false; + +@@ -1082,14 +1092,15 @@ var ThumbnailsBox = GObject.registerClass({ + this._iterateStateThumbnails(ThumbnailState.REMOVING, thumbnail => { + this._setThumbnailState(thumbnail, ThumbnailState.ANIMATING_OUT); + +- thumbnail.ease_property('slide-position', 1, { +- duration: SLIDE_ANIMATION_TIME, +- mode: Clutter.AnimationMode.LINEAR, +- onComplete: () => { +- this._setThumbnailState(thumbnail, ThumbnailState.ANIMATED_OUT); +- this._queueUpdateStates(); +- } +- }); ++ Tweener.addTween(thumbnail, ++ { slide_position: 1, ++ time: SLIDE_ANIMATION_TIME / 1000, ++ transition: 'linear', ++ onComplete: () => { ++ this._setThumbnailState(thumbnail, ThumbnailState.ANIMATED_OUT); ++ this._queueUpdateStates(); ++ } ++ }); + }); + + // As long as things are sliding out, don't proceed +@@ -1099,28 +1110,25 @@ var ThumbnailsBox = GObject.registerClass({ + // Once that's complete, we can start scaling to the new size and collapse any removed thumbnails + this._iterateStateThumbnails(ThumbnailState.ANIMATED_OUT, thumbnail => { + this._setThumbnailState(thumbnail, ThumbnailState.COLLAPSING); +- thumbnail.ease_property('collapse-fraction', 1, { +- duration: RESCALE_ANIMATION_TIME, +- mode: Clutter.AnimationMode.EASE_OUT_QUAD, +- onComplete: () => { +- this._stateCounts[thumbnail.state]--; +- thumbnail.state = ThumbnailState.DESTROYED; +- +- let index = this._thumbnails.indexOf(thumbnail); +- this._thumbnails.splice(index, 1); +- thumbnail.destroy(); +- +- this._queueUpdateStates(); +- } +- }); ++ Tweener.addTween(thumbnail, ++ { collapse_fraction: 1, ++ time: RESCALE_ANIMATION_TIME / 1000, ++ transition: 'easeOutQuad', ++ onComplete: () => { ++ this._stateCounts[thumbnail.state]--; ++ thumbnail.state = ThumbnailState.DESTROYED; ++ ++ let index = this._thumbnails.indexOf(thumbnail); ++ this._thumbnails.splice(index, 1); ++ thumbnail.destroy(); ++ ++ this._queueUpdateStates(); ++ } ++ }); + }); + + if (this._pendingScaleUpdate) { +- this.ease_property('scale', this._targetScale, { +- mode: Clutter.AnimationMode.EASE_OUT_QUAD, +- duration: RESCALE_ANIMATION_TIME, +- onComplete: () => this._queueUpdateStates() +- }); ++ this._tweenScale(); + this._pendingScaleUpdate = false; + } + +@@ -1131,13 +1139,14 @@ var ThumbnailsBox = GObject.registerClass({ + // And then slide in any new thumbnails + this._iterateStateThumbnails(ThumbnailState.NEW, thumbnail => { + this._setThumbnailState(thumbnail, ThumbnailState.ANIMATING_IN); +- thumbnail.ease_property('slide-position', 0, { +- duration: SLIDE_ANIMATION_TIME, +- mode: Clutter.AnimationMode.EASE_OUT_QUAD, +- onComplete: () => { +- this._setThumbnailState(thumbnail, ThumbnailState.NORMAL); +- } +- }); ++ Tweener.addTween(thumbnail, ++ { slide_position: 0, ++ time: SLIDE_ANIMATION_TIME / 1000, ++ transition: 'easeOutQuad', ++ onComplete: () => { ++ this._setThumbnailState(thumbnail, ThumbnailState.NORMAL); ++ } ++ }); + }); + } + +@@ -1354,13 +1363,14 @@ var ThumbnailsBox = GObject.registerClass({ + let indicatorThemeNode = this._indicator.get_theme_node(); + let indicatorTopFullBorder = indicatorThemeNode.get_padding(St.Side.TOP) + indicatorThemeNode.get_border_width(St.Side.TOP); + this.indicator_y = this._indicator.allocation.y1 + indicatorTopFullBorder; +- this.ease_property('indicator-y', thumbnail.allocation.y1, { +- progress_mode: Clutter.AnimationMode.EASE_OUT_QUAD, +- duration: WorkspacesView.WORKSPACE_SWITCH_TIME, +- onComplete: () => { +- this._animatingIndicator = false; +- this._queueUpdateStates(); +- } +- }); ++ Tweener.addTween(this, ++ { indicator_y: thumbnail.allocation.y1, ++ time: WorkspacesView.WORKSPACE_SWITCH_TIME / 1000, ++ transition: 'easeOutQuad', ++ onComplete: () => { ++ this._animatingIndicator = false; ++ this._queueUpdateStates(); ++ } ++ }); + } + }); +-- +2.23.0 + diff --git a/gnome-shell.spec b/gnome-shell.spec index 85551a4..21a5cc4 100644 --- a/gnome-shell.spec +++ b/gnome-shell.spec @@ -1,6 +1,6 @@ Name: gnome-shell Version: 3.33.90 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Window management and application launching for GNOME License: GPLv2+ @@ -16,6 +16,9 @@ Patch1: gnome-shell-favourite-apps-firefox.patch # This should go upstream once systemd has a generic interface for this Patch2: 0001-endSessionDialog-Immediately-add-buttons-to-the-dial.patch Patch3: 0002-endSessionDialog-Support-rebooting-into-the-bootload.patch +# Revert fffe7bdf9c to avoid +# https://bugzilla.redhat.com/show_bug.cgi?id=1740897 +Patch4: 0001-Revert-js-Ease-non-animatable-actor-properties.patch %define libcroco_version 0.6.8 %define eds_version 3.33.1 @@ -203,6 +206,10 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.de %{_mandir}/man1/%{name}.1.gz %changelog +* Fri Aug 23 2019 Adam Williamson - 3.33.90-2 +- Revert commit that causes #1740897 (overview type-to-search bug) + Resolves: #1740897 + * Sat Aug 10 2019 Florian Müllner - 3.33.90-1 - Update to 3.33.90