diff --git a/libs/clipboard/src/cliprdr.h b/libs/clipboard/src/cliprdr.h index 57cae5f8f..9d56049ee 100644 --- a/libs/clipboard/src/cliprdr.h +++ b/libs/clipboard/src/cliprdr.h @@ -199,6 +199,7 @@ extern "C" BOOL EnableOthers; BOOL IsStopped; + UINT32 ResponseWaitTimeoutSecs; pcCliprdrServerCapabilities ServerCapabilities; pcCliprdrClientCapabilities ClientCapabilities; pcCliprdrMonitorReady MonitorReady; diff --git a/libs/clipboard/src/cliprdr.rs b/libs/clipboard/src/cliprdr.rs index e5bc3e7ef..6bbb27ca0 100644 --- a/libs/clipboard/src/cliprdr.rs +++ b/libs/clipboard/src/cliprdr.rs @@ -453,6 +453,7 @@ pub struct _cliprdr_client_context { pub EnableFiles: BOOL, pub EnableOthers: BOOL, pub IsStopped: BOOL, + pub ResponseWaitTimeoutSecs: UINT32, pub ServerCapabilities: pcCliprdrServerCapabilities, pub ClientCapabilities: pcCliprdrClientCapabilities, pub MonitorReady: pcCliprdrMonitorReady, @@ -510,6 +511,7 @@ impl CliprdrClientContext { EnableFiles: if enable_files { TRUE } else { FALSE }, EnableOthers: if enable_others { TRUE } else { FALSE }, IsStopped: FALSE, + ResponseWaitTimeoutSecs: 60, ServerCapabilities: None, ClientCapabilities: None, MonitorReady: None, diff --git a/libs/clipboard/src/windows/wf_cliprdr.c b/libs/clipboard/src/windows/wf_cliprdr.c index f7111c41b..ea582d5b1 100644 --- a/libs/clipboard/src/windows/wf_cliprdr.c +++ b/libs/clipboard/src/windows/wf_cliprdr.c @@ -1453,10 +1453,11 @@ UINT wait_response_event(wfClipboard *clipboard, HANDLE event, void **data) { UINT rc = ERROR_SUCCESS; clipboard->context->IsStopped = FALSE; - // with default 3min timeout - for (int i = 0; i < 20 * 60 * 3; i++) + DWORD waitOnceTimeoutMillis = 50; + int waitCount = 1000 * clipboard->context->ResponseWaitTimeoutSecs / waitOnceTimeoutMillis; + for (int i = 0; i < waitCount * 3; i++) { - DWORD waitRes = WaitForSingleObject(event, 50); + DWORD waitRes = WaitForSingleObject(event, waitOnceTimeoutMillis); if (waitRes == WAIT_TIMEOUT && clipboard->context->IsStopped == FALSE) { continue;