Implement picture-in-picture mode
Making use of xx-pip-v1 Wayland protocol.
This allows to "pop out" the stopwatch page or a timer, similar to how it's possible with a video in a web browser. Clicking "return to app" returns back to the page that was popped out.
PipHandler singleton manages the PIP contents. It contains a StackView that anyone can push components into to display as PIP window, which also ensures the PIP content stays alive after leaving the page.
Co-Authored-By: Vlad Zahorodnii vlad.zahorodnii@kde.org
Co-Authored-By: David Edmundson kde@davidedmundson.co.uk
Thanks to @vladz on whose pip test app in kwin this is based on and @davidedmundson for doing the window resize/move stuff
A video probably does it more justice
You need to enable xx-pip-v1 in KWin by running it with KWIN_WAYLAND_SUPPORT_XX_PIP_V1=1. When the compositor doesn’t support it, the button to “pop out” is hidden.
There’s a few open issues and todos but for the most part it’s working great:
- Look into X11 maybe ;)
- There seems to be no way to set a minimum size
- I also seem to be unable to properly change the window size (i.e. restore the default size I had) once the window has been resized by the user once
-
requestActivateof the main window from the PIP window (“return to app”) doesn’t work, just blinks in taskbar. Do I need to request an xdg activation token manually? - Resize cursors on the edges a bit annoying to use
- Resizing the window is laggy/jumpy, kwin issue?
- The
HoverHandlerin the pip window (that makes the controls show) sometimes gets stuck inhoveredstate when leaving the window with the mouse cursor quickly

