aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gabriel <mike.gabriel@das-netzwerkteam.de>2018-10-27 20:56:24 +0200
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2018-10-27 20:56:24 +0200
commit2804320164cc0c0cc16741ca89eec8ba860723f3 (patch)
tree20ef6b309e6ba307f1f4527a25111a0fb2df17e5
parent2eb4a65ebd9aa04bd663fb9a7f0680fd2c56e990 (diff)
parent60bce146ee344d477add3a559eb9f2de155e4c09 (diff)
downloadnx-libs-2804320164cc0c0cc16741ca89eec8ba860723f3.tar.gz
nx-libs-2804320164cc0c0cc16741ca89eec8ba860723f3.tar.bz2
nx-libs-2804320164cc0c0cc16741ca89eec8ba860723f3.zip
Merge branch 'uli42-pr/clipboard_debug' into 3.6.x
Attributes GH PR #731: https://github.com/ArcticaProject/nx-libs/pull/731
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Clipboard.c569
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/NXproperty.c25
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Utils.h2
3 files changed, 411 insertions, 185 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
index 703a491b6..13cfd81e6 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
@@ -140,6 +140,59 @@ static char szAgentUTF8_STRING[] = "UTF8_STRING";
static char szAgentNX_CUT_BUFFER_CLIENT[] = "NX_CUT_BUFFER_CLIENT";
/*
+ * some helpers for debugging output
+ */
+
+#ifdef DEBUG
+const char * GetClientSelectionStageString(int stage)
+{
+ switch(stage)
+ {
+ case SelectionStageNone: return("None"); break;;
+ case SelectionStageQuerySize: return("QuerySize"); break;;
+ case SelectionStageWaitSize: return("WaitSize"); break;;
+ case SelectionStageQueryData: return("QueryData"); break;;
+ case SelectionStageWaitData: return("WaitData"); break;;
+ default: return("UNKNOWN!"); break;;
+ }
+}
+#define SetClientSelectionStage(stage) do {fprintf(stderr, "%s: Changing selection stage from [%s] to [%s]\n", __func__, GetClientSelectionStageString(lastClientStage), GetClientSelectionStageString(SelectionStage##stage)); lastClientStage = SelectionStage##stage;} while (0)
+#define PrintClientSelectionStage() do {fprintf(stderr, "%s: Current selection stage [%s]\n", __func__, GetClientSelectionStageString(lastClientStage));} while (0)
+#else
+#define SetClientSelectionStage(stage) do {lastClientStage = SelectionStage##stage;} while (0)
+#define PrintClientSelectionStage()
+#endif
+
+/*
+ * see also nx-X11/lib/src/ErrDes.c
+ */
+const char * GetXErrorString(int code)
+{
+ switch(code)
+ {
+ case Success: return("Success"); break;;
+ case BadRequest: return("BadRequest"); break;;
+ case BadValue: return("BadValue"); break;;
+ case BadWindow: return("BadWindow"); break;;
+ case BadPixmap: return("BadPixmap"); break;;
+ case BadAtom: return("BadAtom"); break;;
+ case BadCursor: return("BadCursor"); break;;
+ case BadFont: return("BadFont"); break;;
+ case BadMatch: return("BadMatch"); break;;
+ case BadDrawable: return("BadDrawable"); break;;
+ case BadAccess: return("BadAccess"); break;;
+ case BadAlloc: return("BadAlloc"); break;;
+ case BadColor: return("BadColor"); break;;
+ case BadGC: return("BadGC"); break;;
+ case BadIDChoice: return("BadIDChoice"); break;;
+ case BadName: return("BadName"); break;;
+ case BadLength: return("BadLength"); break;;
+ case BadImplementation: return("BadImplementation"); break;;
+ default: return("UNKNOWN!"); break;;
+ }
+}
+
+/*
* Save the values queried from X server.
*/
@@ -157,6 +210,139 @@ void nxagentNotifyConvertFailure(ClientPtr client, Window requestor,
Atom selection, Atom target, Time time);
int nxagentSendNotify(xEvent *event);
+void nxagentPrintClipboardStat(char *);
+
+#ifdef DEBUG
+void nxagentPrintSelectionStat(int sel)
+{
+ SelectionOwner lOwner = lastSelectionOwner[sel];
+ Selection curSel = CurrentSelections[sel];
+ char *s =NULL;
+
+#ifdef CLIENTIDS
+ fprintf(stderr, " lastSelectionOwner[].client [%p] index [%d] PID [%d] Cmd [%s]\n",
+ (void *)lOwner.client,
+ lOwner.client ? lOwner.client->index : -1,
+ GetClientPid(lOwner.client),
+ GetClientCmdName(lOwner.client));
+#else
+ fprintf(stderr, " lastSelectionOwner[].client [%p] index [%d]\n",
+ (void *)lOwner.client,
+ lOwner.client ? lOwner.client->index : -1);
+#endif
+ fprintf(stderr, " lastSelectionOwner[].window [0x%x]\n", lOwner.window);
+ fprintf(stderr, " lastSelectionOwner[].windowPtr [%p]\n", (void *)lOwner.windowPtr);
+ fprintf(stderr, " lastSelectionOwner[].lastTimeChanged [%u]\n", lOwner.lastTimeChanged);
+
+ /*
+ print the selection name.
+ */
+ if (lOwner.client)
+ {
+ fprintf(stderr, " lastSelectionOwner[].selection [% 4d][%s] (local)\n", lOwner.selection, NameForAtom(lOwner.selection));
+ }
+ else
+ {
+ SAFE_XFree(s); s = XGetAtomName(nxagentDisplay, lOwner.selection);
+ fprintf(stderr, " lastSelectionOwner[].selection [% 4d][%s] (remote)\n", lOwner.selection, validateString(s));
+ SAFE_XFree(s);
+ }
+#ifdef CLIENTIDS
+ fprintf(stderr, " CurrentSelections[].client [%p] index [%d] PID [%d] Cmd [%s]\n",
+ (void *)curSel.client,
+ curSel.client ? curSel.client->index : -1,
+ GetClientPid(curSel.client),
+ GetClientCmdName(curSel.client));
+#else
+ fprintf(stderr, " CurrentSelections[].client [%p] index [%d]\n",
+ (void *)curSel.client,
+ curSel.client ? curSel.client->index : -1);
+#endif
+ fprintf(stderr, " CurrentSelections[].window [0x%x]\n", curSel.window);
+ return;
+}
+#endif
+
+void nxagentPrintClipboardStat(char *header)
+{
+ #ifdef DEBUG
+ char *s =NULL;
+
+ fprintf(stderr, "/----- Clipboard internal status - %s -----\n", header);
+
+ fprintf(stderr, " current time (Time) [%u]\n", GetTimeInMillis());
+ fprintf(stderr, " agentClipboardStatus (int) [%d]\n", agentClipboardStatus);
+ fprintf(stderr, " clientAccum (int) [%d]\n", clientAccum);
+ fprintf(stderr, " nxagentMaxSelections (int) [%d]\n", nxagentMaxSelections);
+ fprintf(stderr, " NumCurrentSelections (int) [%d]\n", NumCurrentSelections);
+ fprintf(stderr, " serverWindow (Window) [0x%x]\n", serverWindow);
+ fprintf(stderr, " nxagentLastClipboardClient (int) [%d]\n", nxagentLastClipboardClient);
+
+ fprintf(stderr, " ClipboardMode ");
+ switch(nxagentOption(Clipboard))
+ {
+ case ClipboardBoth: fprintf(stderr, "[Both]"); break;;
+ case ClipboardClient: fprintf(stderr, "[Client]"); break;;
+ case ClipboardServer: fprintf(stderr, "[Server]"); break;;
+ case ClipboardNone: fprintf(stderr, "[None]"); break;;
+ default: fprintf(stderr, "[UNKNOWN] (FAIL!)"); break;;
+ }
+ fprintf(stderr,"\n");
+
+ fprintf(stderr, "lastServer\n");
+ fprintf(stderr, " lastServerRequestor (Window) [0x%x]\n", lastServerRequestor);
+ SAFE_XFree(s); s = XGetAtomName(nxagentDisplay, lastServerProperty);
+ fprintf(stderr, " lastServerProperty (Atom) [% 4d][%s]\n", lastServerProperty, s);
+ SAFE_XFree(s); s = XGetAtomName(nxagentDisplay, lastServerTarget);
+ fprintf(stderr, " lastServerTarget (Atom) [% 4d][%s]\n", lastServerTarget, s);
+ fprintf(stderr, " lastServerTime (Time) [%u]\n", lastServerTime);
+
+ fprintf(stderr, "lastClient\n");
+ fprintf(stderr, " lastClientWindowPtr (WindowPtr) [%p]\n", (void *)lastClientWindowPtr);
+ fprintf(stderr, " lastClientClientPtr (ClientPtr) [%p]\n", (void *)lastClientClientPtr);
+ fprintf(stderr, " lastClientRequestor (Window) [0x%x]\n", lastClientRequestor);
+ fprintf(stderr, " lastClientProperty (Atom) [% 4d][%s]\n", lastClientProperty, NameForAtom(lastClientProperty));
+ fprintf(stderr, " lastClientSelection (Atom) [% 4d][%s]\n", lastClientSelection, NameForAtom(lastClientSelection));
+ fprintf(stderr, " lastClientTarget (Atom) [% 4d][%s]\n", lastClientTarget, NameForAtom(lastClientTarget));
+ fprintf(stderr, " lastClientTime (Time) [%u]\n", lastServerTime);
+ fprintf(stderr, " lastClientReqTime (Time) [%u]\n", lastServerTime);
+ fprintf(stderr, " lastClientPropertySize (unsigned long) [%lu]\n", lastClientPropertySize);
+ fprintf(stderr, " lastClientStage (ClientSelectionStage) [%d][%s]\n", lastClientStage, GetClientSelectionStageString(lastClientStage));
+
+ fprintf(stderr, "PRIMARY\n");
+ nxagentPrintSelectionStat(nxagentPrimarySelection);
+ fprintf(stderr, "CLIPBOARD\n");
+ nxagentPrintSelectionStat(nxagentClipboardSelection);
+
+ fprintf(stderr, "Atoms (server side)\n");
+ SAFE_XFree(s); s = XGetAtomName(nxagentDisplay, serverTARGETS);
+ fprintf(stderr, " serverTARGETS [% 4d][%s]\n", serverTARGETS, validateString(s));
+ SAFE_XFree(s); s = XGetAtomName(nxagentDisplay, serverTEXT);
+ fprintf(stderr, " serverTEXT [% d][%s]\n", serverTEXT, s);
+ SAFE_XFree(s); s = XGetAtomName(nxagentDisplay, serverUTF8_STRING);
+ fprintf(stderr, " serverUTF8_STRING [% 4d][%s]\n", serverUTF8_STRING, s);
+ SAFE_XFree(s); s = XGetAtomName(nxagentDisplay, serverCutProperty);
+ fprintf(stderr, " serverCutProperty [% 4d][%s]\n", serverCutProperty, s);
+
+ SAFE_XFree(s); s = XGetAtomName(nxagentDisplay, nxagentClipboardAtom);
+ fprintf(stderr, " nxagentClipboardAtom [% 4d][%s]\n", nxagentClipboardAtom, s);
+ SAFE_XFree(s); s = XGetAtomName(nxagentDisplay, nxagentTimestampAtom);
+ fprintf(stderr, " nxagentTimestampAtom [% 4d][%s]\n", nxagentTimestampAtom, s);
+
+ fprintf(stderr, "Atoms (inside nxagent)\n");
+ fprintf(stderr, " clientTARGETS [% 4d][%s]\n", clientTARGETS, NameForAtom(clientTARGETS));
+ fprintf(stderr, " clientTEXT [% 4d][%s]\n", clientTEXT, NameForAtom(clientTEXT));
+ fprintf(stderr, " clientCOMPOUND_TEXT [% 4d][%s]\n", clientCOMPOUND_TEXT, NameForAtom(clientCOMPOUND_TEXT));
+ fprintf(stderr, " clientUTF8_STRING [% 4d][%s]\n", clientUTF8_STRING, NameForAtom(clientUTF8_STRING));
+ fprintf(stderr, " clientCutProperty [% 4d][%s]\n", clientCutProperty, NameForAtom(clientCutProperty));
+ fprintf(stderr, " nxagentLastRequestedSelection [% 4d][%s]\n", nxagentLastRequestedSelection, NameForAtom(nxagentLastRequestedSelection));
+
+ fprintf(stderr, "\\------------------------------------------------------------------------------\n");
+
+ SAFE_XFree(s);
+#endif
+}
+
/*
* This is from NXproperty.c.
*/
@@ -168,15 +354,39 @@ int GetWindowProperty(WindowPtr pWin, Atom property, long longOffset, long longL
Bool nxagentValidServerTargets(Atom target)
{
- #ifdef DEBUG
- fprintf(stderr, "nxagentValidServerTargets: Got called.\n");
- #endif
-
- if (target == XA_STRING) return True;
- if (target == serverTEXT) return True;
+ if (target == XA_STRING)
+ {
+ #ifdef DEBUG
+ fprintf(stderr, "%s: valid target [XA_STRING].\n", __func__);
+ #endif
+ return True;
+ }
+ else if (target == serverTEXT)
+ {
+ #ifdef DEBUG
+ fprintf(stderr, "%s: valid target [TEXT].\n", __func__);
+ #endif
+ return True;
+ }
/* by dimbor */
- if (target == serverUTF8_STRING) return True;
+ else if (target == serverUTF8_STRING)
+ {
+ #ifdef DEBUG
+ fprintf(stderr, "%s: valid target [UTF8_STRING].\n", __func__);
+ #endif
+ return True;
+ }
+ else if (target == serverTARGETS)
+ {
+ #ifdef DEBUG
+ fprintf(stderr, "%s: special target [TARGETS].\n", __func__);
+ #endif
+ return False;
+ }
+ #ifdef DEBUG
+ fprintf(stderr, "%s: invalid target [%u].\n", __func__, target);
+ #endif
return False;
}
@@ -185,10 +395,12 @@ void nxagentClearClipboard(ClientPtr pClient, WindowPtr pWindow)
int i;
#ifdef DEBUG
- fprintf(stderr, "nxagentClearClipboard: Called with client [%p] window [%p].\n",
+ fprintf(stderr, "%s: Called with client [%p] window [%p].\n", __func__,
(void *) pClient, (void *) pWindow);
#endif
+ nxagentPrintClipboardStat("before nxagentClearClipboard");
+
/*
* Only for PRIMARY and CLIPBOARD selections.
*/
@@ -199,7 +411,7 @@ void nxagentClearClipboard(ClientPtr pClient, WindowPtr pWindow)
(pWindow != NULL && lastSelectionOwner[i].windowPtr == pWindow))
{
#ifdef TEST
- fprintf(stderr, "nxagentClearClipboard: Resetting state with client [%p] window [%p].\n",
+ fprintf(stderr, "%s: Resetting state with client [%p] window [%p].\n", __func__,
(void *) pClient, (void *) pWindow);
#endif
@@ -209,18 +421,19 @@ void nxagentClearClipboard(ClientPtr pClient, WindowPtr pWindow)
lastSelectionOwner[i].lastTimeChanged = GetTimeInMillis();
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
+ SetClientSelectionStage(None);
lastServerRequestor = None;
}
}
-
+
if (pWindow == lastClientWindowPtr)
{
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
+ SetClientSelectionStage(None);
}
+ nxagentPrintClipboardStat("after nxagentClearClipboard");
}
void nxagentClearSelection(XEvent *X)
@@ -228,19 +441,17 @@ void nxagentClearSelection(XEvent *X)
int i = 0;
#ifdef DEBUG
- fprintf(stderr, "nxagentClearSelection: Got called.\n");
+ fprintf(stderr, "%s: SelectionClear event for selection [%lu].\n", __func__, X->xselectionclear.selection);
#endif
+ nxagentPrintClipboardStat("before nxagentClearSelection");
+
if (agentClipboardStatus != 1 ||
nxagentOption(Clipboard) == ClipboardServer)
{
return;
}
- #ifdef DEBUG
- fprintf(stderr, "nxagentClearSelection: SelectionClear event.\n");
- #endif
-
while ((i < nxagentMaxSelections) &&
(lastSelectionOwner[i].selection != X->xselectionclear.selection))
{
@@ -272,21 +483,21 @@ void nxagentClearSelection(XEvent *X)
}
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
+ SetClientSelectionStage(None);
+ nxagentPrintClipboardStat("after nxagentClearSelection");
}
void nxagentRequestSelection(XEvent *X)
{
- #ifdef DEBUG
- int result;
- #endif
int i = 0;
- XSelectionEvent eventSelection;
+ XSelectionEvent eventSelection = {0};
#ifdef DEBUG
- fprintf(stderr, "nxagentRequestSelection: Got called.\n");
+ fprintf(stderr, "%s: Got called.\n", __func__);
#endif
+ nxagentPrintClipboardStat("before nxagentRequestSelection");
+
if (agentClipboardStatus != 1)
{
return;
@@ -311,10 +522,7 @@ FIXME: Do we need this?
fprintf(stderr, "SelectionRequest event aborting sele=[%s] ext target=[%s] Atom size is [%d]\n",
validateString(NameForAtom(X->xselectionrequest.selection)), strTarget, sizeof(Atom));
- if (strTarget != NULL)
- {
- XFree(strTarget);
- }
+ SAFE_XFree(strTarget);
*/
memset(&eventSelection, 0, sizeof(XSelectionEvent));
eventSelection.property = None;
@@ -332,8 +540,7 @@ FIXME: Do we need this?
1);
eventSelection.property = X->xselectionrequest.property;
}
-
- if (X->xselectionrequest.target == nxagentTimestampAtom)
+ else if (X->xselectionrequest.target == nxagentTimestampAtom)
{
while ((i < NumCurrentSelections) &&
lastSelectionOwner[i].selection != X->xselectionrequest.selection) i++;
@@ -361,7 +568,7 @@ FIXME: Do we need this?
eventSelection.time = X->xselectionrequest.time;
#ifdef DEBUG
- result =
+ int result =
#endif
XSendEvent(nxagentDisplay,
eventSelection.requestor,
@@ -370,13 +577,14 @@ FIXME: Do we need this?
(XEvent *) &eventSelection);
#ifdef DEBUG
+ fprintf(stderr, "%s: XSendEvent() returned [%s]\n", __func__, GetXErrorString(result));
if (result == BadValue || result == BadWindow)
{
- fprintf(stderr, "nxagentRequestSelection: WARNING! XSendEvent failed.\n");
+ fprintf(stderr, "%s: WARNING! XSendEvent failed.\n", __func__);
}
else
{
- fprintf(stderr, "nxagentRequestSelection: XSendEvent sent to window [0x%lx].\n",
+ fprintf(stderr, "%s: XSendEvent sent to window [0x%lx].\n", __func__,
eventSelection.requestor);
}
#endif
@@ -390,6 +598,7 @@ FIXME: Do we need this?
nxagentLastRequestedSelection = X->xselectionrequest.selection;
+ /* FIXME: shouldn't we reset i to 0 here first? */
while ((i < nxagentMaxSelections) &&
(lastSelectionOwner[i].selection != X->xselectionrequest.selection))
{
@@ -405,7 +614,7 @@ FIXME: Do we need this?
serverWindow, lastClientTime);
#ifdef DEBUG
- fprintf(stderr, "nxagentRequestSelection: Sent XConvertSelection.\n");
+ fprintf(stderr, "%s: Sent XConvertSelection.\n", __func__);
#endif
}
else
@@ -459,13 +668,13 @@ FIXME: Do we need this?
NullGrab);
#ifdef DEBUG
- fprintf(stderr, "nxagentRequestSelection: Executed TryClientEvents with clientCutProperty.\n");
+ fprintf(stderr, "%s: Executed TryClientEvents with clientCutProperty.\n", __func__);
#endif
}
else
{
/*
- * Probably we must to send a Notify
+ * Probably we must send a Notify
* to requestor with property None.
*/
@@ -479,7 +688,7 @@ FIXME: Do we need this?
eventSelection.time = X->xselectionrequest.time;
#ifdef DEBUG
- result =
+ int result =
#endif
XSendEvent(nxagentDisplay,
eventSelection.requestor,
@@ -488,11 +697,21 @@ FIXME: Do we need this?
(XEvent *) &eventSelection);
#ifdef DEBUG
- fprintf(stderr, "nxagentRequestSelection: Executed XSendEvent with property None.\n");
+ fprintf(stderr, "%s: XSendEvent() returned [%s]\n", __func__, GetXErrorString(result));
+ if (result == BadValue || result == BadWindow)
+ {
+ fprintf(stderr, "%s: WARNING! XSendEvent failed.\n", __func__);
+ }
+ else
+ {
+ fprintf(stderr, "%s: XSendEvent with property None sent to window [0x%lx].\n", __func__,
+ eventSelection.requestor);
+ }
#endif
}
}
}
+ nxagentPrintClipboardStat("after nxagentRequestSelection");
}
void nxagentSendSelectionNotify(Atom property)
@@ -500,7 +719,7 @@ void nxagentSendSelectionNotify(Atom property)
xEvent x;
#ifdef DEBUG
- fprintf (stderr, "nxagentSendSelectionNotify: Sending event to client [%d].\n",
+ fprintf (stderr, "%s: Sending event to client [%d].\n", __func__,
lastClientClientPtr -> index);
#endif
@@ -527,14 +746,14 @@ void nxagentTransferSelection(int resource)
if (lastClientClientPtr -> index != resource)
{
#ifdef DEBUG
- fprintf (stderr, "nxagentTransferSelection: WARNING! Inconsistent resource [%d] with current client [%d].\n",
+ fprintf (stderr, "%s: WARNING! Inconsistent resource [%d] with current client [%d].\n", __func__,
resource, lastClientClientPtr -> index);
#endif
nxagentSendSelectionNotify(None);
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
+ SetClientSelectionStage(None);
return;
}
@@ -543,6 +762,7 @@ void nxagentTransferSelection(int resource)
{
case SelectionStageQuerySize:
{
+ PrintClientSelectionStage();
/*
* Don't get data yet, just get size. We skip
* this stage in current implementation and
@@ -554,7 +774,7 @@ void nxagentTransferSelection(int resource)
if (nxagentLastClipboardClient == -1)
{
#ifdef WARNING
- fprintf(stderr, "nxagentTransferSelection: WARNING! Asynchronous GetProperty queue full.\n");
+ fprintf(stderr, "%s: WARNING! Asynchronous GetProperty queue full.\n", __func__);
#endif
result = -1;
@@ -574,35 +794,32 @@ void nxagentTransferSelection(int resource)
if (result == -1)
{
#ifdef DEBUG
- fprintf (stderr, "nxagentTransferSelection: Aborting selection notify procedure for client [%d].\n",
+ fprintf (stderr, "%s: Aborting selection notify procedure for client [%d].\n", __func__,
lastClientClientPtr -> index);
#endif
nxagentSendSelectionNotify(None);
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
+ SetClientSelectionStage(None);
return;
}
- #ifdef DEBUG
- fprintf (stderr, "nxagentTransferSelection: Setting stage to [%d] for client [%d].\n",
- SelectionStageWaitSize, lastClientClientPtr -> index);
- #endif
-
- lastClientStage = SelectionStageWaitSize;
+ SetClientSelectionStage(WaitSize);
break;
}
case SelectionStageQueryData:
{
+ PrintClientSelectionStage();
+
/*
* Request the selection data now.
*/
#ifdef DEBUG
- fprintf(stderr, "nxagentTransferSelection: Getting property content from remote server.\n");
+ fprintf(stderr, "%s: Getting property content from remote server.\n", __func__);
#endif
nxagentLastClipboardClient = NXGetCollectPropertyResource(nxagentDisplay);
@@ -610,7 +827,7 @@ void nxagentTransferSelection(int resource)
if (nxagentLastClipboardClient == -1)
{
#ifdef WARNING
- fprintf(stderr, "nxagentTransferSelection: WARNING! Asynchronous GetProperty queue full.\n");
+ fprintf(stderr, "%s: WARNING! Asynchronous GetProperty queue full.\n", __func__);
#endif
result = -1;
@@ -630,32 +847,27 @@ void nxagentTransferSelection(int resource)
if (result == -1)
{
#ifdef DEBUG
- fprintf (stderr, "nxagentTransferSelection: Aborting selection notify procedure for client [%d].\n",
+ fprintf (stderr, "%s: Aborting selection notify procedure for client [%d].\n", __func__,
lastClientClientPtr -> index);
#endif
nxagentSendSelectionNotify(None);
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
+ SetClientSelectionStage(None);
return;
}
- #ifdef DEBUG
- fprintf (stderr, "nxagentTransferSelection: Setting stage to [%d] for client [%d].\n",
- SelectionStageWaitData, lastClientClientPtr -> index);
- #endif
-
- lastClientStage = SelectionStageWaitData;
+ SetClientSelectionStage(WaitData);
break;
}
default:
{
#ifdef DEBUG
- fprintf (stderr, "nxagentTransferSelection: WARNING! Inconsistent state [%d] for client [%d].\n",
- lastClientStage, lastClientClientPtr -> index);
+ fprintf (stderr, "%s: WARNING! Inconsistent state [%s] for client [%d].\n", __func__,
+ GetClientSelectionStageString(lastClientStage), lastClientClientPtr -> index);
#endif
break;
@@ -691,29 +903,23 @@ void nxagentCollectPropertyEvent(int resource)
if (result == 0)
{
#ifdef DEBUG
- fprintf (stderr, "nxagentCollectPropertyEvent: Failed to get reply data for client [%d].\n",
+ fprintf (stderr, "%s: Failed to get reply data for client [%d].\n", __func__,
lastClientClientPtr -> index);
#endif
nxagentSendSelectionNotify(None);
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
-
- if (pszReturnData != NULL)
- {
- XFree(pszReturnData);
- }
+ SetClientSelectionStage(None);
+ SAFE_XFree(pszReturnData);
return;
}
if (resultFormat != 8 && resultFormat != 16 && resultFormat != 32)
{
-
#ifdef DEBUG
- fprintf (stderr, "nxagentCollectPropertyEvent: WARNING! Invalid property "
- "value.\n");
+ fprintf (stderr, "%s: WARNING! Invalid property value.\n", __func__);
#endif
if (lastClientClientPtr != NULL)
@@ -722,13 +928,9 @@ void nxagentCollectPropertyEvent(int resource)
}
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
-
- if (pszReturnData != NULL)
- {
- XFree(pszReturnData);
- }
+ SetClientSelectionStage(None);
+ SAFE_XFree(pszReturnData);
return;
}
@@ -736,33 +938,30 @@ void nxagentCollectPropertyEvent(int resource)
{
case SelectionStageWaitSize:
{
+ PrintClientSelectionStage();
#ifdef DEBUG
- fprintf (stderr, "nxagentCollectPropertyEvent: Got size notify event for client [%d].\n",
+ fprintf (stderr, "%s: Got size notify event for client [%d].\n", __func__,
lastClientClientPtr -> index);
#endif
if (ulReturnBytesLeft == 0)
{
#ifdef DEBUG
- fprintf (stderr, "nxagentCollectPropertyEvent: Aborting selection notify procedure for client [%d].\n",
+ fprintf (stderr, "%s: Aborting selection notify procedure for client [%d].\n", __func__,
lastClientClientPtr -> index);
#endif
nxagentSendSelectionNotify(None);
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
-
- if (pszReturnData != NULL)
- {
- XFree(pszReturnData);
- }
+ SetClientSelectionStage(None);
+ SAFE_XFree(pszReturnData);
return;
}
#ifdef DEBUG
- fprintf(stderr, "nxagentCollectPropertyEvent: Got property size from remote server.\n");
+ fprintf(stderr, "%s: Got property size from remote server.\n", __func__);
#endif
/*
@@ -770,7 +969,7 @@ void nxagentCollectPropertyEvent(int resource)
*/
lastClientPropertySize = ulReturnBytesLeft;
- lastClientStage = SelectionStageQueryData;
+ SetClientSelectionStage(QueryData);
nxagentTransferSelection(resource);
@@ -778,33 +977,30 @@ void nxagentCollectPropertyEvent(int resource)
}
case SelectionStageWaitData:
{
+ PrintClientSelectionStage();
#ifdef DEBUG
- fprintf (stderr, "nxagentCollectPropertyEvent: Got data notify event for client [%d].\n",
+ fprintf (stderr, "%s: Got data notify event for client [%d].\n", __func__,
lastClientClientPtr -> index);
#endif
if (ulReturnBytesLeft != 0)
{
#ifdef DEBUG
- fprintf (stderr, "nxagentCollectPropertyEvent: Aborting selection notify procedure for client [%d].\n",
+ fprintf (stderr, "%s: Aborting selection notify procedure for client [%d].\n", __func__,
lastClientClientPtr -> index);
#endif
nxagentSendSelectionNotify(None);
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
-
- if (pszReturnData != NULL)
- {
- XFree(pszReturnData);
- }
+ SetClientSelectionStage(None);
+ SAFE_XFree(pszReturnData);
return;
}
#ifdef DEBUG
- fprintf(stderr, "nxagentCollectPropertyEvent: Got property content from remote server.\n");
+ fprintf(stderr, "%s: Got property content from remote server.\n", __func__);
#endif
ChangeWindowProperty(lastClientWindowPtr,
@@ -814,7 +1010,7 @@ void nxagentCollectPropertyEvent(int resource)
ulReturnItems, pszReturnData, 1);
#ifdef DEBUG
- fprintf(stderr, "nxagentCollectPropertyEvent: Selection property [%s] changed to [%s]\n",
+ fprintf(stderr, "%s: Selection property [%s] changed to [%s]\n", __func__,
validateString(NameForAtom(lastClientProperty)), pszReturnData);
#endif
@@ -825,33 +1021,30 @@ void nxagentCollectPropertyEvent(int resource)
*/
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
+ SetClientSelectionStage(None);
break;
}
default:
{
#ifdef DEBUG
- fprintf (stderr, "nxagentCollectPropertyEvent: WARNING! Inconsistent state [%d] for client [%d].\n",
- lastClientStage, lastClientClientPtr -> index);
+ fprintf (stderr, "%s: WARNING! Inconsistent state [%s] for client [%d].\n", __func__,
+ GetClientSelectionStageString(lastClientStage), lastClientClientPtr -> index);
#endif
break;
}
}
- XFree(pszReturnData);
- pszReturnData = NULL;
+ SAFE_XFree(pszReturnData);
}
void nxagentNotifySelection(XEvent *X)
{
- int result;
-
XSelectionEvent eventSelection;
#ifdef DEBUG
- fprintf(stderr, "nxagentNotifySelection: Got called.\n");
+ fprintf(stderr, "%s: Got called.\n", __func__);
#endif
if (agentClipboardStatus != 1)
@@ -860,15 +1053,17 @@ void nxagentNotifySelection(XEvent *X)
}
#ifdef DEBUG
- fprintf(stderr, "nxagentNotifySelection: SelectionNotify event.\n");
+ fprintf(stderr, "%s: SelectionNotify event.\n", __func__);
#endif
+ PrintClientSelectionStage();
+
if (lastClientWindowPtr != NULL)
{
if ((lastClientStage == SelectionStageNone) && (X->xselection.property == serverCutProperty))
{
#ifdef DEBUG
- fprintf(stderr, "nxagentNotifySelection: Starting selection transferral for client [%d].\n",
+ fprintf(stderr, "%s: Starting selection transferral for client [%d].\n", __func__,
lastClientClientPtr -> index);
#endif
@@ -883,7 +1078,7 @@ void nxagentNotifySelection(XEvent *X)
* tions.
*/
- lastClientStage = SelectionStageQueryData;
+ SetClientSelectionStage(QueryData);
lastClientPropertySize = 262144;
nxagentTransferSelection(lastClientClientPtr -> index);
@@ -891,14 +1086,14 @@ void nxagentNotifySelection(XEvent *X)
else
{
#ifdef DEBUG
- fprintf(stderr, "nxagentNotifySelection: WARNING! Resetting selection transferral for client [%d].\n",
+ fprintf(stderr, "%s: WARNING! Resetting selection transferral for client [%d].\n", __func__,
lastClientClientPtr -> index);
#endif
nxagentSendSelectionNotify(None);
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
+ SetClientSelectionStage(None);
}
return;
@@ -924,28 +1119,18 @@ void nxagentNotifySelection(XEvent *X)
unsigned long ulReturnBytesLeft;
unsigned char *pszReturnData = NULL;
- result = GetWindowProperty(lastSelectionOwner[i].windowPtr, clientCutProperty, 0, 0, False,
- AnyPropertyType, &atomReturnType, &resultFormat,
- &ulReturnItems, &ulReturnBytesLeft, &pszReturnData);
+ int result = GetWindowProperty(lastSelectionOwner[i].windowPtr, clientCutProperty, 0, 0, False,
+ AnyPropertyType, &atomReturnType, &resultFormat,
+ &ulReturnItems, &ulReturnBytesLeft, &pszReturnData);
+ #ifdef DEBUG
+ fprintf(stderr, "%s: GetWindowProperty() returned [%s]\n", __func__, GetXErrorString(result));
+ #endif
if (result == BadAlloc || result == BadAtom ||
- result == BadMatch || result == BadValue ||
- result == BadWindow)
+ result == BadWindow || result == BadValue)
{
- fprintf (stderr, "Client GetProperty failed error =");
+ fprintf (stderr, "Client GetProperty failed. Error = %s", GetXErrorString(result));
lastServerProperty = None;
- switch (result)
- {
- case BadAtom:
- fprintf (stderr, "BadAtom\n");
- break;
- case BadValue:
- fprintf (stderr, "BadValue\n");
- break;
- case BadWindow:
- fprintf (stderr, "BadWindow\n");
- break;
- }
}
else
{
@@ -953,13 +1138,14 @@ void nxagentNotifySelection(XEvent *X)
ulReturnBytesLeft, False, AnyPropertyType, &atomReturnType,
&resultFormat, &ulReturnItems, &ulReturnBytesLeft,
&pszReturnData);
+ #ifdef DEBUG
+ fprintf(stderr, "%s: GetWindowProperty() returned [%s]\n", __func__, GetXErrorString(result));
+ #endif
if (result == BadAlloc || result == BadAtom ||
- result == BadMatch || result == BadValue ||
- result == BadWindow)
+ result == BadWindow || result == BadValue)
{
- fprintf (stderr, "SelectionNotify - XChangeProperty failed\n");
-
+ fprintf (stderr, "SelectionNotify - XChangeProperty failed. Error = %s\n", GetXErrorString(result));
lastServerProperty = None;
}
else
@@ -973,10 +1159,12 @@ void nxagentNotifySelection(XEvent *X)
pszReturnData,
ulReturnItems);
}
+ #ifdef DEBUG
+ fprintf(stderr, "%s: XChangeProperty() returned [%s]\n", __func__, GetXErrorString(result));
+ #endif
/*
- * XFree(pszReturnData);
- * pszReturnData=NULL;
+ * SAFE_XFree(pszReturnData);
*/
}
@@ -1003,7 +1191,7 @@ void nxagentNotifySelection(XEvent *X)
*/
#ifdef DEBUG
- fprintf(stderr, "nxagentNotifySelection: Sending event to requestor.\n");
+ fprintf(stderr, "%s: Sending event to requestor [%p].\n", __func__, (void *)eventSelection.requestor);
#endif
result = XSendEvent(nxagentDisplay,
@@ -1012,6 +1200,9 @@ void nxagentNotifySelection(XEvent *X)
0L,
(XEvent *) &eventSelection);
+ #ifdef DEBUG
+ fprintf(stderr, "%s: XSendEvent() returned [%s]\n", __func__, GetXErrorString(result));
+ #endif
if (result == BadValue || result == BadWindow)
{
fprintf (stderr, "SelectionRequest - XSendEvent failed\n");
@@ -1035,8 +1226,8 @@ void nxagentResetSelectionOwner(void)
if (lastServerRequestor != None)
{
#ifdef TEST
- fprintf (stderr, "nxagentResetSelectionOwner: WARNING! Requestor window [0x%lx] already found.\n",
- lastServerRequestor);
+ fprintf(stderr, "%s: WARNING! Requestor window [0x%x] already found.\n", __func__,
+ lastServerRequestor);
#endif
return;
@@ -1050,7 +1241,7 @@ void nxagentResetSelectionOwner(void)
{
XSetSelectionOwner(nxagentDisplay, lastSelectionOwner[i].selection, serverWindow, CurrentTime);
- fprintf (stderr, "nxagentResetSelectionOwner: Reset clipboard state.\n");
+ fprintf(stderr, "%s: Reset clipboard state.\n", __func__);
lastSelectionOwner[i].client = NULL;
lastSelectionOwner[i].window = None;
@@ -1059,7 +1250,7 @@ void nxagentResetSelectionOwner(void)
}
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
+ SetClientSelectionStage(None);
lastServerRequestor = None;
@@ -1070,7 +1261,7 @@ void nxagentSetSelectionOwner(Selection *pSelection)
{
int i;
#ifdef DEBUG
- fprintf(stderr, "nxagentSetSelectionOwner: Got called.\n");
+ fprintf(stderr, "%s: Got called.\n", __func__);
#endif
if (agentClipboardStatus != 1)
@@ -1079,14 +1270,14 @@ void nxagentSetSelectionOwner(Selection *pSelection)
}
#ifdef DEBUG
- fprintf(stderr, "nxagentSetSelectionOwner: Setting selection owner to window [0x%lx].\n",
+ fprintf(stderr, "%s: Setting selection owner to window [0x%x].\n", __func__,
serverWindow);
#endif
#ifdef TEST
if (lastServerRequestor != None)
{
- fprintf (stderr, "nxagentSetSelectionOwner: WARNING! Requestor window [0x%lx] already found.\n",
+ fprintf (stderr, "%s: WARNING! Requestor window [0x%x] already found.\n", __func__,
lastServerRequestor);
}
#endif
@@ -1109,7 +1300,7 @@ void nxagentSetSelectionOwner(Selection *pSelection)
}
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
+ SetClientSelectionStage(None);
lastServerRequestor = None;
@@ -1118,7 +1309,7 @@ FIXME
if (XGetSelectionOwner(nxagentDisplay,pSelection->selection)==serverWindow)
{
- fprintf (stderr, "NXdispatch: SetSelectionOwner OK\n");
+ fprintf (stderr, "%s: SetSelectionOwner OK\n", __func__);
lastSelectionOwnerSelection = pSelection;
lastSelectionOwnerClient = pSelection->client;
@@ -1126,11 +1317,11 @@ FIXME
lastSelectionOwnerWindowPtr = pSelection->pWin;
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
+ SetClientSelectionStage(None);
lastServerRequestor = None;
}
- else fprintf (stderr, "nxagentSetSelectionOwner: SetSelectionOwner failed\n");
+ else fprintf (stderr, "%s: SetSelectionOwner failed\n", __func__);
*/
}
@@ -1146,7 +1337,7 @@ FIXME: Why this pointer can be not a valid
if (clients[client -> index] != client)
{
#ifdef WARNING
- fprintf(stderr, "nxagentNotifyConvertFailure: WARNING! Invalid client pointer.");
+ fprintf(stderr, "%s: WARNING! Invalid client pointer.", __func__);
#endif
return;
@@ -1196,27 +1387,27 @@ int nxagentConvertSelection(ClientPtr client, WindowPtr pWin, Atom selection,
if (lastClientWindowPtr != NULL)
{
#ifdef TEST
- fprintf(stderr, "nxagentConvertSelection: lastClientWindowPtr != NULL.\n");
+ fprintf(stderr, "%s: lastClientWindowPtr != NULL.\n", __func__);
#endif
if ((GetTimeInMillis() - lastClientReqTime) > 5000)
{
#ifdef DEBUG
- fprintf(stderr, "nxagentConvertSelection: timeout expired on last request, "
- "notifying failure to client\n");
+ fprintf(stderr, "%s: timeout expired on last request, "
+ "notifying failure to client\n", __func__);
#endif
nxagentNotifyConvertFailure(lastClientClientPtr, lastClientRequestor,
lastClientSelection, lastClientTarget, lastClientTime);
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
+ SetClientSelectionStage(None);
}
else
{
#ifdef DEBUG
- fprintf(stderr, "nxagentConvertSelection: got request "
- "before timeout expired on last request, notifying failure to client\n");
+ fprintf(stderr, "%s: got request "
+ "before timeout expired on last request, notifying failure to client\n", __func__);
#endif
nxagentNotifyConvertFailure(client, requestor, selection, target, time);
@@ -1226,8 +1417,8 @@ int nxagentConvertSelection(ClientPtr client, WindowPtr pWin, Atom selection,
}
#ifdef TEST
- fprintf(stderr, "nxagentConvertSelection: client [%d] ask for sel [%s] "
- "on window [%lx] prop [%s] target [%s].\n",
+ fprintf(stderr, "%s: client [%d] ask for sel [%s] "
+ "on window [%x] prop [%s] target [%s].\n", __func__,
client -> index, validateString(NameForAtom(selection)), requestor,
validateString(NameForAtom(property)), validateString(NameForAtom(target)));
#endif
@@ -1274,7 +1465,6 @@ int nxagentConvertSelection(ClientPtr client, WindowPtr pWin, Atom selection,
if (target == MakeAtom("TIMESTAMP", 9, 1))
{
- xEvent x;
int i = 0;
while ((i < NumCurrentSelections) &&
@@ -1282,6 +1472,7 @@ int nxagentConvertSelection(ClientPtr client, WindowPtr pWin, Atom selection,
if (i < NumCurrentSelections)
{
+ xEvent x;
ChangeWindowProperty(pWin,
property,
target,
@@ -1316,8 +1507,8 @@ int nxagentConvertSelection(ClientPtr client, WindowPtr pWin, Atom selection,
*/
#ifdef DEBUG
- fprintf(stderr, "nxagentConvertSelection: Consecutives request from client [%p] selection [%ld] "
- "elapsed time [%lu] clientAccum [%d]\n", (void *) client, selection,
+ fprintf(stderr, "%s: Consecutives request from client [%p] selection [%u] "
+ "elapsed time [%u] clientAccum [%d]\n", __func__, (void *) client, selection,
GetTimeInMillis() - lastClientReqTime, clientAccum);
#endif
@@ -1337,7 +1528,7 @@ int nxagentConvertSelection(ClientPtr client, WindowPtr pWin, Atom selection,
(target == clientUTF8_STRING))
{
lastClientWindowPtr = pWin;
- lastClientStage = SelectionStageNone;
+ SetClientSelectionStage(None);
lastClientRequestor = requestor;
lastClientClientPtr = client;
lastClientTime = time;
@@ -1365,7 +1556,7 @@ int nxagentConvertSelection(ClientPtr client, WindowPtr pWin, Atom selection,
}
#ifdef DEBUG
- fprintf(stderr, "nxagentConvertSelection: Sent XConvertSelection with target=[%s], property [%s]\n",
+ fprintf(stderr, "%s: Sent XConvertSelection with target=[%s], property [%s]\n", __func__,
validateString(NameForAtom(target)), validateString(NameForAtom(property)));
#endif
@@ -1376,8 +1567,8 @@ int nxagentConvertSelection(ClientPtr client, WindowPtr pWin, Atom selection,
xEvent x;
#ifdef DEBUG
- fprintf(stderr, "nxagentConvertSelection: Xserver generates a SelectionNotify event "
- "to the requestor with property None.\n");
+ fprintf(stderr, "%s: Xserver generates a SelectionNotify event "
+ "to the requestor with property None.\n", __func__);
#endif
memset(&x, 0, sizeof(xEvent));
@@ -1396,14 +1587,21 @@ int nxagentConvertSelection(ClientPtr client, WindowPtr pWin, Atom selection,
int nxagentSendNotify(xEvent *event)
{
#ifdef DEBUG
- fprintf(stderr, "nxagentSendNotify: Got called.\n");
+ fprintf(stderr, "%s: Got called.\n", __func__);
#endif
if (agentClipboardStatus != 1)
{
+ #ifdef DEBUG
+ fprintf(stderr, "%s: agentClipboardStatus != 1 - doing nothing.\n", __func__);
+ #endif
return 0;
}
+ #ifdef DEBUG
+ fprintf(stderr, "%s: property is [%d][%s].\n", __func__, event->u.selectionNotify.property, NameForAtom(event->u.selectionNotify.property));
+ #endif
+
if (event->u.selectionNotify.property == clientCutProperty)
{
XSelectionEvent x;
@@ -1438,20 +1636,25 @@ int nxagentSendNotify(xEvent *event)
x.time = CurrentTime;
#ifdef DEBUG
- fprintf(stderr, "nxagentSendNotify: Propagating clientCutProperty.\n");
+ fprintf(stderr, "%s: Propagating clientCutProperty to requestor [%p].\n", __func__, (void *)x.requestor);
#endif
result = XSendEvent (nxagentDisplay, x.requestor, False,
0L, (XEvent *) &x);
+ #ifdef DEBUG
+ fprintf(stderr, "%s: XSendEvent() returned [%s]\n", __func__, GetXErrorString(result));
+ #endif
if (result == BadValue || result == BadWindow)
{
- fprintf (stderr, "nxagentSendNotify: XSendEvent failed.\n");
+ fprintf (stderr, "%s: XSendEvent failed.\n", __func__);
}
return 1;
}
-
+ #ifdef DEBUG
+ fprintf(stderr, "%s: sent nothing.\n", __func__);
+ #endif
return 0;
}
@@ -1460,7 +1663,7 @@ WindowPtr nxagentGetClipboardWindow(Atom property, WindowPtr pWin)
int i = 0;
#ifdef DEBUG
- fprintf(stderr, "nxagentGetClipboardWindow: Got called.\n");
+ fprintf(stderr, "%s: Got called, property [%d][%s] window [%p].\n", __func__, property, NameForAtom(property), (void *)pWin);
#endif
while ((i < nxagentMaxSelections) &&
@@ -1473,7 +1676,7 @@ WindowPtr nxagentGetClipboardWindow(Atom property, WindowPtr pWin)
(lastSelectionOwner[i].windowPtr != NULL))
{
#ifdef DEBUG
- fprintf(stderr, "nxagentGetClipboardWindow: Returning last clipboard owner window.\n");
+ fprintf(stderr, "%s: Returning last clipboard owner window [%p].\n", __func__, (void *)lastSelectionOwner[i].windowPtr);
#endif
return lastSelectionOwner[i].windowPtr;
@@ -1481,7 +1684,7 @@ WindowPtr nxagentGetClipboardWindow(Atom property, WindowPtr pWin)
else
{
#ifdef DEBUG
- fprintf(stderr, "nxagentGetClipboardWindow: Returning original target window.\n");
+ fprintf(stderr, "%s: Returning original target window [%p].\n", __func__, (void *)pWin);
#endif
return pWin;
@@ -1495,13 +1698,13 @@ int nxagentInitClipboard(WindowPtr pWin)
Window iWindow = nxagentWindow(pWin);
#ifdef DEBUG
- fprintf(stderr, "nxagentInitClipboard: Got called.\n");
+ fprintf(stderr, "%s: Got called.\n", __func__);
#endif
free(lastSelectionOwner);
lastSelectionOwner = NULL;
- lastSelectionOwner = (SelectionOwner *) malloc(2 * sizeof(SelectionOwner));
+ lastSelectionOwner = (SelectionOwner *) malloc(nxagentMaxSelections * sizeof(SelectionOwner));
if (lastSelectionOwner == NULL)
{
@@ -1527,7 +1730,7 @@ int nxagentInitClipboard(WindowPtr pWin)
{
extern unsigned long startTime;
- fprintf(stderr, "nxagentInitClipboard: Initializing start [%d] milliseconds.\n",
+ fprintf(stderr, "%s: Initializing start [%d] milliseconds.\n", __func__,
GetTimeInMillis() - startTime);
}
#endif
@@ -1547,14 +1750,14 @@ int nxagentInitClipboard(WindowPtr pWin)
if (serverCutProperty == None)
{
#ifdef PANIC
- fprintf(stderr, "nxagentInitClipboard: PANIC! Could not create NX_CUT_BUFFER_SERVER atom\n");
+ fprintf(stderr, "%s: PANIC! Could not create NX_CUT_BUFFER_SERVER atom\n", __func__);
#endif
return -1;
}
#ifdef TEST
- fprintf(stderr, "nxagentInitClipboard: Setting owner of selection [%s][%d] on window 0x%lx\n",
+ fprintf(stderr, "%s: Setting owner of selection [%s][%d] on window 0x%x\n", __func__,
"NX_CUT_BUFFER_SERVER", (int) serverCutProperty, iWindow);
#endif
@@ -1568,11 +1771,10 @@ int nxagentInitClipboard(WindowPtr pWin)
{
ErrorF("Unable to initialize XFixes extension.\n");
}
-
else
{
#ifdef TEST
- fprintf(stderr, "nxagentInitClipboard: Registering for XFixesSelectionNotify events.\n");
+ fprintf(stderr, "%s: Registering for XFixesSelectionNotify events.\n", __func__);
#endif
for (i = 0; i < nxagentMaxSelections; i++)
@@ -1598,8 +1800,8 @@ int nxagentInitClipboard(WindowPtr pWin)
if (nxagentSessionId[0])
{
#ifdef TEST
- fprintf(stderr, "nxagentInitClipboard: setting the ownership of %s to %lx"
- " and registering for PropertyChangeMask events\n",
+ fprintf(stderr, "%s: setting the ownership of %s to %lx"
+ " and registering for PropertyChangeMask events\n", __func__,
validateString(XGetAtomName(nxagentDisplay, nxagentAtoms[10])), iWindow);
#endif
@@ -1631,7 +1833,7 @@ int nxagentInitClipboard(WindowPtr pWin)
lastServerRequestor = None;
lastClientWindowPtr = NULL;
- lastClientStage = SelectionStageNone;
+ SetClientSelectionStage(None);
lastClientReqTime = GetTimeInMillis();
clientCutProperty = MakeAtom(szAgentNX_CUT_BUFFER_CLIENT,
@@ -1644,8 +1846,8 @@ int nxagentInitClipboard(WindowPtr pWin)
if (clientCutProperty == None)
{
#ifdef PANIC
- fprintf(stderr, "nxagentInitClipboard: PANIC! "
- "Could not create NX_CUT_BUFFER_CLIENT atom.\n");
+ fprintf(stderr, "%s: PANIC! "
+ "Could not create NX_CUT_BUFFER_CLIENT atom.\n", __func__);
#endif
return -1;
@@ -1655,18 +1857,17 @@ int nxagentInitClipboard(WindowPtr pWin)
agentClipboardStatus = 1;
#ifdef DEBUG
- fprintf(stderr, "nxagentInitClipboard: Clipboard initialization completed.\n");
+ fprintf(stderr, "%s: Clipboard initialization completed.\n", __func__);
#endif
#ifdef NXAGENT_TIMESTAMP
{
extern unsigned long startTime;
- fprintf(stderr, "nxagentInitClipboard: initializing ends [%d] milliseconds.\n",
+ fprintf(stderr, "%s: initializing ends [%d] milliseconds.\n", __func__,
GetTimeInMillis() - startTime);
}
#endif
return 1;
}
-
diff --git a/nx-X11/programs/Xserver/hw/nxagent/NXproperty.c b/nx-X11/programs/Xserver/hw/nxagent/NXproperty.c
index 6292b3508..9d8a46c4f 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/NXproperty.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/NXproperty.c
@@ -88,6 +88,11 @@ typedef struct
nxagentWMStateRec;
#endif
+#define PANIC
+#define WARNING
+#undef TEST
+#undef DEBUG
+
int
ProcChangeProperty(ClientPtr client)
{
@@ -563,15 +568,25 @@ GetWindowProperty(pWin, property, longOffset, longLength, delete,
unsigned long n, len, ind;
if (!pWin)
+ {
+#ifdef DEBUG
+ fprintf(stderr, "%s: invalid window\n", __func__);
+#endif
return BadWindow;
-
+ }
if (!ValidAtom(property))
{
+#ifdef DEBUG
+ fprintf(stderr, "%s: invalid atom [%d]\n", __func__, property);
+#endif
return(BadAtom);
}
if ((type != AnyPropertyType) && !ValidAtom(type))
{
+#ifdef DEBUG
+ fprintf(stderr, "%s: invalid type [%d]\n", __func__, type);
+#endif
return(BadAtom);
}
@@ -588,7 +603,12 @@ GetWindowProperty(pWin, property, longOffset, longLength, delete,
if (!pProp)
+ {
+#ifdef DEBUG
+ fprintf(stderr, "%s: property not found [%d]\n", __func__, property);
+#endif
return (BadAtom);
+ }
/* If the request type and actual type don't match. Return the
property information, but not the data. */
@@ -615,6 +635,9 @@ GetWindowProperty(pWin, property, longOffset, longLength, delete,
if (n < ind)
{
+#ifdef DEBUG
+ fprintf(stderr, "%s: negative property len\n", __func__);
+#endif
return BadValue;
}
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Utils.h b/nx-X11/programs/Xserver/hw/nxagent/Utils.h
index 63904e23b..c0ad03345 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Utils.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Utils.h
@@ -44,4 +44,6 @@ static inline const char * validateString(const char *str) {
return str ? str : "(null)";
}
+#define SAFE_XFree(what) do {if (what) {XFree(what); what = NULL;}} while (0)
+
#endif /* __Utils_H__ */