macos: stop windows glitching when cascading

Noticed that windows glitch when cascading: they show up in center of
screen, then quickly move to the correct position at last-cascade point.

This fixes the issue, by moving the `showWindow` call to _after_ the
setting of the last cascade point.

Now if you look at the code and think: "shouldn't this work without the
async-dispatch, like this?"

```swift
if (!window.styleMask.contains(.fullScreen)) {
    Self.lastCascadePoint = window.cascadeTopLeft(from: Self.lastCascadePoint)
}
c.showWindow(self)
```

Then, yes, I had the same thought, but it doesn't. And as discussed on
Discord, we probably don't know what's going on behind the scenes.

So this is the simplified code of the version we have to live with:
async dispatching the cascade and non-cascade versions both.
This commit is contained in:
Thorsten Ball
2024-01-10 18:28:19 +01:00
parent e279a72ee1
commit 3e811dad2c

View File

@ -78,14 +78,13 @@ class TerminalManager {
window.toggleFullScreen(nil)
}
c.showWindow(self)
// Only cascade if we aren't fullscreen. This has to be dispatched async
// because it takes one event loop tick for showWindow to work.
if (!window.styleMask.contains(.fullScreen)) {
DispatchQueue.main.async {
// We're dispatching this async because otherwise the last-cascade-point won't work.
DispatchQueue.main.async {
// Only cascade if we aren't fullscreen.
if (!window.styleMask.contains(.fullScreen)) {
Self.lastCascadePoint = window.cascadeTopLeft(from: Self.lastCascadePoint)
}
c.showWindow(self)
}
}