The code below creates a KWin effect that fades and zooms in the windows when a user switches the activities.
Edit: Fixed a small bug. Now it works quite well!
# Martin G. likes defining variables in a namespace, # so we are not going to make him angry - # we are creating a namespace that has only one # variable in it - the duration activitySwitchEffect = duration: animationTime(250) # We don't really need anything else in the namespace # for this simple example since we are about to abuse # lambdas (aka anonymous functions) all over the place. # We are connecting our function to the # currentActivityChanged signal, and processing # all the main windows we can find effects.currentActivityChanged.connect (activity) -> effects.stackingOrder.map (client) -> if (activity in client.activities && client.visible) # If the client should be shown in # the current activity, we are starting # the animations - one to fade the window in # and another to scale it. animate( window: client animations: [ type: Effect.Opacity duration: activitySwitchEffect.duration from: 0 to: 1 ] ) animate( window: client animations: [ type: Effect.Scale duration: activitySwitchEffect.duration curve: QEasingCurve.OutCubic from: 0 ] ) # And that's it!
Mind that this is only for demonstration - it has a few bugs in it :)