From 3ede95dff43ca8c07a7c91f1c4bd1af68f224e8c Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Tue, 31 Jan 2017 11:48:15 -0800 Subject: [PATCH] Consolidate HTML5 clipboard logic --- lime/_backend/html5/HTML5Window.hx | 23 +++++++++++++++++++++++ lime/system/Clipboard.hx | 26 ++++++-------------------- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/lime/_backend/html5/HTML5Window.hx b/lime/_backend/html5/HTML5Window.hx index 0fddee3f5..c4346ab2d 100644 --- a/lime/_backend/html5/HTML5Window.hx +++ b/lime/_backend/html5/HTML5Window.hx @@ -730,6 +730,29 @@ class HTML5Window { } + public function setClipboard (value:String):Void { + + if (Browser.document.queryCommandEnabled ("copy")) { + + var inputEnabled = enableTextEvents; + + setEnableTextEvents (true); // create textInput if necessary + setEnableTextEvents (false); + + var cacheText = textInput.value; + textInput.value = value; + + Browser.document.execCommand ("copy"); + + textInput.value = cacheText; + + setEnableTextEvents (inputEnabled); + + } + + } + + public function setEnableTextEvents (value:Bool):Bool { if (value) { diff --git a/lime/system/Clipboard.hx b/lime/system/Clipboard.hx index 537fd656a..54f740b1f 100644 --- a/lime/system/Clipboard.hx +++ b/lime/system/Clipboard.hx @@ -2,14 +2,12 @@ package lime.system; import lime._backend.native.NativeCFFI; +import lime.app.Application; #if flash import flash.desktop.Clipboard in FlashClipboard; #elseif js import lime._backend.html5.HTML5Window; -import js.Browser.document; - -@:access(lime._backend.html5.HTML5Window) #end #if !lime_debug @@ -18,6 +16,7 @@ import js.Browser.document; #end @:access(lime._backend.native.NativeCFFI) +@:access(lime.ui.Window) class Clipboard { @@ -61,30 +60,17 @@ class Clipboard { #if (lime_cffi && !macro) NativeCFFI.lime_clipboard_set_text (value); return value; - #elseif flash FlashClipboard.generalClipboard.setData (TEXT_FORMAT, value); return value; - - #elseif js + #elseif (js && html5) _text = value; - - #if html5 // HTML5 needs focus on field for clipboard events to work - if (HTML5Window.textInput != null) { + var window = Application.current.window; + if (window != null) { - HTML5Window.textInput.focus(); - HTML5Window.textInput.value = _text; - HTML5Window.textInput.select(); + window.backend.setClipboard (value); } - - if (document.queryCommandEnabled("copy")) { - - document.execCommand("copy"); - - } - #end - return value; #end