From 634c414efa6ddec85b87e301bc7a3924960bebd1 Mon Sep 17 00:00:00 2001
From: Guillem <guillembartrina@gmail.com>
Date: Sat, 27 Jun 2020 13:10:28 +0200
Subject: [PATCH] fix post selection for newly created subpatch

---
 pd/nw/pdgui.js | 28 +++++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js
index a24a6f714..1ba717cfb 100644
--- a/pd/nw/pdgui.js
+++ b/pd/nw/pdgui.js
@@ -5560,15 +5560,33 @@ var skin = exports.skin = (function () {
     };
 }());
 
-function select_text(cid, elem) {
+function select_text(cid, elem, state) {
     var range, win = patchwin[cid].window;
     if (win.document.selection) {
         range = win.document.body.createTextRange();
         range.moveToElementText(elem);
+        if(state > 2)
+        {
+            var b = state & 0x0000FFFF, e = state >>> 16, l = elem.textContent.length;
+            var ms = Math.max(Math.min(b, l), 0);
+            var me = Math.max(Math.min(e, l), ms);
+            post(ms + " " + me);
+            range.moveStart("character", ms);
+            range.moveEnd("character", me-l);
+        }
         range.select();
     } else if (win.getSelection) {
         range = win.document.createRange();
         range.selectNodeContents(elem);
+        if(state > 2)
+        {
+            var b = state & 0x0000FFFF, e = state >>> 16, l = elem.textContent.length;
+            var ms = Math.max(Math.min(b, l), 0);
+            var me = Math.max(Math.min(e, l), ms);
+            post(ms + " " + me);
+            range.setStart(elem.firstChild, ms);
+            range.setEnd(elem.firstChild, me);
+        }
         win.getSelection().removeAllRanges();
         win.getSelection().addRange(range);
     }
@@ -5708,11 +5726,11 @@ function gui_textarea(cid, tag, type, x, y, width_spec, height_spec, text,
         // append to doc body
         patchwin[cid].window.document.body.appendChild(p);
         p.focus();
-        select_text(cid, p);
-        if (state === 1) {
-            patchwin[cid].window.canvas_events.text();
-        } else {
+        select_text(cid, p, state);
+        if (state == 2) {
             patchwin[cid].window.canvas_events.floating_text();
+        } else {
+            patchwin[cid].window.canvas_events.text();
         }
     } else {
         configure_item(gobj, { visibility: "normal" });
-- 
GitLab