Browse Source

Improved pasting responsiveness

Krzysztof Krysiński 2 months ago
parent
commit
272c9ed9d2
1 changed files with 28 additions and 2 deletions
  1. 28 2
      src/PixiEditor/ViewModels/SubViewModels/ClipboardViewModel.cs

+ 28 - 2
src/PixiEditor/ViewModels/SubViewModels/ClipboardViewModel.cs

@@ -45,6 +45,14 @@ internal class ClipboardViewModel : SubViewModel<ViewModelMain>
         Application.Current.ForDesktopMainWindow((mainWindow) =>
         Application.Current.ForDesktopMainWindow((mainWindow) =>
         {
         {
             ClipboardController.Initialize(mainWindow.Clipboard);
             ClipboardController.Initialize(mainWindow.Clipboard);
+            mainWindow.GotFocus += (sender, args) =>
+            {
+                QueueHasImageInClipboard();
+                QueueCheckCanPasteImage();
+                QueueFetchTextFromClipboard();
+                QueueCheckNodesInClipboard();
+                QueueCheckCelsInClipboard();
+            };
         });
         });
     }
     }
 
 
@@ -316,7 +324,7 @@ internal class ClipboardViewModel : SubViewModel<ViewModelMain>
 
 
         await ClipboardController.CopyToClipboard(doc);
         await ClipboardController.CopyToClipboard(doc);
 
 
-        hasImageInClipboard = true;
+        SetHasImageInClipboard();
     }
     }
 
 
     [Command.Basic("PixiEditor.Clipboard.CopyVisible", "COPY_VISIBLE", "COPY_VISIBLE_DESCRIPTIVE",
     [Command.Basic("PixiEditor.Clipboard.CopyVisible", "COPY_VISIBLE", "COPY_VISIBLE_DESCRIPTIVE",
@@ -334,7 +342,7 @@ internal class ClipboardViewModel : SubViewModel<ViewModelMain>
                 ? viewportWindowViewModel.RenderOutputName
                 ? viewportWindowViewModel.RenderOutputName
                 : null);
                 : null);
 
 
-        hasImageInClipboard = true;
+        SetHasImageInClipboard();
     }
     }
 
 
     [Command.Basic("PixiEditor.Clipboard.CopyNodes", "COPY_NODES", "COPY_NODES_DESCRIPTIVE",
     [Command.Basic("PixiEditor.Clipboard.CopyNodes", "COPY_NODES", "COPY_NODES_DESCRIPTIVE",
@@ -355,6 +363,7 @@ internal class ClipboardViewModel : SubViewModel<ViewModelMain>
         await ClipboardController.CopyNodes(selectedNodes);
         await ClipboardController.CopyNodes(selectedNodes);
 
 
         areNodesInClipboard = true;
         areNodesInClipboard = true;
+        ClearHasImageInClipboard();
     }
     }
 
 
     [Command.Basic("PixiEditor.Clipboard.CopyCels", "COPY_CELS",
     [Command.Basic("PixiEditor.Clipboard.CopyCels", "COPY_CELS",
@@ -374,6 +383,7 @@ internal class ClipboardViewModel : SubViewModel<ViewModelMain>
         await ClipboardController.CopyCels(selectedCels);
         await ClipboardController.CopyCels(selectedCels);
 
 
         areCelsInClipboard = true;
         areCelsInClipboard = true;
+        ClearHasImageInClipboard();
     }
     }
 
 
 
 
@@ -592,6 +602,22 @@ internal class ClipboardViewModel : SubViewModel<ViewModelMain>
             x => areCelsInClipboard = x);
             x => areCelsInClipboard = x);
     }
     }
 
 
+    private void SetHasImageInClipboard()
+    {
+        hasImageInClipboard = true;
+        canPasteImage = true;
+        areNodesInClipboard = false;
+        areCelsInClipboard = false;
+        lastTextInClipboard = string.Empty;
+    }
+
+    private void ClearHasImageInClipboard()
+    {
+        hasImageInClipboard = false;
+        canPasteImage = false;
+        lastTextInClipboard = string.Empty;
+    }
+
     private void QueueClipboardTask<T>(string key, Func<Task<T>> task, T value, Action<T> updateAction)
     private void QueueClipboardTask<T>(string key, Func<Task<T>> task, T value, Action<T> updateAction)
     {
     {
         if (clipboardTasks.TryGetValue(key, out var t))
         if (clipboardTasks.TryGetValue(key, out var t))