From 707ccb04d2eb15129dce19e12388c1e5321aef57 Mon Sep 17 00:00:00 2001 From: Patrick MARIE Date: Mon, 30 Sep 2024 10:27:47 +0200 Subject: [PATCH] Restore paste on middle-click on linux (#18503) 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. --- crates/editor/src/element.rs | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 1c35fa6bcd..98a5ff7f4d 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -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() + } } }