Dont ask for permission when reading only the mime types available in the clipboard

This commit is contained in:
Kovid Goyal 2022-11-29 15:09:01 +05:30
parent d6dcdf0751
commit 2697ddaec3
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -18,6 +18,7 @@ from .fast_data_types import (
from .utils import log_error from .utils import log_error
DataType = Union[bytes, 'IO[bytes]'] DataType = Union[bytes, 'IO[bytes]']
TARGETS_MIME = '.'
class ClipboardType(IntEnum): class ClipboardType(IntEnum):
@ -329,6 +330,9 @@ class ClipboardRequestManager:
if not cp.enabled: if not cp.enabled:
w.screen.send_escape_code_to_child(OSC, rr.encode_response(status='EINVAL')) w.screen.send_escape_code_to_child(OSC, rr.encode_response(status='EINVAL'))
return return
if not allowed:
w.screen.send_escape_code_to_child(OSC, rr.encode_response(status='EPERM'))
return
w.screen.send_escape_code_to_child(OSC, rr.encode_response(status='OK')) w.screen.send_escape_code_to_child(OSC, rr.encode_response(status='OK'))
current_mime = '' current_mime = ''
@ -342,7 +346,7 @@ class ClipboardRequestManager:
for mime in rr.mime_types: for mime in rr.mime_types:
current_mime = mime current_mime = mime
if mime == '.': if mime == TARGETS_MIME:
w.screen.send_escape_code_to_child( w.screen.send_escape_code_to_child(
OSC, rr.encode_response(payload=' '.join(cp.get_available_mime_types_for_paste()).encode('utf-8'), mime=current_mime)) OSC, rr.encode_response(payload=' '.join(cp.get_available_mime_types_for_paste()).encode('utf-8'), mime=current_mime))
continue continue
@ -370,6 +374,9 @@ class ClipboardRequestManager:
w.screen.send_escape_code_to_child(OSC, encode_osc52(loc, text)) w.screen.send_escape_code_to_child(OSC, encode_osc52(loc, text))
def ask_to_read_clipboard(self, rr: ReadRequest) -> None: def ask_to_read_clipboard(self, rr: ReadRequest) -> None:
if rr.mime_types == (TARGETS_MIME,):
self.fulfill_read_request(rr, True)
return
if self.currently_asking_permission_for is not None: if self.currently_asking_permission_for is not None:
self.reject_read_request(rr) self.reject_read_request(rr)
return return
@ -378,7 +385,7 @@ class ClipboardRequestManager:
self.currently_asking_permission_for = rr self.currently_asking_permission_for = rr
get_boss().confirm(_( get_boss().confirm(_(
'A program running in this window wants to read from the system clipboard.' 'A program running in this window wants to read from the system clipboard.'
' Allow it do so, once?'), ' Allow it to do so, once?'),
self.handle_clipboard_confirmation, window=w, self.handle_clipboard_confirmation, window=w,
) )