Restore paste on middle-click on linux (#18503)
Patrick MARIE
created 1 year ago
This is a partial revert of e6c1c51b37a, which removed the middle-click
pasting on linux (both x11 & wayland). It also restores the
`middle_click_paste` option behavior which became unexistent.
Release Notes:
- Restore Linux middle-click pasting.
Change summary
crates/editor/src/element.rs | 29 ++++++++++++++++++++++++-----
1 file changed, 24 insertions(+), 5 deletions(-)
Detailed changes
@@ -636,11 +636,30 @@ impl EditorElement {
cx.stop_propagation();
} else if end_selection && pending_nonempty_selections {
cx.stop_propagation();
- } else if cfg!(target_os = "linux")
- && event.button == MouseButton::Middle
- && (!text_hitbox.is_hovered(cx) || editor.read_only(cx))
- {
- return;
+ } else if cfg!(target_os = "linux") && event.button == MouseButton::Middle {
+ if !text_hitbox.is_hovered(cx) || editor.read_only(cx) {
+ return;
+ }
+
+ #[cfg(target_os = "linux")]
+ if EditorSettings::get_global(cx).middle_click_paste {
+ if let Some(text) = cx.read_from_primary().and_then(|item| item.text()) {
+ let point_for_position =
+ position_map.point_for_position(text_hitbox.bounds, event.position);
+ let position = point_for_position.previous_valid;
+
+ editor.select(
+ SelectPhase::Begin {
+ position,
+ add: false,
+ click_count: 1,
+ },
+ cx,
+ );
+ editor.insert(&text, cx);
+ }
+ cx.stop_propagation()
+ }
}
}