From ee9d9196f5b5d55e908b6b442ab091850e6eb3cf Mon Sep 17 00:00:00 2001
From: chylex <info@chylex.com>
Date: Thu, 9 Mar 2017 19:46:12 +0100
Subject: [PATCH] Rewrite image paste click simulation to use CEF events
 instead of WinAPI

---
 Core/Bridge/TweetDeckBridge.cs | 10 +---------
 Core/FormBrowser.cs            |  6 ++++--
 Resources/Scripts/code.js      | 12 +++++-------
 3 files changed, 10 insertions(+), 18 deletions(-)

diff --git a/Core/Bridge/TweetDeckBridge.cs b/Core/Bridge/TweetDeckBridge.cs
index e18b9735..277471b8 100644
--- a/Core/Bridge/TweetDeckBridge.cs
+++ b/Core/Bridge/TweetDeckBridge.cs
@@ -109,15 +109,7 @@ public void TryPasteImage(){
         }
 
         public void ClickUploadImage(int offsetX, int offsetY){
-            form.InvokeSafe(() => {
-                Point prevPos = Cursor.Position;
-
-                Cursor.Position = form.PointToScreen(new Point(offsetX, offsetY));
-                NativeMethods.SimulateMouseClick(NativeMethods.MouseButton.Left);
-                Cursor.Position = prevPos;
-
-                form.OnImagePastedFinish();
-            });
+            form.InvokeAsyncSafe(() => form.TriggerImageUpload(offsetX, offsetY));
         }
 
         public void ScreenshotTweet(string html, int width, int height){
diff --git a/Core/FormBrowser.cs b/Core/FormBrowser.cs
index 69768366..4021fe0a 100644
--- a/Core/FormBrowser.cs
+++ b/Core/FormBrowser.cs
@@ -406,8 +406,10 @@ public void OnImagePasted(){
             browser.ExecuteScriptAsync("TDGF_tryPasteImage()");
         }
 
-        public void OnImagePastedFinish(){
-            browser.ExecuteScriptAsync("TDGF_tryPasteImageFinish()");
+        public void TriggerImageUpload(int offsetX, int offsetY){
+            IBrowserHost host = browser.GetBrowser().GetHost();
+            host.SendMouseClickEvent(offsetX, offsetY, MouseButtonType.Left, false, 1, CefEventFlags.None);
+            host.SendMouseClickEvent(offsetX, offsetY, MouseButtonType.Left, true, 1, CefEventFlags.None);
         }
 
         public void TriggerTweetScreenshot(){
diff --git a/Resources/Scripts/code.js b/Resources/Scripts/code.js
index 837e2a9f..78c57377 100644
--- a/Resources/Scripts/code.js
+++ b/Resources/Scripts/code.js
@@ -344,6 +344,11 @@
     };
     
     var clickUpload = function(){
+      $(document).one("uiFilesAdded", function(){
+        getScroller().scrollTop(prevScrollTop);
+        $(".js-drawer").find(".js-compose-text").first()[0].focus();
+      });
+      
       var button = $(".js-add-image-button").first();
       
       var scroller = getScroller();
@@ -395,13 +400,6 @@
         lastPasteElement = null;
       }
     };
-    
-    window.TDGF_tryPasteImageFinish = function(){
-      setTimeout(function(){
-        getScroller().scrollTop(prevScrollTop);
-        $(".js-drawer").find(".js-compose-text").first()[0].focus();
-      }, 10);
-    };
   })();
   
   //