[X2Go-Commits] [nx-libs] 349/429: Clipboard.c: add some more selection atoms

git-admin at x2go.org git-admin at x2go.org
Mon Oct 18 09:37:04 CEST 2021


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 8316d614a8d297d8b8c9d1a65346a325413b2a0d
Author: Ulrich Sibiller <uli42 at gmx.de>
Date:   Thu Sep 24 00:44:49 2020 +0200

    Clipboard.c: add some more selection atoms
    
    we currently do not support them but as they require a special
    treatment we need to know them and report an error if they appear.
---
 nx-X11/programs/Xserver/hw/nxagent/Atoms.c     |  17 ++-
 nx-X11/programs/Xserver/hw/nxagent/Atoms.h     |   2 +-
 nx-X11/programs/Xserver/hw/nxagent/Clipboard.c | 141 ++++++++++++++++++++++---
 3 files changed, 145 insertions(+), 15 deletions(-)

diff --git a/nx-X11/programs/Xserver/hw/nxagent/Atoms.c b/nx-X11/programs/Xserver/hw/nxagent/Atoms.c
index d9ee678fa..86022ee62 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Atoms.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Atoms.c
@@ -76,7 +76,7 @@ Atom nxagentAtoms[NXAGENT_NUMBER_OF_ATOMS];
  * Careful! Do not change indices here! Some of those are referenced
  * at other places via nxagentAtoms[index].
  */
-static char *nxagentAtomNames[NXAGENT_NUMBER_OF_ATOMS + 1] =
+static char *nxagentAtomNames[NXAGENT_NUMBER_OF_ATOMS + 2] =
 {
   "NX_IDENTITY",                 /*  0 */
       /* NX_IDENTITY was used in earlier nx versions to communicate
@@ -135,6 +135,21 @@ static char *nxagentAtomNames[NXAGENT_NUMBER_OF_ATOMS + 1] =
   "COMPOUND_TEXT",               /* 16 */
       /* one of the supported data formats for selections. Standard
          ICCCM Atom */
+  "INCR",                        /* 17 */
+      /* incremental clipboard transfers. Standard
+         ICCCM Atom */
+  "MULTIPLE",                    /* 18 */
+      /* request selection in multiple formats at once. Standard
+         ICCCM Atom */
+  "DELETE",                      /* 19 */
+      /* request to delete selection. Standard ICCCM Atom */
+  "INSERT_SELECTION",            /* 20 */
+      /* request to insert other selection. Standard ICCCM Atom */
+  "INSERT_PROPERTY",             /* 21 */
+      /* request to insert content of property into selection. Standard
+         ICCCM Atom */
+  "SAVE_TARGETS",                /* 22 */
+      /* request tp save clipboard content to clipboard manager on exit */
   NULL,
   NULL
 };
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Atoms.h b/nx-X11/programs/Xserver/hw/nxagent/Atoms.h
index 4dcdf7055..84da3ec8e 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Atoms.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Atoms.h
@@ -30,7 +30,7 @@
 #include "../../include/window.h"
 #include "screenint.h"
 
