summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2009-11-18 08:40:30 (GMT)
committerRemko Tronçon <git@el-tramo.be>2009-11-18 08:41:23 (GMT)
commit013725b6ac01ee0351cd61701588099dc1ec1258 (patch)
tree6749a4ef2116060f5fba6d5f432e4889ee7f2489
parentf9f84b3d960bfe92103235edef607d8db8d0b6b0 (diff)
downloadswift-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.cpp21
-rw-r--r--Swift/QtUI/QtChatView.h5
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_;
};
}