summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabio Alessandrelli <fabio.alessandrelli@gmail.com>2019-05-29 21:30:29 +0200
committerFabio Alessandrelli <fabio.alessandrelli@gmail.com>2019-05-29 23:21:09 +0200
commitce542bced1167a465ba2fc4150e16816e6d82e29 (patch)
treeec2af36eeb6392c066be52ab59d358317ec059f4
parent2b436dd50e55e32bf09021d3c819339a7fce3e9f (diff)
Implement Clipboard API read when supported.
Being async, the first time a value is pasted GUI elements will still return the previous one. This at least until 'clipboardchange' window event gets implemented by user agents.
-rw-r--r--platform/javascript/os_javascript.cpp17
-rw-r--r--platform/javascript/os_javascript.h1
2 files changed, 18 insertions, 0 deletions
diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp
index 6c4764bf7b..502463a6f1 100644
--- a/platform/javascript/os_javascript.cpp
+++ b/platform/javascript/os_javascript.cpp
@@ -819,6 +819,23 @@ void OS_JavaScript::set_clipboard(const String &p_text) {
ERR_FAIL_COND(err);
}
+String OS_JavaScript::get_clipboard() const {
+ /* clang-format off */
+ EM_ASM({
+ try {
+ navigator.clipboard.readText().then(function (result) {
+ ccall('update_clipboard', 'void', ['string'], [result]);
+ }).catch(function (e) {
+ // Fail graciously.
+ });
+ } catch (e) {
+ // Fail graciously.
+ }
+ });
+ /* clang-format on */
+ return this->OS::get_clipboard();
+}
+
// Lifecycle
int OS_JavaScript::get_current_video_driver() const {
return video_driver_index;
diff --git a/platform/javascript/os_javascript.h b/platform/javascript/os_javascript.h
index 7f9706b711..27b23a4673 100644
--- a/platform/javascript/os_javascript.h
+++ b/platform/javascript/os_javascript.h
@@ -134,6 +134,7 @@ public:
virtual const char *get_audio_driver_name(int p_driver) const;
virtual void set_clipboard(const String &p_text);
+ virtual String get_clipboard() const;
virtual MainLoop *get_main_loop() const;
void run_async();