- Clickable click = clickableAt(pos);
- if(click.isValid()) {
- QString str = data(ChatLineModel::DisplayRole).toString().mid(click.start(), click.length());
- switch(click.type()) {
- case Clickable::Url:
- if(!str.contains("://"))
- str = "http://" + str;
- QDesktopServices::openUrl(QUrl::fromEncoded(str.toUtf8(), QUrl::TolerantMode));
- break;
- case Clickable::Channel: {
- NetworkId networkId = Client::networkModel()->networkId(data(MessageModel::BufferIdRole).value<BufferId>());
- BufferId bufId = Client::networkModel()->bufferId(networkId, str);
- if(bufId.isValid()) {
- QModelIndex targetIdx = Client::networkModel()->bufferIndex(bufId);
- Client::bufferModel()->switchToBuffer(bufId);
- if(!targetIdx.data(NetworkModel::ItemActiveRole).toBool())
- Client::userInput(BufferInfo::fakeStatusBuffer(networkId), QString("/JOIN %1").arg(str));
- } else
- Client::userInput(BufferInfo::fakeStatusBuffer(networkId), QString("/JOIN %1").arg(str));
- break;
- }
- default:
- break;
- }
+ qint16 idx = posToCursor(pos);
+ Clickable foo = privateData()->clickables.atCursorPos(idx);
+ if(foo.isValid()) {
+ NetworkId networkId = Client::networkModel()->networkId(data(MessageModel::BufferIdRole).value<BufferId>());
+ QString text = data(ChatLineModel::DisplayRole).toString();
+ foo.activate(networkId, text);