[X2Go-Commits] [nx-libs] 60/219: Add nxagentSetSelectionCallback

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 2972f6af1b63f4e98aa4504a83f756b8486c7df0
Author: Ulrich Sibiller <uli42 at gmx.de>
Date:   Mon Jun 10 14:20:47 2019 +0200

    Add nxagentSetSelectionCallback
---
 nx-X11/programs/Xserver/hw/nxagent/Clipboard.c | 69 ++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)

diff --git a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
index 824c1dc47..9c518801b 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
@@ -1257,6 +1257,75 @@ void nxagentResetSelectionOwner(void)
   return;
 }
 
+#ifdef NXAGENT_CLIPBOARD
+void nxagentSetSelectionCallback(CallbackListPtr *callbacks, void *data,
+                                   void *args)
+{
+  /*
+   * Only act if the Trap is unset. 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...
+  */
+  if (nxagentExternalClipboardEventTrap != 0)
+  {
+    #ifdef DEBUG
+    fprintf(stderr, "%s: Trap is set, doing nothing\n", __func__);
+    #endif
+    return;
+  }
+
+  SelectionInfoRec *info = (SelectionInfoRec *)args;
+
+  Selection * pCurSel = (Selection *)info->selection;
+
+  #ifdef DEBUG
+  fprintf(stderr, "%s: pCurSel->lastTimeChanged [%d]\n", __func__, pCurSel->lastTimeChanged.milliseconds);
+  #endif
+
+  if (info->kind == SelectionSetOwner)
+  {
+    #ifdef DEBUG
+    fprintf(stderr, "%s: called with SelectionCallbackKind SelectionSetOwner\n", __func__);
+    fprintf(stderr, "%s: pCurSel->pWin [0x%x]\n", __func__, pCurSel->pWin ? pCurSel->pWin->drawable.id : NULL);
+    fprintf(stderr, "%s: pCurSel->selection [%s]\n", __func__, NameForAtom(pCurSel->selection));
+    #endif
+
+    if ((pCurSel->pWin != NULL) &&
+        (nxagentOption(Clipboard) != ClipboardNone) &&
+        ((pCurSel->selection == XA_PRIMARY) ||
+         (pCurSel->selection == MakeAtom("CLIPBOARD", 9, 0))))
+    {
+      #ifdef DEBUG
+      fprintf(stderr, "%s: calling nxagentSetSelectionOwner\n", __func__);
+      #endif
+      nxagentSetSelectionOwner(pCurSel);
+    }
+  }
+  else if (info->kind == SelectionWindowDestroy)
+  {
+    #ifdef DEBUG
+    fprintf(stderr, "%s: called with SelectionCallbackKind SelectionWindowDestroy\n", __func__);
+    #endif
+  }
+  else if (info->kind == SelectionClientClose)
+  {
+    #ifdef DEBUG
+    fprintf(stderr, "%s: called with SelectionCallbackKind SelectionClientClose\n", __func__);
+    #endif
+  }
+  else
+  {
+    #ifdef DEBUG
+    fprintf(stderr, "%s: called with unknown SelectionCallbackKind\n", __func__);
+    #endif
+  }
+}
+#endif
+
 void nxagentSetSelectionOwner(Selection *pSelection)
 {
   #ifdef DEBUG

--
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