diff options
author | Remko Tronçon <git@el-tramo.be> | 2009-11-18 08:40:30 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2009-11-18 08:41:23 (GMT) |
commit | 013725b6ac01ee0351cd61701588099dc1ec1258 (patch) | |
tree | 6749a4ef2116060f5fba6d5f432e4889ee7f2489 | |
parent | f9f84b3d960bfe92103235edef607d8db8d0b6b0 (diff) | |
download | swift-013725b6ac01ee0351cd61701588099dc1ec1258.zip swift-013725b6ac01ee0351cd61701588099dc1ec1258.tar.bz2 |
Wait until WebKit is ready loading the initial template before appending messages.
Fixes bug where first messages were missing from the view.
-rw-r--r-- | Swift/QtUI/QtChatView.cpp | 21 | ||||
-rw-r--r-- | Swift/QtUI/QtChatView.h | 5 |
2 files changed, 24 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(); +} + } diff --git a/Swift/QtUI/QtChatView.h b/Swift/QtUI/QtChatView.h index 7340e00..d3e997a 100644 --- a/Swift/QtUI/QtChatView.h +++ b/Swift/QtUI/QtChatView.h @@ -24,10 +24,15 @@ namespace Swift { void scrollToBottom(); void handleLinkClicked(const QUrl&); + private slots: + void handleViewLoadFinished(bool); + private: + bool viewReady_; QWebView* webView_; QWebPage* webPage_; QString previousContinuationElementID_; + QString queuedMessages_; }; } |