If you realize you don’t like JavaScript as much as everybody around you seems to, but still want to write platform-independent KWin scripts or effects, you can try out its most promising alternative - CoffeeScript
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 :)