From 0ca143159408f0f5e092c84fc7354d6e7201f52f Mon Sep 17 00:00:00 2001 From: Unrud Date: Tue, 23 Jan 2024 19:24:22 +0100 Subject: [PATCH] Fix Xwayland detection with newer servers Fixes #63 --- inputcontrol/controller_x11.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/inputcontrol/controller_x11.go b/inputcontrol/controller_x11.go index c5d19d9..bb37d37 100644 --- a/inputcontrol/controller_x11.go +++ b/inputcontrol/controller_x11.go @@ -22,6 +22,7 @@ package inputcontrol // #cgo LDFLAGS: -lX11 -lXrandr -lXtst +// #include // #include // #include // #include @@ -74,6 +75,17 @@ func InitX11Controller() (Controller, error) { } func (p *x11Controller) xIsXwayland() bool { + // Detection method from https://gitlab.freedesktop.org/xorg/app/xisxwayland/-/blob/xisxwayland-2/xisxwayland.c + var opcode, event, error, major, minor C.int + xwaylandExtensionName := C.CString("XWAYLAND") + defer C.free(unsafe.Pointer(xwaylandExtensionName)) + if C.XQueryExtension(p.display, xwaylandExtensionName, &opcode, &event, &error) != 0 { + return true + } + if C.XRRQueryExtension(p.display, &event, &error) == 0 || + C.XRRQueryVersion(p.display, &major, &minor) == 0 { + return false + } resources := C.XRRGetScreenResourcesCurrent(p.display, C.MacroDefaultRootWindow(p.display)) if resources == nil { return false