diff options
Diffstat (limited to 'Swift/QtUI/QtChatView.cpp')
-rw-r--r-- | Swift/QtUI/QtChatView.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/Swift/QtUI/QtChatView.cpp b/Swift/QtUI/QtChatView.cpp index 12f6beb..62e04ce 100644 --- a/Swift/QtUI/QtChatView.cpp +++ b/Swift/QtUI/QtChatView.cpp @@ -20,6 +20,7 @@ QtChatView::QtChatView(QWidget* parent) : QWidget(parent) { webView_ = new QWebView(this); webView_->setFocusPolicy(Qt::NoFocus); connect(webView_, SIGNAL(linkClicked(const QUrl&)), SLOT(handleLinkClicked(const QUrl&))); + connect(webView_, SIGNAL(loadFinished(bool)), SLOT(handleViewLoadFinished(bool))); #ifdef Q_WS_X11 /* To give a border on Linux, where it looks bad without */ QStackedWidget* stack = new QStackedWidget(this); @@ -50,6 +51,8 @@ QtChatView::QtChatView(QWidget* parent) : QWidget(parent) { pageHTML.replace(pageHTML.indexOf("%@"), 2, ""); pageHTML.replace(pageHTML.indexOf("%@"), 2, ""); file.close(); + + viewReady_ = false; webPage_->mainFrame()->setHtml(pageHTML); } @@ -61,11 +64,18 @@ void QtChatView::addMessage(const ChatSnippet& snippet) { content.replace("\"", "\\\""); content.replace("\n", "\\n"); content.replace("\r", ""); + QString command; if (previousContinuationElementID_.isEmpty() || !snippet.getAppendToPrevious()) { - webPage_->mainFrame()->evaluateJavaScript("appendMessage(\"" + content + "\");"); + command = "appendMessage(\"" + content + "\");"; + } + else { + command = "appendNextMessage(\"" + content + "\");"; + } + if (viewReady_) { + webPage_->mainFrame()->evaluateJavaScript(command); } else { - webPage_->mainFrame()->evaluateJavaScript("appendNextMessage(\"" + content + "\");"); + queuedMessages_ += command; } //qDebug() << webPage_->mainFrame()->toHtml(); @@ -94,4 +104,11 @@ void QtChatView::handleLinkClicked(const QUrl& url) { QDesktopServices::openUrl(url); } +void QtChatView::handleViewLoadFinished(bool ok) { + Q_ASSERT(ok); + viewReady_ = true; + webPage_->mainFrame()->evaluateJavaScript(queuedMessages_); + queuedMessages_.clear(); +} + } |