[XembedSNIProxy] Hide container window when something shows it

Authored by kmaterka on Jan 8 2020, 4:06 PM.


[XembedSNIProxy] Hide container window when something shows it

For each tray icon XEmbedSNIProxy is creating container window 32x32 in size. It is black with opaque set to 0 (fully transparent when compositor is enabled). All of these container windows are stacked below all windows, so normally you can't see them. On creation all container windows are created in top-left corner. When user clicks on the tray icon, container window is moved to the click location (to handle events correctly).
On KWin restart all windows are shuffled, usually KWin is able to restore ordering correctly, but for some reason not it this case. As a result black/transparent container windows are stacked above all other windows and panels.
To solve that, when container window is visible, XembedSNIProxy needs hide it again by stacking the container window below again.

BUG: 357443
FIXED-IN: 5.18.0

Test Plan:

  1. Run any application with XEmbed system tray icon, do not click on the icon
  2. Restart KWin
  3. [Optional] Disable compositor - with disable container window is black and easier to spot
  4. Expected:

a) before fix: black/transparent rectangle in the top-left corner, reacts to mouse click
b) after fix: no rectangle, mouse clicks work as expected.

Reviewers: Plasma: Workspaces, Plasma, davidedmundson

Reviewed By: Plasma: Workspaces, Plasma, davidedmundson

Subscribers: plasma-devel

Tags: Plasma

Differential Revision: https://phabricator.kde.org/D26395