Fix (linux) overlay problem in kde (#1121)

* Fix overlay problem in kde

* Add env variable check for GTK layer shell initialization
This commit is contained in:
vpsone 2026-04-11 06:55:24 +05:30 committed by GitHub
parent fdc8cb712d
commit f26fe0dce1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -17,6 +17,7 @@ use tauri_nspanel::{tauri_panel, CollectionBehavior, PanelBuilder, PanelLevel};
#[cfg(target_os = "linux")]
use gtk_layer_shell::{Edge, KeyboardMode, Layer, LayerShell};
#[cfg(target_os = "linux")]
use std::env;
@ -69,18 +70,9 @@ fn update_gtk_layer_shell_anchors(overlay_window: &tauri::webview::WebviewWindow
/// Returns true if layer shell was successfully initialized, false otherwise
#[cfg(target_os = "linux")]
fn init_gtk_layer_shell(overlay_window: &tauri::webview::WebviewWindow) -> bool {
// On KDE Wayland, layer-shell init has shown protocol instability.
// Fall back to regular always-on-top overlay behavior (as in v0.7.1).
let is_wayland = env::var("WAYLAND_DISPLAY").is_ok()
|| env::var("XDG_SESSION_TYPE")
.map(|v| v.eq_ignore_ascii_case("wayland"))
.unwrap_or(false);
let is_kde = env::var("XDG_CURRENT_DESKTOP")
.map(|v| v.to_uppercase().contains("KDE"))
.unwrap_or(false)
|| env::var("KDE_SESSION_VERSION").is_ok();
if is_wayland && is_kde {
debug!("Skipping GTK layer shell init on KDE Wayland");
if env::var("HANDY_NO_GTK_LAYER_SHELL").is_ok() {
debug!("Skipping GTK layer shell init (HANDY_NO_GTK_LAYER_SHELL is set)");
return false;
}