-void ContentsChatItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) {
- qint16 idx = posToCursor(event->pos());
- for(int i = 0; i < privateData()->clickables.count(); i++) {
- Clickable click = privateData()->clickables.at(i);
- if(idx >= click.start && idx < click.start + click.length) {
- if(click.type == Clickable::Url) {
- QMenu menu;
- QAction *copyToClipboard = menu.addAction(QObject::tr("Copy to Clipboard"));
- QAction *selected = menu.exec(event->screenPos());
- if(selected == copyToClipboard) {
- QString url = data(ChatLineModel::DisplayRole).toString().mid(click.start, click.length);
-# ifdef Q_WS_X11
- QApplication::clipboard()->setText(url, QClipboard::Selection);
-# endif
-//# else
- QApplication::clipboard()->setText(url);
-//# endif
- }
+void ContentsChatItem::addActionsToMenu(QMenu *menu, const QPointF &pos) {
+ if(privateData()->currentClickable.isValid()) {
+ Clickable click = privateData()->currentClickable;
+ switch(click.type) {
+ case Clickable::Url:
+ privateData()->activeClickable = click;
+ menu->addAction(SmallIcon("edit-copy"), tr("Copy Link Address"),
+ &_actionProxy, SLOT(copyLinkToClipboard()))->setData(QVariant::fromValue<void *>(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<BufferId>(), name);
+ break;