mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-21 16:05:02 +02:00
We need a per type in flight tracker for OSC 52
Since a single request can now write to multiple destinations
This commit is contained in:
@@ -322,6 +322,7 @@ class ClipboardRequestManager:
|
|||||||
self.window_id = window_id
|
self.window_id = window_id
|
||||||
self.currently_asking_permission_for: ReadRequest | None = None
|
self.currently_asking_permission_for: ReadRequest | None = None
|
||||||
self.in_flight_write_request: WriteRequest | None = None
|
self.in_flight_write_request: WriteRequest | None = None
|
||||||
|
self.osc52_in_flight_write_requests: dict[ClipboardType, WriteRequest] = {}
|
||||||
|
|
||||||
def parse_osc_5522(self, data: memoryview) -> None:
|
def parse_osc_5522(self, data: memoryview) -> None:
|
||||||
import base64
|
import base64
|
||||||
@@ -406,13 +407,13 @@ class ClipboardRequestManager:
|
|||||||
self.handle_read_request(rr)
|
self.handle_read_request(rr)
|
||||||
else:
|
else:
|
||||||
for d in destinations:
|
for d in destinations:
|
||||||
wr = self.in_flight_write_request
|
wr = self.osc52_in_flight_write_requests.get(d)
|
||||||
if wr is None:
|
if wr is None:
|
||||||
wr = self.in_flight_write_request = WriteRequest(d is ClipboardType.primary_selection)
|
wr = self.osc52_in_flight_write_requests[d] = WriteRequest(d is ClipboardType.primary_selection)
|
||||||
wr.add_base64_data(data)
|
wr.add_base64_data(data)
|
||||||
if is_partial:
|
if is_partial:
|
||||||
return
|
return
|
||||||
self.in_flight_write_request = None
|
self.osc52_in_flight_write_requests.pop(d, None)
|
||||||
self.handle_write_request(wr)
|
self.handle_write_request(wr)
|
||||||
|
|
||||||
def handle_write_request(self, wr: WriteRequest) -> None:
|
def handle_write_request(self, wr: WriteRequest) -> None:
|
||||||
@@ -531,3 +532,4 @@ class ClipboardRequestManager:
|
|||||||
def close(self) -> None:
|
def close(self) -> None:
|
||||||
if self.in_flight_write_request is not None:
|
if self.in_flight_write_request is not None:
|
||||||
self.in_flight_write_request = None
|
self.in_flight_write_request = None
|
||||||
|
self.osc52_in_flight_write_requests.clear()
|
||||||
|
|||||||
Reference in New Issue
Block a user