86c3597 raised server->menu_tree above layer shell surfaces, but it caused
preview outlines for window switcher to be placed above the OSD because
the preview outlines are placed just above server->menu_tree.
So this commit fixes it by placing server->osd_tree above server->menu.
This also prevents layer-shell surfaces from covering the OSD.
Before (higher-first):
- preview outlines (just above menu)
- menu
- layer-shell (top/overlay/popup)
- osd
After (higher-first):
- osd
- preview outlines (just above menu)
- menu
- layer-shell (top/overlay/popup)
* Set the z-positions to achieve the following order (from top to
* bottom):
* - session lock layer
+ * - window switcher osd
* - compositor menu
* - layer-shell popups
* - overlay layer
wlr_scene_node_raise_to_top(&output->layer_tree[3]->node);
wlr_scene_node_raise_to_top(&output->layer_popup_tree->node);
wlr_scene_node_raise_to_top(&server->menu_tree->node);
+ wlr_scene_node_raise_to_top(&output->osd_tree->node);
wlr_scene_node_raise_to_top(&output->session_lock_tree->node);
if (rc.auto_enable_outputs) {
* | Type | Scene Tree | Per Output | Example
* | ----------------- | ---------------- | ---------- | -------
* | ext-session | lock-screen | Yes | swaylock
+ * | osd | osd_tree | Yes |
* | compositor-menu | menu_tree | No | root-menu
* | layer-shell | layer-popups | Yes |
* | layer-shell | overlay-layer | Yes |