diff options
Diffstat (limited to 'nx-X11/programs/Xserver/hw/nxagent')
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Clipboard.c | 107 |
1 files changed, 59 insertions, 48 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c index 3c46ec34c..0b78c2f05 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c @@ -140,6 +140,30 @@ 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 + +/* * Save the values queried from X server. */ @@ -203,17 +227,7 @@ void nxagentPrintClipboardStat(char *header) 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]", lastClientStage); - switch(lastClientStage) - { - case SelectionStageNone: fprintf(stderr, "[None]"); break;; - case SelectionStageQuerySize: fprintf(stderr, "[QuerySize]"); break;; - case SelectionStageWaitSize: fprintf(stderr, "[WaitSize]"); break;; - case SelectionStageQueryData: fprintf(stderr, "[QueryData]"); break;; - case SelectionStageWaitData: fprintf(stderr, "[WaitData]"); break;; - default: fprintf(stderr, "[UNKNOWN] (FAIL!)"); break;; - } - fprintf(stderr,"\n"); + fprintf(stderr, " lastClientStage (ClientSelectionStage) [%d][%s]\n", lastClientStage, GetClientSelectionStageString(lastClientStage)); fprintf(stderr, "PRIMARY\n"); fprintf(stderr, " lastSelectionOwner[].client [%p]\n", (void *)lastSelectionOwner[nxagentPrimarySelection].client); @@ -338,7 +352,7 @@ void nxagentClearClipboard(ClientPtr pClient, WindowPtr pWindow) lastSelectionOwner[i].lastTimeChanged = GetTimeInMillis(); lastClientWindowPtr = NULL; - lastClientStage = SelectionStageNone; + SetClientSelectionStage(None); lastServerRequestor = None; } @@ -347,7 +361,7 @@ void nxagentClearClipboard(ClientPtr pClient, WindowPtr pWindow) if (pWindow == lastClientWindowPtr) { lastClientWindowPtr = NULL; - lastClientStage = SelectionStageNone; + SetClientSelectionStage(None); } nxagentPrintClipboardStat("after nxagentClearClipboard"); @@ -404,7 +418,7 @@ void nxagentClearSelection(XEvent *X) } lastClientWindowPtr = NULL; - lastClientStage = SelectionStageNone; + SetClientSelectionStage(None); nxagentPrintClipboardStat("after nxagentClearSelection"); } @@ -600,7 +614,7 @@ FIXME: Do we need this? else { /* - * Probably we must to send a Notify + * Probably we must send a Notify * to requestor with property None. */ @@ -670,7 +684,7 @@ void nxagentTransferSelection(int resource) nxagentSendSelectionNotify(None); lastClientWindowPtr = NULL; - lastClientStage = SelectionStageNone; + SetClientSelectionStage(None); return; } @@ -679,6 +693,7 @@ void nxagentTransferSelection(int resource) { case SelectionStageQuerySize: { + PrintClientSelectionStage(); /* * Don't get data yet, just get size. We skip * this stage in current implementation and @@ -717,22 +732,19 @@ void nxagentTransferSelection(int resource) 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. */ @@ -773,25 +785,20 @@ void nxagentTransferSelection(int resource) 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, "nxagentTransferSelection: WARNING! Inconsistent state [%s] for client [%d].\n", + GetClientSelectionStageString(lastClientStage), lastClientClientPtr -> index); #endif break; @@ -834,7 +841,7 @@ void nxagentCollectPropertyEvent(int resource) nxagentSendSelectionNotify(None); lastClientWindowPtr = NULL; - lastClientStage = SelectionStageNone; + SetClientSelectionStage(None); if (pszReturnData != NULL) { @@ -858,7 +865,7 @@ void nxagentCollectPropertyEvent(int resource) } lastClientWindowPtr = NULL; - lastClientStage = SelectionStageNone; + SetClientSelectionStage(None); if (pszReturnData != NULL) { @@ -872,6 +879,7 @@ void nxagentCollectPropertyEvent(int resource) { case SelectionStageWaitSize: { + PrintClientSelectionStage(); #ifdef DEBUG fprintf (stderr, "nxagentCollectPropertyEvent: Got size notify event for client [%d].\n", lastClientClientPtr -> index); @@ -887,7 +895,7 @@ void nxagentCollectPropertyEvent(int resource) nxagentSendSelectionNotify(None); lastClientWindowPtr = NULL; - lastClientStage = SelectionStageNone; + SetClientSelectionStage(None); if (pszReturnData != NULL) { @@ -906,7 +914,7 @@ void nxagentCollectPropertyEvent(int resource) */ lastClientPropertySize = ulReturnBytesLeft; - lastClientStage = SelectionStageQueryData; + SetClientSelectionStage(QueryData); nxagentTransferSelection(resource); @@ -914,6 +922,7 @@ void nxagentCollectPropertyEvent(int resource) } case SelectionStageWaitData: { + PrintClientSelectionStage(); #ifdef DEBUG fprintf (stderr, "nxagentCollectPropertyEvent: Got data notify event for client [%d].\n", lastClientClientPtr -> index); @@ -929,7 +938,7 @@ void nxagentCollectPropertyEvent(int resource) nxagentSendSelectionNotify(None); lastClientWindowPtr = NULL; - lastClientStage = SelectionStageNone; + SetClientSelectionStage(None); if (pszReturnData != NULL) { @@ -961,15 +970,15 @@ 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, "nxagentCollectPropertyEvent: WARNING! Inconsistent state [%s] for client [%d].\n", + GetClientSelectionStageString(lastClientStage), lastClientClientPtr -> index); #endif break; @@ -999,6 +1008,8 @@ void nxagentNotifySelection(XEvent *X) fprintf(stderr, "nxagentNotifySelection: SelectionNotify event.\n"); #endif + PrintClientSelectionStage(); + if (lastClientWindowPtr != NULL) { if ((lastClientStage == SelectionStageNone) && (X->xselection.property == serverCutProperty)) @@ -1019,7 +1030,7 @@ void nxagentNotifySelection(XEvent *X) * tions. */ - lastClientStage = SelectionStageQueryData; + SetClientSelectionStage(QueryData); lastClientPropertySize = 262144; nxagentTransferSelection(lastClientClientPtr -> index); @@ -1034,7 +1045,7 @@ void nxagentNotifySelection(XEvent *X) nxagentSendSelectionNotify(None); lastClientWindowPtr = NULL; - lastClientStage = SelectionStageNone; + SetClientSelectionStage(None); } return; @@ -1195,7 +1206,7 @@ void nxagentResetSelectionOwner(void) } lastClientWindowPtr = NULL; - lastClientStage = SelectionStageNone; + SetClientSelectionStage(None); lastServerRequestor = None; @@ -1245,7 +1256,7 @@ void nxagentSetSelectionOwner(Selection *pSelection) } lastClientWindowPtr = NULL; - lastClientStage = SelectionStageNone; + SetClientSelectionStage(None); lastServerRequestor = None; @@ -1262,7 +1273,7 @@ FIXME lastSelectionOwnerWindowPtr = pSelection->pWin; lastClientWindowPtr = NULL; - lastClientStage = SelectionStageNone; + SetClientSelectionStage(None); lastServerRequestor = None; } @@ -1346,7 +1357,7 @@ int nxagentConvertSelection(ClientPtr client, WindowPtr pWin, Atom selection, lastClientSelection, lastClientTarget, lastClientTime); lastClientWindowPtr = NULL; - lastClientStage = SelectionStageNone; + SetClientSelectionStage(None); } else { @@ -1473,7 +1484,7 @@ int nxagentConvertSelection(ClientPtr client, WindowPtr pWin, Atom selection, (target == clientUTF8_STRING)) { lastClientWindowPtr = pWin; - lastClientStage = SelectionStageNone; + SetClientSelectionStage(None); lastClientRequestor = requestor; lastClientClientPtr = client; lastClientTime = time; @@ -1767,7 +1778,7 @@ int nxagentInitClipboard(WindowPtr pWin) lastServerRequestor = None; lastClientWindowPtr = NULL; - lastClientStage = SelectionStageNone; + SetClientSelectionStage(None); lastClientReqTime = GetTimeInMillis(); clientCutProperty = MakeAtom(szAgentNX_CUT_BUFFER_CLIENT, |