- // item-specific options (select link etc)
- ChatItem *item = chatItemAt(pos);
- if(item)
- item->addActionsToMenu(&menu, item->mapFromScene(pos));
- else
- // no item -> default scene actions
- GraphicalUi::contextMenuActionProvider()->addActions(&menu, filter(), BufferId());
+void ChatScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
+{
+ QPointF pos = event->scenePos();
+ QMenu menu;
+
+ // zoom actions and similar
+ chatView()->addActionsToMenu(&menu, pos);
+ menu.addSeparator();
+
+ // item-specific options (select link etc)
+ ChatItem *item = chatItemAt(pos);
+ if (item)
+ item->addActionsToMenu(&menu, item->mapFromScene(pos));
+ else
+ // no item -> default scene actions
+ GraphicalUi::contextMenuActionProvider()->addActions(&menu, filter(), BufferId());
+
+ // If we have text selected, insert the Copy Selection as first item
+ if (isPosOverSelection(pos)) {
+ QAction *sep = menu.insertSeparator(menu.actions().first());
+ QAction *act = new Action(QIcon::fromTheme("edit-copy"), tr("Copy Selection"), &menu, this,
+ SLOT(selectionToClipboard()), QKeySequence::Copy);
+ menu.insertAction(sep, act);
+
+ QString searchSelectionText = selection();
+ if (searchSelectionText.length() > _webSearchSelectionTextMaxVisible)
+ searchSelectionText = searchSelectionText.left(_webSearchSelectionTextMaxVisible).append(QString::fromUtf8("…"));
+ searchSelectionText = tr("Search '%1'").arg(searchSelectionText);
+
+ QAction *webSearchAction = new Action(QIcon::fromTheme("edit-find"), searchSelectionText, &menu, this, SLOT(webSearchOnSelection()));
+ menu.insertAction(sep, webSearchAction);
+ }