Bismuth-Forge / bismuth

KDE Plasma add-on, that tiles your windows automatically and lets you manage them via keyboard, similarly to i3, Sway or dwm.
https://bismuth-forge.github.io/bismuth/
Other
2.41k stars 93 forks source link

[Bug]: "Floating windows always on top" option doesn't work for some windows #165

Open ikajdan opened 2 years ago

ikajdan commented 2 years ago

Summary

Plasma shell configuration windows aren't kept on top despite the setting turned on.

Steps to Reproduce

  1. Make sure that the option "Floating windows always on top" is checked.
  2. Open some window in tiling mode.
  3. Right-click on the system tray (also works with the system clock widget).
  4. From the menu choose "Configure System Tray...".
  5. Click on the tiled window and notice how the configuration page gets overlapped.

Expected behavior

Floating windows always stay on top.

Screenshots

No response

Bismuth version

v2.0.0

KDE Plasma version

5.22.5

The platform KWin is running on

X11

Additional context

No response

gikari commented 2 years ago

This probably happens, because the class of the popup of the window is plasmashell, which is placed in the ignored bin to not break the Plasma widgets and panels.

Perhaps, if the unique combo of window properties is found for these types of windows, they could be popped out of the "ignore bin".

ikajdan commented 2 years ago

Here is the part of the xprop output:

_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_NORMAL
_NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_SHADE, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_CLOSE

So I have tried to add (resourceClass === "plasmashell" && !this.client.resizeable) || in here, and it started to tile those windows correctly, however it now tries to tile panel's toolbox in the edit mode:

_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DOCK
_NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_CHANGE_DESKTOP

I don't know why, since it doesn't contain the _NET_WM_ACTION_RESIZE property.

The question is how can I select windows based on the _NET_WM_WINDOW_TYPE. Also, how can I list all the properties of the Client?

--- Edit: just found this. It would be nice to have it linked in the CONTRIBUTING.MD, also how to enable logging.