-#define NXAGENT_NUMBER_OF_ATOMS  18
+#define NXAGENT_NUMBER_OF_ATOMS  23
 
 extern Atom nxagentAtoms[NXAGENT_NUMBER_OF_ATOMS];
 
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
index 3721ace60..072dd1a3d 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
@@ -142,25 +142,47 @@ typedef struct _lastServer {
 
 static lastServer *lastServers;
 
+/*
+ * FIXME: use (additional) Atoms.c helpers to get rid of all these
+ * Atoms and strings
+ */
 static XlibAtom serverTARGETS;
 static XlibAtom serverTIMESTAMP;
+static XlibAtom serverINCR;
+static XlibAtom serverMULTIPLE;
+static XlibAtom serverDELETE;
+static XlibAtom serverINSERT_SELECTION;
+static XlibAtom serverINSERT_PROPERTY;
+static XlibAtom serverSAVE_TARGETS;
 static XlibAtom serverTEXT;
 static XlibAtom serverCOMPOUND_TEXT;
 static XlibAtom serverUTF8_STRING;
 static XlibAtom serverTransFromAgentProperty;
-static Atom     clientTARGETS;
-static Atom     clientTIMESTAMP;
-static Atom     clientTEXT;
-static Atom     clientCOMPOUND_TEXT;
-static Atom     clientUTF8_STRING;
-
-static char     szAgentTARGETS[] = "TARGETS";
-static char     szAgentTEXT[] = "TEXT";
-static char     szAgentTIMESTAMP[] = "TIMESTAMP";
-static char     szAgentCOMPOUND_TEXT[] = "COMPOUND_TEXT";
-static char     szAgentUTF8_STRING[] = "UTF8_STRING";
-static char     szAgentNX_CUT_BUFFER_CLIENT[] = "NX_CUT_BUFFER_CLIENT";
-static char     szAgentCLIPBOARD[] = "CLIPBOARD";
+static Atom clientTARGETS;
+static Atom clientTIMESTAMP;
+static Atom clientINCR;
+static Atom clientMULTIPLE;
+static Atom clientDELETE;
+static Atom clientINSERT_SELECTION;
+static Atom clientINSERT_PROPERTY;
+static Atom clientSAVE_TARGETS;
+static Atom clientTEXT;
+static Atom clientCOMPOUND_TEXT;
+static Atom clientUTF8_STRING;
+
+static char szAgentTARGETS[] = "TARGETS";
+static char szAgentTEXT[] = "TEXT";
+static char szAgentTIMESTAMP[] = "TIMESTAMP";
+static char szAgentINCR[] = "INCR";
+static char szAgentMULTIPLE[] = "MULTIPLE";
+static char szAgentDELETE[] = "DELETE";
+static char szAgentINSERT_SELECTION[] = "INSERT_SELECTION";
+static char szAgentINSERT_PROPERTY[] = "INSERT_PROPERTY";
+static char szAgentSAVE_TARGETS[] = "SAVE_TARGETS";
+static char szAgentCOMPOUND_TEXT[] = "COMPOUND_TEXT";
+static char szAgentUTF8_STRING[] = "UTF8_STRING";
+static char szAgentNX_CUT_BUFFER_CLIENT[] = "NX_CUT_BUFFER_CLIENT";
+static char szAgentCLIPBOARD[] = "CLIPBOARD";
 
 /* number of milliseconds to wait for a conversion from the real X server. */
 #define CONVERSION_TIMEOUT 5000
@@ -809,6 +831,46 @@ void nxagentHandleSelectionRequestFromXServer(XEvent *X)
     replyRequestSelectionToXServer(X, True);
     return;
   }
