Starting from 1.12.9, root filters are used more prominently, and they need some rework.
There can be a case where a quick succession of actions may leave the state of root filter data invalid. See this case:
- A command creates its root filters and data. For example
workspace switch
- While the command's animation (
workspace switch) happens, we call jump.
jump stores the filters for the previous command (workspace switch) with the idea of restoring them after it is finished (jump finishes)
- The
jump command transaction stops the animation for workspace switch, and workspace switch clears its data.
jump ends and restores the workspace switch filters and data, but they are no longer valid (or needed).
This causes a crash.
Reproduce:
- Set the animation for
workspace_switch long enough to be able to call jump while it happens.
- Create some windows on a workspace
- Switch to the next workspace on the same output
- Switch back to the previous workspace on the same output, and while the animation runs, call
jump tiling
- Cancel jump when you see the labels
- scroll crashes trying to access the old data for
workspace switch which was incorrectly restored by jump when it finished.
Starting from 1.12.9, root filters are used more prominently, and they need some rework.
There can be a case where a quick succession of actions may leave the state of root filter data invalid. See this case:
workspace switchworkspace switch) happens, we calljump.jumpstores the filters for the previous command (workspace switch) with the idea of restoring them after it is finished (jumpfinishes)jumpcommand transaction stops the animation forworkspace switch, andworkspace switchclears its data.jumpends and restores theworkspace switchfilters and data, but they are no longer valid (or needed).This causes a crash.
Reproduce:
workspace_switchlong enough to be able to calljumpwhile it happens.jump tilingworkspace switchwhich was incorrectly restored byjumpwhen it finished.