From: Ricardo Wurmus Date: Wed, 26 Oct 2016 06:00:35 +0000 (-0700) Subject: xwidget: Do not use `xwidget-execute-script-rv' to insert string X-Git-Tag: emacs-26.0.90~1426 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ff80a9c8376d5c14e37fbbfde08706492327836a;p=emacs.git xwidget: Do not use `xwidget-execute-script-rv' to insert string * lisp/xwidget.el (xwidget-webkit-insert-string): Obtain JavaScript return value via callback instead of using `xwidget-webkit-execute-script-rv'. --- diff --git a/lisp/xwidget.el b/lisp/xwidget.el index d2b9a091254..a252fd75d4b 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el @@ -286,31 +286,30 @@ function findactiveelement(doc){ ;;TODO the activeelement type needs to be examined, for iframe, etc. ) -(defun xwidget-webkit-insert-string (xw str) - "Insert string STR in the active field in the webkit XW." +(defun xwidget-webkit-insert-string () + "Prompt for a string and insert it in the active field in the +current webkit widget." ;; Read out the string in the field first and provide for edit. - (interactive - (let* ((xww (xwidget-webkit-current-session)) - - (field-value - (progn - (xwidget-webkit-execute-script xww xwidget-webkit-activeelement-js) - (xwidget-webkit-execute-script-rv - xww - "findactiveelement(document).value;"))) - (field-type (xwidget-webkit-execute-script-rv - xww - "findactiveelement(document).type;"))) - (list xww - (cond ((equal "text" field-type) - (read-string "Text: " field-value)) - ((equal "password" field-type) - (read-passwd "Password: " nil field-value)) - ((equal "textarea" field-type) - (xwidget-webkit-begin-edit-textarea xww field-value)))))) - (xwidget-webkit-execute-script - xw - (format "findactiveelement(document).value='%s'" str))) + (interactive) + (let ((xww (xwidget-webkit-current-session))) + (xwidget-webkit-execute-script + xww + (concat xwidget-webkit-activeelement-js " +(function () { + var res = findactiveelement(document); + return [res.value, res.type]; +})();") + (lambda (field) + (let ((str (pcase field + (`[,val "text"] + (read-string "Text: " val)) + (`[,val "password"] + (read-passwd "Password: " nil val)) + (`[,val "textarea"] + (xwidget-webkit-begin-edit-textarea xww val))))) + (xwidget-webkit-execute-script + xww + (format "findactiveelement(document).value='%s'" str))))))) (defvar xwidget-xwbl) (defun xwidget-webkit-begin-edit-textarea (xw text)