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-contrib-013725b6ac01ee0351cd61701588099dc1ec1258.zip swift-contrib-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_;  	};  } | 
 Swift
 Swift