From a44020ac517c34d381c72563e848a8f8ebde96c6 Mon Sep 17 00:00:00 2001
From: Dima <Dmytro.Rets@Gamesys.co.uk>
Date: Wed, 27 Dec 2023 22:01:29 +0000
Subject: [PATCH] Check for a window before calling single()

---
 Cargo.lock    | 2 +-
 Cargo.toml    | 2 +-
 src/cursor.rs | 6 ++++++
 src/input.rs  | 4 ++++
 src/render.rs | 7 +++++++
 5 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index a434b4c..359e072 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -441,7 +441,7 @@ dependencies = [
 
 [[package]]
 name = "bevy_cosmic_edit"
-version = "0.15.2"
+version = "0.15.3"
 dependencies = [
  "arboard",
  "bevy",
diff --git a/Cargo.toml b/Cargo.toml
index 991e0e9..1539253 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "bevy_cosmic_edit"
-version = "0.15.2"
+version = "0.15.3"
 edition = "2021"
 license = "MIT OR Apache-2.0"
 description = "Bevy cosmic-text multiline text input"
diff --git a/src/cursor.rs b/src/cursor.rs
index 7c09799..f5f91e7 100644
--- a/src/cursor.rs
+++ b/src/cursor.rs
@@ -21,6 +21,9 @@ pub fn change_cursor(
     mouse_buttons: Res<Input<MouseButton>>,
     mut windows: Query<&mut Window, With<PrimaryWindow>>,
 ) {
+    if windows.iter().len() == 0 {
+        return;
+    }
     let mut window = windows.single_mut();
     if !evr_hover_in.is_empty() {
         window.cursor.icon = CursorIcon::Text;
@@ -53,6 +56,9 @@ pub fn hover_sprites(
     mut evw_hover_out: EventWriter<TextHoverOut>,
 ) {
     *hovered = false;
+    if windows.iter().len() == 0 {
+        return;
+    }
     let window = windows.single();
     let (camera, camera_transform) = camera_q.single();
     for (sprite, visibility, node_transform) in &mut cosmic_edit_query.iter_mut() {
diff --git a/src/input.rs b/src/input.rs
index 396bb1b..d5d6568 100644
--- a/src/input.rs
+++ b/src/input.rs
@@ -83,6 +83,10 @@ pub(crate) fn input_mouse(
         *click_count = 0;
     }
 
+    if windows.iter().len() == 0 {
+        return;
+    }
+
     let primary_window = windows.single();
     let scale_factor = primary_window.scale_factor() as f32;
     let (camera, camera_transform) = camera_q.iter().find(|(c, _)| c.is_active).unwrap();
diff --git a/src/render.rs b/src/render.rs
index d2a8353..58456ed 100644
--- a/src/render.rs
+++ b/src/render.rs
@@ -76,6 +76,9 @@ pub(crate) fn cosmic_widget_size(
     mut query: Query<(&mut CosmicWidgetSize, &Sprite), Changed<Sprite>>,
     windows: Query<&Window, With<PrimaryWindow>>,
 ) {
+    if windows.iter().len() == 0 {
+        return;
+    }
     let scale = windows.single().scale_factor() as f32;
     for (mut size, sprite) in query.iter_mut() {
         size.0 = sprite.custom_size.unwrap().ceil() * scale;
@@ -278,6 +281,10 @@ pub(crate) fn auto_height(
     mut style_q: Query<(&mut Style, &CosmicSource)>,
     windows: Query<&Window, With<PrimaryWindow>>,
 ) {
+    if windows.iter().len() == 0 {
+        return;
+    }
+
     let scale = windows.single().scale_factor() as f32;
 
     for (entity, mut sprite, mode, mut cosmic_editor, size) in query.iter_mut() {
-- 
GitLab