Provides /HALFOP, /DEHALFOP and context menus.
Reuses "voiced" icons.
Fixes #1138
emit putCmd("MODE", serverEncode(params));
}
emit putCmd("MODE", serverEncode(params));
}
+void CoreUserInputHandler::handleDehalfop(const BufferInfo &bufferInfo, const QString &msg) {
+ QStringList nicks = msg.split(' ', QString::SkipEmptyParts);
+ QString m = "-"; for(int i = 0; i < nicks.count(); i++) m += 'h';
+ QStringList params;
+ params << bufferInfo.bufferName() << m << nicks;
+ emit putCmd("MODE", serverEncode(params));
+}
+
void CoreUserInputHandler::handleDevoice(const BufferInfo &bufferInfo, const QString &msg) {
QStringList nicks = msg.split(' ', QString::SkipEmptyParts);
QString m = "-"; for(int i = 0; i < nicks.count(); i++) m += 'v';
void CoreUserInputHandler::handleDevoice(const BufferInfo &bufferInfo, const QString &msg) {
QStringList nicks = msg.split(' ', QString::SkipEmptyParts);
QString m = "-"; for(int i = 0; i < nicks.count(); i++) m += 'v';
emit displayMsg(Message::Notice, bufferName, payload, network()->myNick(), Message::Self);
}
emit displayMsg(Message::Notice, bufferName, payload, network()->myNick(), Message::Self);
}
+void CoreUserInputHandler::handleHalfop(const BufferInfo &bufferInfo, const QString &msg) {
+ QStringList nicks = msg.split(' ', QString::SkipEmptyParts);
+ QString m = "+"; for(int i = 0; i < nicks.count(); i++) m += 'h';
+ QStringList params;
+ params << bufferInfo.bufferName() << m << nicks;
+ emit putCmd("MODE", serverEncode(params));
+}
+
void CoreUserInputHandler::handleOp(const BufferInfo &bufferInfo, const QString &msg) {
QStringList nicks = msg.split(' ', QString::SkipEmptyParts);
QString m = "+"; for(int i = 0; i < nicks.count(); i++) m += 'o';
void CoreUserInputHandler::handleOp(const BufferInfo &bufferInfo, const QString &msg) {
QStringList nicks = msg.split(' ', QString::SkipEmptyParts);
QString m = "+"; for(int i = 0; i < nicks.count(); i++) m += 'o';
void handleCtcp(const BufferInfo &bufferInfo, const QString &text);
void handleDelkey(const BufferInfo &bufferInfo, const QString &text);
void handleDeop(const BufferInfo &bufferInfo, const QString &text);
void handleCtcp(const BufferInfo &bufferInfo, const QString &text);
void handleDelkey(const BufferInfo &bufferInfo, const QString &text);
void handleDeop(const BufferInfo &bufferInfo, const QString &text);
+ void handleDehalfop(const BufferInfo &bufferInfo, const QString &text);
void handleDevoice(const BufferInfo &bufferInfo, const QString &text);
void handleInvite(const BufferInfo &bufferInfo, const QString &text);
void handleJoin(const BufferInfo &bufferInfo, const QString &text);
void handleDevoice(const BufferInfo &bufferInfo, const QString &text);
void handleInvite(const BufferInfo &bufferInfo, const QString &text);
void handleJoin(const BufferInfo &bufferInfo, const QString &text);
void handleNotice(const BufferInfo &bufferInfo, const QString &text);
void handleOper(const BufferInfo &bufferInfo, const QString &text);
void handleOp(const BufferInfo &bufferInfo, const QString &text);
void handleNotice(const BufferInfo &bufferInfo, const QString &text);
void handleOper(const BufferInfo &bufferInfo, const QString &text);
void handleOp(const BufferInfo &bufferInfo, const QString &text);
+ void handleHalfop(const BufferInfo &bufferInfo, const QString &text);
void handlePart(const BufferInfo &bufferInfo, const QString &text);
void handlePing(const BufferInfo &bufferInfo, const QString &text);
void handleQuery(const BufferInfo &bufferInfo, const QString &text);
void handlePart(const BufferInfo &bufferInfo, const QString &text);
void handlePing(const BufferInfo &bufferInfo, const QString &text);
void handleQuery(const BufferInfo &bufferInfo, const QString &text);
registerAction(NickOp, SmallIcon("irc-operator"), tr("Give Operator Status"));
registerAction(NickDeop, SmallIcon("irc-remove-operator"), tr("Take Operator Status"));
registerAction(NickOp, SmallIcon("irc-operator"), tr("Give Operator Status"));
registerAction(NickDeop, SmallIcon("irc-remove-operator"), tr("Take Operator Status"));
+ registerAction(NickHalfop, SmallIcon("irc-voice"), tr("Give Half-Operator Status"));
+ registerAction(NickDehalfop, SmallIcon("irc-unvoice"), tr("Take Half-Operator Status"));
registerAction(NickVoice, SmallIcon("irc-voice"), tr("Give Voice"));
registerAction(NickDevoice, SmallIcon("irc-unvoice"), tr("Take Voice"));
registerAction(NickKick, SmallIcon("im-kick-user"), tr("Kick From Channel"));
registerAction(NickVoice, SmallIcon("irc-voice"), tr("Give Voice"));
registerAction(NickDevoice, SmallIcon("irc-unvoice"), tr("Take Voice"));
registerAction(NickKick, SmallIcon("im-kick-user"), tr("Kick From Channel"));
QMenu *nickModeMenu = new QMenu();
nickModeMenu->addAction(action(NickOp));
nickModeMenu->addAction(action(NickDeop));
QMenu *nickModeMenu = new QMenu();
nickModeMenu->addAction(action(NickOp));
nickModeMenu->addAction(action(NickDeop));
+ // this is where the halfops will be placed if available
+ nickModeMenu->addAction(action(NickHalfop));
+ nickModeMenu->addAction(action(NickDehalfop));
nickModeMenu->addAction(action(NickVoice));
nickModeMenu->addAction(action(NickDevoice));
nickModeMenu->addSeparator();
nickModeMenu->addAction(action(NickVoice));
nickModeMenu->addAction(action(NickDevoice));
nickModeMenu->addSeparator();
IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
if(ircUser) {
IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
if(ircUser) {
+ Network *network = ircUser->network();
+ // only show entries for usermode +h if server supports it
+ if(network && network->prefixModes().contains('h')) {
+ action(NickHalfop)->setVisible(true);
+ action(NickDehalfop)->setVisible(true);
+ }
+ else {
+ action(NickHalfop)->setVisible(false);
+ action(NickDehalfop)->setVisible(false);
+ }
// ignoreliststuff
QString bufferName;
BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
// ignoreliststuff
QString bufferName;
BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
case NickDeop:
Client::userInput(bufferInfo, QString("/DEOP %1").arg(nick));
break;
case NickDeop:
Client::userInput(bufferInfo, QString("/DEOP %1").arg(nick));
break;
+ case NickHalfop:
+ Client::userInput(bufferInfo, QString("/HALFOP %1").arg(nick));
+ break;
+ case NickDehalfop:
+ Client::userInput(bufferInfo, QString("/DEHALFOP %1").arg(nick));
+ break;
case NickVoice:
Client::userInput(bufferInfo, QString("/VOICE %1").arg(nick));
break;
case NickVoice:
Client::userInput(bufferInfo, QString("/VOICE %1").arg(nick));
break;
NickDeop = 0x090000,
NickVoice = 0x0a0000,
NickDevoice = 0x0b0000,
NickDeop = 0x090000,
NickVoice = 0x0a0000,
NickDevoice = 0x0b0000,
- NickKick = 0x0c0000,
- NickBan = 0x0d0000,
- NickKickBan = 0x0e0000,
- NickIgnoreUser = 0x0f0000,
- NickIgnoreHost = 0x100000,
- NickIgnoreDomain = 0x200000,
- NickIgnoreCustom = 0x300000,
- // The next 5 types have stay together
+ NickHalfop = 0x0c0000,
+ NickDehalfop = 0x0d0000,
+ NickKick = 0x0e0000,
+ NickBan = 0x0f0000,
+ NickKickBan = 0x100000,
+ NickIgnoreUser = 0x200000,
+ NickIgnoreHost = 0x300000,
+ NickIgnoreDomain = 0x400000,
+ NickIgnoreCustom = 0x500000,
+ // The next 5 types have to stay together
// Don't change without reading ContextMenuActionProvider::addIgnoreMenu!
// Don't change without reading ContextMenuActionProvider::addIgnoreMenu!
- NickIgnoreToggleEnabled0 = 0x400000,
- NickIgnoreToggleEnabled1 = 0x500000,
- NickIgnoreToggleEnabled2 = 0x600000,
- NickIgnoreToggleEnabled3 = 0x700000,
- NickIgnoreToggleEnabled4 = 0x800000,
+ NickIgnoreToggleEnabled0 = 0x600000,
+ NickIgnoreToggleEnabled1 = 0x700000,
+ NickIgnoreToggleEnabled2 = 0x800000,
+ NickIgnoreToggleEnabled3 = 0x900000,
+ NickIgnoreToggleEnabled4 = 0xa00000,
// Actions that are handled externally
// These emit a signal to the action requester, rather than being handled here
// Actions that are handled externally
// These emit a signal to the action requester, rather than being handled here