From a59b9b1f77ff84608b3325d770b6527a6fcffd5d Mon Sep 17 00:00:00 2001
From: Ming Rui Zhang <mingrui.zhang@savoirfairelinux.com>
Date: Tue, 2 Jul 2019 12:00:20 -0400
Subject: [PATCH] messagewebview: detect paste(ctrl + v) key press event in
 textarea

Change-Id: I4d4dbdebe0eb316b1eea1f576e5dae4867008659
---
 callwidget.cpp     |  3 +++
 messagewebview.cpp | 11 +++++++++++
 messagewebview.h   |  2 ++
 web/chatview.js    |  5 +++++
 4 files changed, 21 insertions(+)

diff --git a/callwidget.cpp b/callwidget.cpp
index 14cf72a..91857cc 100644
--- a/callwidget.cpp
+++ b/callwidget.cpp
@@ -205,6 +205,9 @@ CallWidget::CallWidget(QWidget* parent) :
     connect(ui->messageView, SIGNAL(customContextMenuRequested(const QPoint&)),
         this, SLOT(ShowContextMenu(const QPoint&)));
 
+    connect(ui->messageView, &MessageWebView::pasteKeyDetected,
+            this, &CallWidget::Paste);
+
     // set first view to welcome view
     ui->stackedWidget->setCurrentWidget(ui->welcomePage);
     ui->btnConversations->setChecked(true);
diff --git a/messagewebview.cpp b/messagewebview.cpp
index 111d35d..fc61e38 100644
--- a/messagewebview.cpp
+++ b/messagewebview.cpp
@@ -621,3 +621,14 @@ PrivateBridging::blockConversation()
     }
     return 0;
 }
+
+Q_INVOKABLE int
+PrivateBridging::emitPasteKeyDetected()
+{
+    if (auto messageView = qobject_cast<MessageWebView*>(this->parent())) {
+        emit messageView->pasteKeyDetected();
+    } else {
+        qDebug() << "JS bridging - exception during emitPasteKeyDetected";
+    }
+    return 0;
+}
diff --git a/messagewebview.h b/messagewebview.h
index ed27dee..ffa5f35 100644
--- a/messagewebview.h
+++ b/messagewebview.h
@@ -48,6 +48,7 @@ public:
     Q_INVOKABLE int blockConversation();
     Q_INVOKABLE int emitMessagesCleared();
     Q_INVOKABLE int emitMessagesLoaded();
+    Q_INVOKABLE int emitPasteKeyDetected();
 };
 
 class MessageWebView : public QWebEngineView
@@ -101,6 +102,7 @@ signals:
     void messagesCleared();
     void messagesLoaded();
     void textSelectedReady();
+    void pasteKeyDetected();
 
 private slots:
     void slotLoadFinished();
diff --git a/web/chatview.js b/web/chatview.js
index f923e21..7fbea30 100644
--- a/web/chatview.js
+++ b/web/chatview.js
@@ -34,6 +34,7 @@ var   messages          = document.getElementById("messages")
 var   backToBottomBtn   = document.getElementById("back_to_bottom_button")
 var   sendContainer     = document.getElementById("file_image_send_container")
 
+messageBarInput.onpaste = pasteKeyDetected;
 
 /* States: allows us to avoid re-doing something if it isn't meaningful */
 var displayLinksEnabled = true
@@ -1755,3 +1756,7 @@ function remove(e) {
         sendContainer.style.visibility = "hidden";
     }
 }
+
+function pasteKeyDetected() {
+    window.jsbridge.emitPasteKeyDetected();
+}
-- 
GitLab