X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchatitem.cpp;h=be792c97917e7327e60e316e27817b883a5261ed;hp=b629a263c049252040f575c8cbacd3d81d0fdac0;hb=7ea9c498bfb975a95c11d6ddc28835840cf3353d;hpb=db511df7b183771ae444f14d0aca42381ee0ae37 diff --git a/src/qtui/chatitem.cpp b/src/qtui/chatitem.cpp index b629a263..be792c97 100644 --- a/src/qtui/chatitem.cpp +++ b/src/qtui/chatitem.cpp @@ -509,7 +509,7 @@ void ContentsChatItem::handleClick(const QPointF &pos, ChatScene::ClickMode clic case Clickable::Url: if(!str.contains("://")) str = "http://" + str; - QDesktopServices::openUrl(QUrl::fromEncoded(str.toUtf8(), QUrl::TolerantMode)); + QDesktopServices::openUrl(QUrl::fromEncoded(str.toUtf8(), QUrl::TolerantMode)); break; case Clickable::Channel: // TODO join or whatever... @@ -561,8 +561,11 @@ void ContentsChatItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event) { onClickable = true; showWebPreview(click); } else if(click.type == Clickable::Channel) { - // TODO: don't make clickable if it's our own name - // onClickable = true; //FIXME disabled for now + // don't make clickable if it's our own name + QString name = data(ChatLineModel::DisplayRole).toString().mid(click.start, click.length); + BufferId myId = data(MessageModel::BufferIdRole).value(); + if(Client::networkModel()->bufferName(myId) != name) + onClickable = true; } if(onClickable) { setCursor(Qt::PointingHandCursor); @@ -579,28 +582,29 @@ void ContentsChatItem::addActionsToMenu(QMenu *menu, const QPointF &pos) { Q_UNUSED(pos); // we assume that the current mouse cursor pos is the point of invocation if(privateData()->currentClickable.isValid()) { - switch(privateData()->currentClickable.type) { + Clickable click = privateData()->currentClickable; + switch(click.type) { case Clickable::Url: - privateData()->activeClickable = privateData()->currentClickable; + privateData()->activeClickable = click; menu->addAction(SmallIcon("edit-copy"), tr("Copy Link Address"), &_actionProxy, SLOT(copyLinkToClipboard()))->setData(QVariant::fromValue(this)); break; - + case Clickable::Channel: { + // Hide existing menu actions, they confuse us when right-clicking on a clickable + foreach(QAction *action, menu->actions()) + action->setVisible(false); + QString name = data(ChatLineModel::DisplayRole).toString().mid(click.start, click.length); + Client::mainUi()->actionProvider()->addActions(menu, chatScene()->filter(), data(MessageModel::BufferIdRole).value(), name); + break; + } default: break; } - } + } else { - // Buffer-specific actions - // We add these in ChatItem (rather than the scene), because they depend on the current clickable - if(chatScene()->isSingleBufferScene()) { - QModelIndex index = Client::networkModel()->bufferIndex(chatScene()->singleBufferId()); - if(index.isValid()) { - menu->addSeparator(); - QtUi::mainWindow()->allBuffersView()->addActionsToMenu(menu, index); - } + // Buffer-specific actions + Client::mainUi()->actionProvider()->addActions(menu, chatScene()->filter(), data(MessageModel::BufferIdRole).value()); } - } void ContentsChatItem::copyLinkToClipboard() {