Don't quote URLs, fixes BR #379
[quassel.git] / src / qtui / chatitem.cpp
index 585c958..b04083b 100644 (file)
@@ -26,6 +26,8 @@
 #include <QPainter>
 #include <QPalette>
 #include <QTextLayout>
+#include <QMenu>
+
 
 #include "chatitem.h"
 #include "chatlinemodel.h"
@@ -277,7 +279,7 @@ void SenderChatItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *op
     // Draw a nice gradient for longer items
     // Qt's text drawing with a gradient brush sucks, so we use an alpha-channeled pixmap instead
     QPixmap pixmap(QSize(layout()->boundingRect().width(), layout()->boundingRect().height()));
-    pixmap.fill(QApplication::palette().brush(QPalette::Base).color());
+    pixmap.fill(Qt::transparent);
     QPainter pixPainter(&pixmap);
     layout()->draw(&pixPainter, QPointF(qMax(offset, (qreal)0), 0), QVector<QTextLayout::FormatRange>() << selectFmt);
     pixPainter.end();
@@ -455,7 +457,7 @@ void ContentsChatItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
         case Clickable::Url:
          if(!str.contains("://"))
            str = "http://" + str;
-          QDesktopServices::openUrl(str);
+          QDesktopServices::openUrl(QUrl::fromEncoded(str.toAscii()));
           break;
         case Clickable::Channel:
           // TODO join or whatever...
@@ -508,6 +510,29 @@ void ContentsChatItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event) {
   event->accept();
 }
 
+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::showWebPreview(const Clickable &click) {
 #ifdef HAVE_WEBKIT
   QTextLine line = layout()->lineForTextPosition(click.start);