X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Ftopicwidget.cpp;h=712e74ca30b3b4aa9a4ddc3e0ea3cce161da7b3c;hp=8b8e16d4f8e960fb1231b2fda7c34ac9370df8d6;hb=ac7a58dd970833da2336f6ce035ec55515bac0f1;hpb=9fc57dc2c000e80fb8bd746a090e2e8210e1278e diff --git a/src/qtui/topicwidget.cpp b/src/qtui/topicwidget.cpp index 8b8e16d4..712e74ca 100644 --- a/src/qtui/topicwidget.cpp +++ b/src/qtui/topicwidget.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2013 by the Quassel Project * + * Copyright (C) 2005-2016 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -20,17 +20,20 @@ #include "topicwidget.h" +#include + #include "client.h" -#include "iconloader.h" #include "networkmodel.h" #include "uisettings.h" +#include "graphicalui.h" +#include "uistyle.h" TopicWidget::TopicWidget(QWidget *parent) : AbstractItemView(parent) { ui.setupUi(this); - ui.topicEditButton->setIcon(SmallIcon("edit-rename")); - ui.topicLineEdit->setWordWrapEnabled(true); + ui.topicEditButton->setIcon(QIcon::fromTheme("edit-rename")); + ui.topicLineEdit->setLineWrapEnabled(true); ui.topicLineEdit->installEventFilter(this); connect(ui.topicLabel, SIGNAL(clickableActivated(Clickable)), SLOT(clickableActivated(Clickable))); @@ -112,11 +115,19 @@ void TopicWidget::setTopic(const QModelIndex &index) switch (Client::networkModel()->bufferType(id)) { case BufferInfo::StatusBuffer: if (network) { +#if QT_VERSION < 0x050000 newtopic = QString("%1 (%2) | %3 | %4") .arg(Qt::escape(network->networkName())) .arg(Qt::escape(network->currentServer())) .arg(tr("Users: %1").arg(network->ircUsers().count())) .arg(tr("Lag: %1 msecs").arg(network->latency())); +#else + newtopic = QString("%1 (%2) | %3 | %4") + .arg(network->networkName().toHtmlEscaped()) + .arg(network->currentServer().toHtmlEscaped()) + .arg(tr("Users: %1").arg(network->ircUsers().count())) + .arg(tr("Lag: %1 msecs").arg(network->latency())); +#endif } else { newtopic = index0.data(Qt::DisplayRole).toString(); @@ -154,12 +165,12 @@ void TopicWidget::setTopic(const QModelIndex &index) } } - _topic = newtopic; + _topic = sanitizeTopic(newtopic); _readonly = readonly; ui.topicEditButton->setVisible(!_readonly); - ui.topicLabel->setText(newtopic); - ui.topicLineEdit->setPlainText(newtopic); + ui.topicLabel->setText(_topic); + ui.topicLineEdit->setPlainText(_topic); switchPlain(); } @@ -191,7 +202,8 @@ void TopicWidget::updateResizeMode() void TopicWidget::clickableActivated(const Clickable &click) { NetworkId networkId = selectionModel()->currentIndex().data(NetworkModel::NetworkIdRole).value(); - click.activate(networkId, _topic); + UiStyle::StyledString sstr = GraphicalUi::uiStyle()->styleString(GraphicalUi::uiStyle()->mircToInternal(_topic), UiStyle::FormatType::PlainMsg); + click.activate(networkId, sstr.plainText); } @@ -261,3 +273,19 @@ bool TopicWidget::eventFilter(QObject *obj, QEvent *event) return false; } + +QString TopicWidget::sanitizeTopic(const QString& topic) +{ + // Normally, you don't have new lines in topic messages + // But the use of "plain text" functionnality from Qt replaces + // some unicode characters with a new line, which then triggers + // a stack overflow later + QString result(topic); +#if QT_VERSION >= 0x050000 + result.replace(QChar::CarriageReturn, " "); +#endif + result.replace(QChar::ParagraphSeparator, " "); + result.replace(QChar::LineSeparator, " "); + + return result; +}