From 7bd97d9b7ef57653114674ded170647e8a65c578 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sat, 29 Jun 2024 19:13:03 +0200 Subject: [PATCH] prematurely abort ProcSendEvent if a ClientMsg has been fordwarded Fixes ArcticaProject/nx-libs#1065 --- nx-X11/programs/Xserver/hw/nxagent/Events.c | 8 +++++--- nx-X11/programs/Xserver/hw/nxagent/Events.h | 2 +- nx-X11/programs/Xserver/hw/nxagent/NXevents.c | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/nx-X11/programs/Xserver/hw/nxagent/Events.c b/nx-X11/programs/Xserver/hw/nxagent/Events.c index 634dadd364..48e98c2d92 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Events.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Events.c @@ -224,7 +224,7 @@ ExposeQueue nxagentExposeQueue; RegionPtr nxagentRemoteExposeRegion = NULL; -static void nxagentForwardRemoteExpose(void); +static Bool nxagentForwardRemoteExpose(void); static int nxagentClipAndSendExpose(WindowPtr pWin, void * ptr); @@ -4499,7 +4499,7 @@ int nxagentWaitEvents(Display *dpy, useconds_t msec) return 1; } -void ForwardClientMessage(ClientPtr client, xSendEventReq *stuff) +Bool ForwardClientMessage(ClientPtr client, xSendEventReq *stuff) { Atom netwmstate = MakeAtom("_NET_WM_STATE", strlen("_NET_WM_STATE"), False); Atom wmchangestate = MakeAtom("WM_CHANGE_STATE", strlen("WM_CHANGE_STATE"), False); @@ -4542,7 +4542,7 @@ void ForwardClientMessage(ClientPtr client, xSendEventReq *stuff) #endif } else - return; // ERROR! + return False; // ERROR! #ifdef DEBUG fprintf(stderr, "%s: window [0x%lx]\n", __func__, X.xclient.window); @@ -4562,8 +4562,10 @@ void ForwardClientMessage(ClientPtr client, xSendEventReq *stuff) fprintf(stderr, "%s: send to window [0x%lx]\n", __func__, dest); fprintf(stderr, "%s: return Status [%d]\n", __func__, stat); #endif + return True; } } + return False; } #ifdef NX_DEBUG_INPUT diff --git a/nx-X11/programs/Xserver/hw/nxagent/Events.h b/nx-X11/programs/Xserver/hw/nxagent/Events.h index b3e7f8a173..4a6a107d0a 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Events.h +++ b/nx-X11/programs/Xserver/hw/nxagent/Events.h @@ -222,6 +222,6 @@ int nxagentPendingEvents(Display *dpy); int nxagentWaitEvents(Display *, useconds_t msec); -void ForwardClientMessage(ClientPtr client, xSendEventReq *stuff); +Bool ForwardClientMessage(ClientPtr client, xSendEventReq *stuff); #endif /* __Events_H__ */ diff --git a/nx-X11/programs/Xserver/hw/nxagent/NXevents.c b/nx-X11/programs/Xserver/hw/nxagent/NXevents.c index 9d3045dc77..1e70b799ed 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/NXevents.c +++ b/nx-X11/programs/Xserver/hw/nxagent/NXevents.c @@ -427,8 +427,8 @@ ProcSendEvent(ClientPtr client) if (nxagentOption(Rootless) && stuff->event.u.u.type == ClientMessage) { - ForwardClientMessage(client, stuff); - return Success; + if (ForwardClientMessage(client, stuff)) + return Success; } if (stuff -> event.u.u.type == SelectionNotify)