[X2Go-Commits] [nx-libs] 59/219: Add nxagentExternalClipboardEventTrap

git-admin at x2go.org git-admin at x2go.org
Sat Sep 28 12:10:21 CEST 2019


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch 3.6.x
in repository nx-libs.

commit 3fd7e5f93fe0cc3198c5cc2fb5da9635b849c5be
Author: Ulrich Sibiller <uli42 at gmx.de>
Date:   Mon Jun 10 14:18:06 2019 +0200

    Add nxagentExternalClipboardEventTrap
---
 nx-X11/programs/Xserver/hw/nxagent/Events.c | 12 ++++++++++++
 nx-X11/programs/Xserver/hw/nxagent/Trap.c   |  8 ++++++++
 nx-X11/programs/Xserver/hw/nxagent/Trap.h   |  8 ++++++++
 3 files changed, 28 insertions(+)

diff --git a/nx-X11/programs/Xserver/hw/nxagent/Events.c b/nx-X11/programs/Xserver/hw/nxagent/Events.c
index 7ec97dada..4bddbba3a 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Events.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Events.c
@@ -2968,7 +2968,19 @@ int nxagentHandleXFixesSelectionNotify(XEvent *X)
 
       info.selection = &CurrentSelections[i];
       info.kind = xfixesEvent->xfixesselection.subtype;
+
+      /*
+       * The trap indicates that we are triggered by a clipboard event
+       * originating from the real X server. In that case we do not
+       * want to propagate back changes to the real X server, because
+       * it already knows about them and we would end up in an
+       * infinite loop of events. If there was a better way to
+       * identify that situation during Callback processing we could
+       * get rid of the Trap...
+       */
+      nxagentExternalClipboardEventTrap = 1;
       CallCallbacks(&SelectionCallback, &info);
+      nxagentExternalClipboardEventTrap = 0;
     }
   }
   return 1;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Trap.c b/nx-X11/programs/Xserver/hw/nxagent/Trap.c
index c582f6a16..f219bb43c 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Trap.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Trap.c
@@ -120,3 +120,11 @@ int nxagentXkbCapsTrap = 0;
 
 int nxagentXkbNumTrap = 0;
 
+
+/*
+ * Set to indicate we are processing a clipboard event triggered by
+ * the real X server. This is used to avoid endless loops if callbacks
+ * would trigger another event by the real X server
+ */
+
+int nxagentExternalClipboardEventTrap = 0;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Trap.h b/nx-X11/programs/Xserver/hw/nxagent/Trap.h
index f0884f657..9f0c055c8 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Trap.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Trap.h
@@ -121,4 +121,12 @@ extern int nxagentXkbCapsTrap;
 
 extern int nxagentXkbNumTrap;
 
+/*
+ * Set to indicate we are processing a clipboard event triggered by
+ * the real X server. This is used to avoid endless loops if callbacks
+ * would trigger another event by the real X server
+ */
+
+extern int nxagentExternalClipboardEventTrap;
+
 #endif /* __Trap_H__ */

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/nx-libs.git


More information about the x2go-commits mailing list