mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-11-13 15:27:21 +00:00
[client] network: restore clipboard after reconnect
This commit is contained in:
@@ -4022,7 +4022,7 @@ static void networkClipboardDispatchDisconnected(
|
|||||||
struct NetworkFileTransfer * fileReads,
|
struct NetworkFileTransfer * fileReads,
|
||||||
struct NetworkFileTransfer * fileWrites,
|
struct NetworkFileTransfer * fileWrites,
|
||||||
struct NetworkFileAcquisition * acquisitions,
|
struct NetworkFileAcquisition * acquisitions,
|
||||||
bool release)
|
bool release, bool clearAttachment)
|
||||||
{
|
{
|
||||||
LG_LOCK(clipboard->eventLock);
|
LG_LOCK(clipboard->eventLock);
|
||||||
LG_LOCK(clipboard->stateLock);
|
LG_LOCK(clipboard->stateLock);
|
||||||
@@ -4061,6 +4061,16 @@ static void networkClipboardDispatchDisconnected(
|
|||||||
if (release && events->release)
|
if (release && events->release)
|
||||||
events->release(opaque);
|
events->release(opaque);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (clearAttachment)
|
||||||
|
{
|
||||||
|
LG_LOCK(clipboard->stateLock);
|
||||||
|
clipboard->events = NULL;
|
||||||
|
clipboard->eventOpaque = NULL;
|
||||||
|
clipboard->attached = false;
|
||||||
|
clipboard->localOffer = (struct NetworkLocalOffer) { 0 };
|
||||||
|
LG_UNLOCK(clipboard->stateLock);
|
||||||
|
}
|
||||||
LG_UNLOCK(clipboard->eventLock);
|
LG_UNLOCK(clipboard->eventLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4163,7 +4173,9 @@ void networkClipboardConnectionState(NetworkClipboard * clipboard,
|
|||||||
|
|
||||||
struct NetworkFileAcquisition * acquisitions =
|
struct NetworkFileAcquisition * acquisitions =
|
||||||
clipboard->fileAcquisitions;
|
clipboard->fileAcquisitions;
|
||||||
const bool release = clipboard->remoteOffer.published;
|
|
||||||
|
const bool release = clipboard->remoteOffer.published;
|
||||||
|
const bool clearAttachment = !clipboardService && clipboard->attached;
|
||||||
|
|
||||||
clipboard->clipboardReads = NULL;
|
clipboard->clipboardReads = NULL;
|
||||||
clipboard->clipboardWrites = NULL;
|
clipboard->clipboardWrites = NULL;
|
||||||
@@ -4185,20 +4197,23 @@ void networkClipboardConnectionState(NetworkClipboard * clipboard,
|
|||||||
networkClipboardClearSendNL(clipboard);
|
networkClipboardClearSendNL(clipboard);
|
||||||
networkClipboardClearInboundNL(clipboard);
|
networkClipboardClearInboundNL(clipboard);
|
||||||
networkClipboardRemoteOfferResetNL(clipboard);
|
networkClipboardRemoteOfferResetNL(clipboard);
|
||||||
networkClipboardSetAvailableNL(clipboard, clipboardService);
|
|
||||||
if (clipboardService && clipboard->attached)
|
|
||||||
networkClipboardQueueClaimNL(clipboard);
|
|
||||||
LG_UNLOCK(clipboard->stateLock);
|
LG_UNLOCK(clipboard->stateLock);
|
||||||
|
|
||||||
networkClipboardDispatchDisconnected(clipboard,
|
networkClipboardDispatchDisconnected(clipboard,
|
||||||
clipboardReads, clipboardWrites, fileReads, fileWrites,
|
clipboardReads, clipboardWrites, fileReads, fileWrites,
|
||||||
acquisitions, release);
|
acquisitions, release, clearAttachment);
|
||||||
networkClipboardTransfersFree(clipboardReads);
|
networkClipboardTransfersFree(clipboardReads);
|
||||||
networkClipboardTransfersFree(clipboardWrites);
|
networkClipboardTransfersFree(clipboardWrites);
|
||||||
networkClipboardFileTransfersFree(fileReads);
|
networkClipboardFileTransfersFree(fileReads);
|
||||||
networkClipboardFileTransfersFree(fileWrites);
|
networkClipboardFileTransfersFree(fileWrites);
|
||||||
networkClipboardAcquisitionsFree(acquisitions);
|
networkClipboardAcquisitionsFree(acquisitions);
|
||||||
|
|
||||||
|
LG_LOCK(clipboard->stateLock);
|
||||||
|
networkClipboardSetAvailableNL(clipboard, clipboardService);
|
||||||
|
if (clipboardService && clipboard->attached)
|
||||||
|
networkClipboardQueueClaimNL(clipboard);
|
||||||
|
LG_UNLOCK(clipboard->stateLock);
|
||||||
|
|
||||||
networkClipboardProcess(clipboard);
|
networkClipboardProcess(clipboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user