Commit bc997cf6 authored by Ulrich Sibiller's avatar Ulrich Sibiller Committed by Mike Gabriel

Clipboard.c: introduce central function to abort the transfer

parent f14e8007
...@@ -202,6 +202,9 @@ extern Display *nxagentDisplay; ...@@ -202,6 +202,9 @@ extern Display *nxagentDisplay;
Bool nxagentValidServerTargets(Atom target); Bool nxagentValidServerTargets(Atom target);
void nxagentSendSelectionNotify(Atom property); void nxagentSendSelectionNotify(Atom property);
static void endTransfer(Bool success);
#define SELECTION_SUCCESS True
#define SELECTION_FAULT False
void nxagentTransferSelection(int resource); void nxagentTransferSelection(int resource);
void nxagentCollectPropertyEvent(int resource); void nxagentCollectPropertyEvent(int resource);
void nxagentResetSelectionOwner(void); void nxagentResetSelectionOwner(void);
...@@ -745,6 +748,30 @@ void nxagentSendSelectionNotify(Atom property) ...@@ -745,6 +748,30 @@ void nxagentSendSelectionNotify(Atom property)
return; return;
} }
/*
* client and resetting the corresponding variables and the state
* machine. If success is False send a None reply, meaning "request
* denied/failed"
* Use SELECTION_SUCCESS and SELECTION_FAULT macros for success.
*/
static void endTransfer(Bool success)
{
if (success == SELECTION_SUCCESS)
{
nxagentSendSelectionNotify(lastClientProperty);
}
else
{
nxagentSendSelectionNotify(None);
}
/*
* Enable further requests from clients.
*/
lastClientWindowPtr = NULL;
SetClientSelectionStage(None);
}
void nxagentTransferSelection(int resource) void nxagentTransferSelection(int resource)
{ {
int result; int result;
...@@ -756,10 +783,7 @@ void nxagentTransferSelection(int resource) ...@@ -756,10 +783,7 @@ void nxagentTransferSelection(int resource)
resource, lastClientClientPtr -> index); resource, lastClientClientPtr -> index);
#endif #endif
nxagentSendSelectionNotify(None); endTransfer(SELECTION_FAULT);
lastClientWindowPtr = NULL;
SetClientSelectionStage(None);
return; return;
} }
...@@ -804,10 +828,7 @@ void nxagentTransferSelection(int resource) ...@@ -804,10 +828,7 @@ void nxagentTransferSelection(int resource)
lastClientClientPtr -> index); lastClientClientPtr -> index);
#endif #endif
nxagentSendSelectionNotify(None); endTransfer(SELECTION_FAULT);
lastClientWindowPtr = NULL;
SetClientSelectionStage(None);
return; return;
} }
...@@ -857,10 +878,7 @@ void nxagentTransferSelection(int resource) ...@@ -857,10 +878,7 @@ void nxagentTransferSelection(int resource)
lastClientClientPtr -> index); lastClientClientPtr -> index);
#endif #endif
nxagentSendSelectionNotify(None); endTransfer(SELECTION_FAULT);
lastClientWindowPtr = NULL;
SetClientSelectionStage(None);
return; return;
} }
...@@ -913,10 +931,7 @@ void nxagentCollectPropertyEvent(int resource) ...@@ -913,10 +931,7 @@ void nxagentCollectPropertyEvent(int resource)
lastClientClientPtr -> index); lastClientClientPtr -> index);
#endif #endif
nxagentSendSelectionNotify(None); endTransfer(SELECTION_FAULT);
lastClientWindowPtr = NULL;
SetClientSelectionStage(None);
SAFE_XFree(pszReturnData); SAFE_XFree(pszReturnData);
return; return;
...@@ -928,10 +943,7 @@ void nxagentCollectPropertyEvent(int resource) ...@@ -928,10 +943,7 @@ void nxagentCollectPropertyEvent(int resource)
fprintf (stderr, "%s: WARNING! Invalid property value.\n", __func__); fprintf (stderr, "%s: WARNING! Invalid property value.\n", __func__);
#endif #endif
nxagentSendSelectionNotify(None); endTransfer(SELECTION_FAULT);
lastClientWindowPtr = NULL;
SetClientSelectionStage(None);
SAFE_XFree(pszReturnData); SAFE_XFree(pszReturnData);
return; return;
...@@ -954,10 +966,7 @@ void nxagentCollectPropertyEvent(int resource) ...@@ -954,10 +966,7 @@ void nxagentCollectPropertyEvent(int resource)
lastClientClientPtr -> index); lastClientClientPtr -> index);
#endif #endif
nxagentSendSelectionNotify(None); endTransfer(SELECTION_FAULT);
lastClientWindowPtr = NULL;
SetClientSelectionStage(None);
SAFE_XFree(pszReturnData); SAFE_XFree(pszReturnData);
return; return;
...@@ -993,10 +1002,7 @@ void nxagentCollectPropertyEvent(int resource) ...@@ -993,10 +1002,7 @@ void nxagentCollectPropertyEvent(int resource)
lastClientClientPtr -> index); lastClientClientPtr -> index);
#endif #endif
nxagentSendSelectionNotify(None); endTransfer(SELECTION_FAULT);
lastClientWindowPtr = NULL;
SetClientSelectionStage(None);
SAFE_XFree(pszReturnData); SAFE_XFree(pszReturnData);
return; return;
...@@ -1017,14 +1023,7 @@ void nxagentCollectPropertyEvent(int resource) ...@@ -1017,14 +1023,7 @@ void nxagentCollectPropertyEvent(int resource)
validateString(NameForAtom(lastClientProperty)), pszReturnData); validateString(NameForAtom(lastClientProperty)), pszReturnData);
#endif #endif
nxagentSendSelectionNotify(lastClientProperty); endTransfer(SELECTION_SUCCESS);
/*
* Enable further requests from clients.
*/
lastClientWindowPtr = NULL;
SetClientSelectionStage(None);
break; break;
} }
...@@ -1093,10 +1092,7 @@ void nxagentNotifySelection(XEvent *X) ...@@ -1093,10 +1092,7 @@ void nxagentNotifySelection(XEvent *X)
lastClientClientPtr -> index); lastClientClientPtr -> index);
#endif #endif
nxagentSendSelectionNotify(None); endTransfer(SELECTION_FAULT);
lastClientWindowPtr = NULL;
SetClientSelectionStage(None);
} }
return; return;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment