If the window is part of a stack, remove it then map it outside of the
stack, before calling `Shell::move_window.` Somewhat similar to the code
in `Shell::move_request`.
It would be more elegant if `move_window` handled this in some way, but
I can't think of a way to change the API there that would be better than
this.
(Perhaps some of the naming of methods could also be updated, given
"window" in functions like this means a `CosmicMapped`.)
Protocol support for moving workspaces would also be useful, but should
involve a new protocol object representing the stack.
Fixes https://github.com/pop-os/cosmic-workspaces-epoch/issues/41.
Iterating over `.windows()` for each workspace does not iterate over
`minimized_windows`, so `from_workspace` was not found. Simply changing
this to use `element_for_surface` and `space_for` (like `fullscreen` and
`unfullscreen`) fixes this.
Addresses https://github.com/pop-os/cosmic-workspaces-epoch/issues/89.
Though it does unminimize the window, which we may also want to change.
This meant that, for windows that were not fully opaque, there was no
way to capture their transparency. No way to put a window with
transparency on top of a background in OBS, for example.
It seems we allocate a new `GlesRenderbuffer` every time we screencopy
to an shm buffer.
We probably should use a more complicated approach to do proper damage
tracking without any unnecessary copies, and re-using the GPU buffer,
but as long as this allocates a buffer the age of that buffer should be
treated as `0`.
Fixes corruption in cosmic-workspaces when shm screencopy is used. (For
instance, when Cosmic is run with software rendering.)
Previously, alt-tab wouldn't actually focus a window if it was on
another output, since the active output/workspace was unchanged.
We need to move the cursor if we activate a window on another output.
Avoids a little duplication (matching two variants, instead of three
backends).
The behavior, including errors and panics, should be unchanged for now.
Performance should also not be impacted.
This should help for adding llvmpipe rendering without a device node on
the kms backend, or for adding a variant for pixman.
This is increasingly not just related to screencopy, so it's weird to
add there. I don't see any other module that fits, so add one called
"quirks" (like the Linux kernel uses for device-specific handling in
generic drives).
This allows `cosmic-workspaces` to rely on cosmic-comp for rendering the
background, and just have transparency. This should be a more reliable
and performant way of doing things, at least for now.
Instead of adding another opaque bool argument, this defines an
`ElementFilter` enum, which makes calls more readable.
Window surfaces are still included in screencopy, as needed for the
workspace previews.