From adb639a5350ea0eb4b9e2b394fe7b3a53a9ae782 Mon Sep 17 00:00:00 2001
From: sam edelsten <samedelsten1@gmail.com>
Date: Wed, 1 May 2024 17:12:15 +0100
Subject: [PATCH] add tag component to disable user selection

---
 src/lib.rs         |  3 +++
 src/user_select.rs | 21 +++++++++++++++++++++
 2 files changed, 24 insertions(+)
 create mode 100644 src/user_select.rs

diff --git a/src/lib.rs b/src/lib.rs
index 3c1331d..dbbaa65 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -88,6 +88,7 @@ mod input;
 mod password;
 mod placeholder;
 mod render;
+mod user_select;
 mod util;
 mod widget;
 
@@ -109,6 +110,7 @@ pub use input::*;
 pub use password::*;
 pub use placeholder::*;
 pub use render::*;
+pub use user_select::*;
 pub use util::*;
 pub use widget::*;
 
@@ -132,6 +134,7 @@ impl Plugin for CosmicEditPlugin {
             PlaceholderPlugin,
             PasswordPlugin,
             EventsPlugin,
+            UserSelectPlugin,
         ))
         .insert_resource(CosmicFontSystem(font_system));
 
diff --git a/src/user_select.rs b/src/user_select.rs
new file mode 100644
index 0000000..4569397
--- /dev/null
+++ b/src/user_select.rs
@@ -0,0 +1,21 @@
+use crate::*;
+use bevy::prelude::*;
+
+pub(crate) struct UserSelectPlugin;
+
+impl Plugin for UserSelectPlugin {
+    fn build(&self, app: &mut App) {
+        app.add_systems(Update, clear_selection.after(InputSet));
+    }
+}
+
+/// Tag component to disable user selection
+/// Like CSS `user-select: none` https://developer.mozilla.org/en-US/docs/Web/CSS/user-select
+#[derive(Component)]
+pub struct UserSelectNone;
+
+fn clear_selection(mut q: Query<&mut CosmicEditor, With<UserSelectNone>>) {
+    for mut editor in q.iter_mut() {
+        editor.set_selection(cosmic_text::Selection::None);
+    }
+}
-- 
GitLab