/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QAbstractItemView>
#include <QMimeData>
+#if QT_VERSION < 0x050000
#include <QTextDocument> // for Qt::escape()
+#endif
#include "buffermodel.h"
#include "buffersettings.h"
{
Q_UNUSED(column);
+#if QT_VERSION < 0x050000
QStringList toolTip(QString("<b>%1</b>").arg(Qt::escape(networkName())));
toolTip.append(tr("Server: %1").arg(Qt::escape(currentServer())));
+#else
+ QStringList toolTip(QString("<b>%1</b>").arg(networkName().toHtmlEscaped()));
+ toolTip.append(tr("Server: %1").arg(currentServer().toHtmlEscaped()));
+#endif
toolTip.append(tr("Users: %1").arg(nickCount()));
if (_network) {
case Qt::EditRole:
{
QString newName = value.toString();
+
+ // Sanity check - buffer names must not contain newlines!
+ int nlpos = newName.indexOf('\n');
+ if (nlpos >= 0)
+ newName = newName.left(nlpos);
+
if (!newName.isEmpty()) {
Client::renameBuffer(bufferId(), newName);
return true;
void QueryBufferItem::removeIrcUser()
{
- _ircUser = 0;
- emit dataChanged();
+ if (_ircUser) {
+ // Disconnect the active IrcUser before removing it, otherwise it will fire removeIrcUser()
+ // a second time when the object's destroyed due to QueryBufferItem::setIrcUser() connecting
+ // SIGNAL destroyed(QObject*) to SLOT removeIrcUser().
+ // This fixes removing an active IrcUser if the user had quit then rejoined in a nonstandard
+ // manner (e.g. updateNickFromHost calling newIrcUser, triggered by an away-notify message).
+ disconnect(_ircUser, 0, this, 0);
+
+ // Clear IrcUser (only set to 0 if not already 0)
+ _ircUser = 0;
+
+ // Only emit dataChanged() if data actually changed. This might serve as a small
+ // optimization, but it can be moved outside the if statement if other behavior depends on
+ // it always being called.
+ emit dataChanged();
+ }
}
: BufferItem(bufferInfo, parent),
_ircChannel(0)
{
+ setFlags(flags() | Qt::ItemIsDropEnabled);
}
Q_UNUSED(column);
QStringList toolTip;
+#if QT_VERSION < 0x050000
toolTip.append(tr("<b>Channel %1</b>").arg(Qt::escape(bufferName())));
+#else
+ toolTip.append(tr("<b>Channel %1</b>").arg(bufferName().toHtmlEscaped()));
+#endif
if (isActive()) {
//TODO: add channel modes
toolTip.append(tr("<b>Users:</b> %1").arg(nickCount()));
QString _topic = topic();
if (_topic != "") {
_topic = stripFormatCodes(_topic);
+#if QT_VERSION < 0x050000
_topic = Qt::escape(_topic);
+#else
+ _topic = _topic.toHtmlEscaped();
+#endif
toolTip.append(QString("<font size='-2'> </font>"));
toolTip.append(tr("<b>Topic:</b> %1").arg(_topic));
}
QHash<UserCategoryItem *, QList<IrcUser *> >::const_iterator catIter = categories.constBegin();
while (catIter != categories.constEnd()) {
catIter.key()->addUsers(catIter.value());
- catIter++;
+ ++catIter;
}
}
if (!mimeContainsBufferList(mimeData))
return bufferList;
- QStringList rawBufferList = QString::fromAscii(mimeData->data("application/Quassel/BufferItemList")).split(",");
+ QStringList rawBufferList = QString::fromLatin1(mimeData->data("application/Quassel/BufferItemList")).split(",");
NetworkId networkId;
BufferId bufferUid;
foreach(QString rawBuffer, rawBufferList) {
bufferlist << bufferid;
}
- mimeData->setData("application/Quassel/BufferItemList", bufferlist.join(",").toAscii());
+ mimeData->setData("application/Quassel/BufferItemList", bufferlist.join(",").toLatin1());
return mimeData;
}
}
}
else {
- updateBufferActivity(bufferItem(msg.bufferInfo()), msg);
+ if ((BufferSettings(msg.bufferId()).messageFilter() & msg.type()) != msg.type())
+ updateBufferActivity(bufferItem(msg.bufferInfo()), msg);
}
}