mirror of
https://github.com/wez/wezterm.git
synced 2024-11-22 22:42:48 +03:00
x11: more actively try to fallback to STRING for selection
If we get NONE back in response to our request for a utf8 selection, repeat the request but for STRING. refs: https://github.com/wez/wezterm/issues/4402
This commit is contained in:
parent
6db993c6cd
commit
2afa36d9b1
@ -849,11 +849,35 @@ impl XWindowInner {
|
||||
);
|
||||
|
||||
if let Some(clipboard) = self.selection_atom_to_clipboard(selection.selection()) {
|
||||
if selection.property() != xcb::x::ATOM_NONE
|
||||
// Restrict to strictly UTF-8 to avoid crashing; see
|
||||
// <https://github.com/meh/rust-xcb-util/issues/21>
|
||||
&& selection.target() == conn.atom_utf8_string
|
||||
{
|
||||
if selection.property() == xcb::x::ATOM_NONE {
|
||||
if selection.target() == conn.atom_utf8_string {
|
||||
log::trace!(
|
||||
"SEL: window_id={window_id:?} -> UTF-8 selection data \
|
||||
available, requesting STRING instead"
|
||||
);
|
||||
conn.send_request_no_reply_log(&xcb::x::ConvertSelection {
|
||||
requestor: window_id,
|
||||
selection: selection.selection(),
|
||||
target: xcb::x::ATOM_STRING,
|
||||
property: conn.atom_xsel_data,
|
||||
time: self.copy_and_paste.time,
|
||||
});
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
if let Some(mut promise) = self.copy_and_paste.request_mut(clipboard).take() {
|
||||
log::trace!(
|
||||
"SEL: window_id={window_id:?} -> no compatible selection data \
|
||||
available, fulfil promise with empty string"
|
||||
);
|
||||
promise.ok("".to_owned());
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
if selection.target() == conn.atom_utf8_string {
|
||||
log::trace!(
|
||||
"SEL: window_id={window_id:?} requesting selection from window {:?}",
|
||||
selection.requestor()
|
||||
@ -881,9 +905,7 @@ impl XWindowInner {
|
||||
log::error!("clipboard: err while getting clipboard property: {:?}", err);
|
||||
}
|
||||
}
|
||||
} else if selection.property() != xcb::x::ATOM_NONE
|
||||
&& selection.target() == xcb::x::ATOM_STRING
|
||||
{
|
||||
} else if selection.target() == xcb::x::ATOM_STRING {
|
||||
log::trace!(
|
||||
"SEL: window_id={window_id:?} requesting selection from window {:?}",
|
||||
selection.requestor()
|
||||
|
Loading…
Reference in New Issue
Block a user