From 2f8833d985df8be444b4a8968b59448c538ec3cc Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Sat, 27 Jun 2020 15:29:42 +0200 Subject: [PATCH] app/internal/window: [X11] avoid -d=checkptr check failures Casting a *XClientMessageEvent or *XSelectionEvent to *XEvent is technically incorrect because the union XEvent is the larger structure. Use an XEvent variable as the backing storage for the specialized event types instead. Signed-off-by: Elias Naur --- app/internal/window/os_x11.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/internal/window/os_x11.go b/app/internal/window/os_x11.go index f9862439..69108c64 100644 --- a/app/internal/window/os_x11.go +++ b/app/internal/window/os_x11.go @@ -115,7 +115,9 @@ func (w *x11Window) Close() { w.mu.Lock() defer w.mu.Unlock() - ev := C.XClientMessageEvent{ + var xev C.XEvent + ev := (*C.XClientMessageEvent)(unsafe.Pointer(&xev)) + *ev = C.XClientMessageEvent{ _type: C.ClientMessage, display: w.x, window: w.xw, @@ -125,7 +127,7 @@ func (w *x11Window) Close() { arr := (*[5]C.long)(unsafe.Pointer(&ev.data)) arr[0] = C.long(w.atoms.evDelWindow) arr[1] = C.CurrentTime - C.XSendEvent(w.x, w.xw, C.False, C.NoEventMask, (*C.XEvent)(unsafe.Pointer(&ev))) + C.XSendEvent(w.x, w.xw, C.False, C.NoEventMask, &xev) } var x11OneByte = make([]byte, 1) @@ -400,7 +402,9 @@ func (h *x11EventHandler) handleEvents() bool { break } notify := func() { - nev := C.XSelectionEvent{ + var xev C.XEvent + ev := (*C.XSelectionEvent)(unsafe.Pointer(&xev)) + *ev = C.XSelectionEvent{ _type: C.SelectionNotify, display: cevt.display, requestor: cevt.requestor, @@ -409,7 +413,7 @@ func (h *x11EventHandler) handleEvents() bool { property: cevt.property, time: cevt.time, } - C.XSendEvent(w.x, cevt.requestor, 0, 0, (*C.XEvent)(unsafe.Pointer(&nev))) + C.XSendEvent(w.x, cevt.requestor, 0, 0, &xev) } switch cevt.target { case w.atoms.targets: