aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Clipboard.c166
1 files changed, 82 insertions, 84 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
index 503f42add..0f94fac46 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
@@ -1257,106 +1257,104 @@ void nxagentHandleSelectionRequestFromXServer(XEvent *X)
*/
serverLastRequestedSelection = X->xselectionrequest.selection;
+ if (!(nxagentOption(Clipboard) == ClipboardServer ||
+ nxagentOption(Clipboard) == ClipboardBoth))
{
- if (!(nxagentOption(Clipboard) == ClipboardServer ||
- nxagentOption(Clipboard) == ClipboardBoth))
- {
- #ifdef DEBUG
- fprintf (stderr, "%s: clipboard (partly) disabled - denying request.\n", __func__);
- #endif
+ #ifdef DEBUG
+ fprintf (stderr, "%s: clipboard (partly) disabled - denying request.\n", __func__);
+ #endif
- /* deny the request */
- replyRequestSelectionToXServer(X, False);
- return;
- }
+ /* deny the request */
+ replyRequestSelectionToXServer(X, False);
+ return;
+ }
+ /*
+ * If one of our clients owns the selection we ask it to copy
+ * the selection to the clientCutProperty on nxagent's root
+ * window in the first step. We then later push that property's
+ * content to the real X server.
+ */
+ if (IS_LOCAL_OWNER(index))
+ {
/*
- * If one of our clients owns the selection we ask it to copy
- * the selection to the clientCutProperty on nxagent's root
- * window in the first step. We then later push that property's
- * content to the real X server.
+ * Store who on the real X server requested the data and how
+ * and where it wants to have it.
*/
- if (IS_LOCAL_OWNER(index))
- {
- /*
- * Store who on the real X server requested the data and how
- * and where it wants to have it.
- */
- lastServers[index].property = X->xselectionrequest.property;
- lastServers[index].requestor = X->xselectionrequest.requestor;
- lastServers[index].target = X->xselectionrequest.target;
- lastServers[index].time = X->xselectionrequest.time;
-
- /* Prepare the request (like XConvertSelection, but locally). */
- xEvent x = {0};
- x.u.u.type = SelectionRequest;
- x.u.selectionRequest.time = GetTimeInMillis();
- x.u.selectionRequest.owner = lastSelectionOwner[index].window;
- x.u.selectionRequest.selection = CurrentSelections[index].selection;
- x.u.selectionRequest.property = clientCutProperty;
- x.u.selectionRequest.requestor = screenInfo.screens[0]->root->drawable.id; /* Fictitious window.*/
+ lastServers[index].property = X->xselectionrequest.property;
+ lastServers[index].requestor = X->xselectionrequest.requestor;
+ lastServers[index].target = X->xselectionrequest.target;
+ lastServers[index].time = X->xselectionrequest.time;
+
+ /* Prepare the request (like XConvertSelection, but locally). */
+ xEvent x = {0};
+ x.u.u.type = SelectionRequest;
+ x.u.selectionRequest.time = GetTimeInMillis();
+ x.u.selectionRequest.owner = lastSelectionOwner[index].window;
+ x.u.selectionRequest.selection = CurrentSelections[index].selection;
+ x.u.selectionRequest.property = clientCutProperty;
+ x.u.selectionRequest.requestor = screenInfo.screens[0]->root->drawable.id; /* Fictitious window.*/
- /*
- * Don't send the same window, some programs are clever and
- * verify cut and paste operations inside the same window and
- * don't notify at all.
- *
- * x.u.selectionRequest.requestor = lastSelectionOwner[index].window;
- */
+ /*
+ * Don't send the same window, some programs are clever and
+ * verify cut and paste operations inside the same window and
+ * don't notify at all.
+ *
+ * x.u.selectionRequest.requestor = lastSelectionOwner[index].window;
+ */
- /*
- * In TextClipboard mode simply use the previous clipboard
- * handling code.
- */
- if (nxagentOption(TextClipboard))
+ /*
+ * In TextClipboard mode simply use the previous clipboard
+ * handling code.
+ */
+ if (nxagentOption(TextClipboard))
+ {
+ /* by dimbor */
+ if (X->xselectionrequest.target != XA_STRING)
{
- /* by dimbor */
- if (X->xselectionrequest.target != XA_STRING)
- {
- lastServers[index].target = serverUTF8_STRING;
- /* by dimbor (idea from zahvatov) */
- x.u.selectionRequest.target = clientUTF8_STRING;
- }
- else
- {
- x.u.selectionRequest.target = XA_STRING;
- }
+ lastServers[index].target = serverUTF8_STRING;
+ /* by dimbor (idea from zahvatov) */
+ x.u.selectionRequest.target = clientUTF8_STRING;
}
else
{
- x.u.selectionRequest.target = nxagentRemoteToLocalAtom(X->xselectionrequest.target);
+ x.u.selectionRequest.target = XA_STRING;
}
-
- /*
- * Selete property before sending the request to the client as
- * required by ICCCM.
- */
- DeleteProperty(lastSelectionOwner[index].windowPtr, clientCutProperty);
-
- sendEventToClient(lastSelectionOwner[index].client, &x);
-
- #ifdef DEBUG
- fprintf(stderr, "%s: sent SelectionRequest event to client %s property [%d][%s] " \
- "target [%d][%s] requestor [0x%x] selection [%d][%s].\n", __func__,
- nxagentClientInfoString(lastSelectionOwner[index].client),
- x.u.selectionRequest.property, NameForLocalAtom(x.u.selectionRequest.property),
- x.u.selectionRequest.target, NameForLocalAtom(x.u.selectionRequest.target),
- x.u.selectionRequest.requestor,
- x.u.selectionRequest.selection, NameForLocalAtom(x.u.selectionRequest.selection));
- #endif
- /* No reply to the Xserver yet - we will do that once the answer
- of the above sendEventToClient arrives. */
}
else
{
- #ifdef DEBUG
- fprintf(stderr, "%s: no local owner for selection [%ld][%s] - denying request.\n", __func__,
- X->xselectionrequest.selection, NameForRemoteAtom(X->xselectionrequest.selection));
- #endif
-
- /* deny the request */
- replyRequestSelectionToXServer(X, False);
+ x.u.selectionRequest.target = nxagentRemoteToLocalAtom(X->xselectionrequest.target);
}
+
+ /*
+ * Selete property before sending the request to the client as
+ * required by ICCCM.
+ */
+ DeleteProperty(lastSelectionOwner[index].windowPtr, clientCutProperty);
+
+ sendEventToClient(lastSelectionOwner[index].client, &x);
+
+ #ifdef DEBUG
+ fprintf(stderr, "%s: sent SelectionRequest event to client %s property [%d][%s] " \
+ "target [%d][%s] requestor [0x%x] selection [%d][%s].\n", __func__,
+ nxagentClientInfoString(lastSelectionOwner[index].client),
+ x.u.selectionRequest.property, NameForLocalAtom(x.u.selectionRequest.property),
+ x.u.selectionRequest.target, NameForLocalAtom(x.u.selectionRequest.target),
+ x.u.selectionRequest.requestor,
+ x.u.selectionRequest.selection, NameForLocalAtom(x.u.selectionRequest.selection));
+ #endif
+ /* No reply to the Xserver yet - we will do that once the answer
+ of the above sendEventToClient arrives. */
+ }
+ else
+ {
+ #ifdef DEBUG
+ fprintf(stderr, "%s: no local owner for selection [%ld][%s] - denying request.\n", __func__,
+ X->xselectionrequest.selection, NameForRemoteAtom(X->xselectionrequest.selection));
+ #endif
+
+ /* deny the request */
+ replyRequestSelectionToXServer(X, False);
}
}