+  else if (X->xselectionrequest.target == serverMULTIPLE)
+  {
+    #ifdef DEBUG
+    fprintf(stderr, "%s: (currently) unsupported target [MULTIPLE] - denying request.\n", __func__);
+    #endif
+    replyRequestSelectionToXServer(X, False);
+    return;
+  }
+  else if (X->xselectionrequest.target == serverDELETE)
+  {
+    #ifdef DEBUG
+    fprintf(stderr, "%s: (currently) unsupported target [DELETE] - denying request.\n", __func__);
+    #endif
+    replyRequestSelectionToXServer(X, False);
+    return;
+  }
+  else if (X->xselectionrequest.target == serverINSERT_SELECTION)
+  {
+    #ifdef DEBUG
+    fprintf(stderr, "%s: (currently) unsupported target [INSERT_SELECTION] - denying request.\n", __func__);
+    #endif
+    replyRequestSelectionToXServer(X, False);
+    return;
+  }
+  else if (X->xselectionrequest.target == serverINSERT_PROPERTY)
+  {
+    #ifdef DEBUG
+    fprintf(stderr, "%s: (currently) unsupported target [INSERT_PROPERTY] - denying request.\n", __func__);
+    #endif
+    replyRequestSelectionToXServer(X, False);
+    return;
+  }
+  else if (X->xselectionrequest.target == serverSAVE_TARGETS)
+  {
+    #ifdef DEBUG
+    fprintf(stderr, "%s: (currently) unsupported target [SAVE_TARGETS] - denying request.\n", __func__);
+    #endif
+    replyRequestSelectionToXServer(X, False);
+    return;
+  }
   else
   {
     fprintf(stderr, "%s: target [%ld][%s].\n", __func__, X->xselectionrequest.target,
@@ -1960,6 +2022,46 @@ int nxagentConvertSelection(ClientPtr client, WindowPtr pWin, Atom selection,
     sendSelectionNotifyEventToClient(client, time, requestor, selection, target, property);
     return 1;
   }
+  else if (target == clientMULTIPLE)
+  {
+    #ifdef DEBUG
+    fprintf(stderr, "%s: (currently) unsupported target [MULTIPLE] - denying request.\n", __func__);
+    #endif
+    sendSelectionNotifyEventToClient(client, time, requestor, selection, target, None);
+    return 1;
+  }
+  else if (target == clientDELETE)
+  {
+    #ifdef DEBUG
+    fprintf(stderr, "%s: (currently) unsupported target [DELETE] - denying request.\n", __func__);
+    #endif
+    sendSelectionNotifyEventToClient(client, time, requestor, selection, target, None);
+    return 1;
+  }
+  else if (target == clientINSERT_SELECTION)
+  {
+    #ifdef DEBUG
+    fprintf(stderr, "%s: (currently) unsupported target [INSERT_SELECTION] - denying request.\n", __func__);
+    #endif
+    sendSelectionNotifyEventToClient(client, time, requestor, selection, target, None);
+    return 1;
+  }
+  else if (target == clientINSERT_PROPERTY)
+  {
+    #ifdef DEBUG
+    fprintf(stderr, "%s: (currently) unsupported target [INSERT_PROPERTY] - denying request.\n", __func__);
+    #endif
+    sendSelectionNotifyEventToClient(client, time, requestor, selection, target, None);
+    return 1;
+  }
+  else if (target == clientSAVE_TARGETS)
+  {
+    #ifdef DEBUG
+    fprintf(stderr, "%s: (currently) unsupported target [SAVE_TARGETS] - denying request.\n", __func__);
+    #endif
+    sendSelectionNotifyEventToClient(client, time, requestor, selection, target, None);
+    return 1;
+  }
 
   if (lastClients[index].clientPtr == client)
   {
@@ -2260,11 +2362,18 @@ Bool nxagentInitClipboard(WindowPtr pWin)
   {
     /* cannot move that down to others - we need it for
      * initSelectionOwnerData ! */
+    /* FIXME: it is probably better to re-use the strings from Atoms.c here */
     clientTARGETS = MakeAtom(szAgentTARGETS, strlen(szAgentTARGETS), True);
     clientTEXT = MakeAtom(szAgentTEXT, strlen(szAgentTEXT), True);
     clientCOMPOUND_TEXT = MakeAtom(szAgentCOMPOUND_TEXT, strlen(szAgentCOMPOUND_TEXT), True);
     clientUTF8_STRING = MakeAtom(szAgentUTF8_STRING, strlen(szAgentUTF8_STRING), True);
     clientTIMESTAMP = MakeAtom(szAgentTIMESTAMP, strlen(szAgentTIMESTAMP), True);
+    clientINCR = MakeAtom(szAgentINCR, strlen(szAgentINCR), True);
+    clientMULTIPLE = MakeAtom(szAgentMULTIPLE, strlen(szAgentMULTIPLE), True);
+    clientDELETE = MakeAtom(szAgentDELETE, strlen(szAgentDELETE), True);
+    clientINSERT_SELECTION = MakeAtom(szAgentINSERT_SELECTION, strlen(szAgentINSERT_SELECTION), True);
+    clientINSERT_PROPERTY = MakeAtom(szAgentINSERT_PROPERTY, strlen(szAgentINSERT_PROPERTY), True);
+    clientSAVE_TARGETS = MakeAtom(szAgentSAVE_TARGETS, strlen(szAgentSAVE_TARGETS), True);
 
     SAFE_free(lastSelectionOwner);
     lastSelectionOwner = (SelectionOwner *) malloc(nxagentMaxSelections * sizeof(SelectionOwner));
@@ -2319,6 +2428,12 @@ Bool nxagentInitClipboard(WindowPtr pWin)
   serverCOMPOUND_TEXT = nxagentAtoms[16]; /* COMPOUND_TEXT */
   serverUTF8_STRING = nxagentAtoms[12]; /* UTF8_STRING */
   serverTIMESTAMP = nxagentAtoms[11];   /* TIMESTAMP */
+  serverINCR = nxagentAtoms[17];   /* INCR */
+  serverMULTIPLE = nxagentAtoms[18];   /* MULTIPLE */
+  serverDELETE = nxagentAtoms[19];   /* DELETE */
+  serverINSERT_SELECTION = nxagentAtoms[20];   /* INSERT_SELECTION */
+  serverINSERT_PROPERTY = nxagentAtoms[21];   /* INSERT_PROPERTY */
+  serverSAVE_TARGETS = nxagentAtoms[22];   /* SAVE_TARGETS */
 
   /*
    * Server side properties to hold pasted data.

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