client: Fix Chat Monitor missing sender brackets
authorShane Synan <digitalcircuit36939@gmail.com>
Fri, 22 Sep 2017 23:56:49 +0000 (18:56 -0500)
committerManuel Nickschas <sputnick@quassel-irc.org>
Mon, 5 Feb 2018 00:28:02 +0000 (01:28 +0100)
Always re-add hidden sender brackets for the Chat Monitor as the
normal sender prefixes get replaced with Network, Buffer, and Sender
names.

Sender brackets shown:
> Copy-pasted
  Chat Monitor: <Bitlbee:#channel> digitalcircuit does things
  Channel:      -*- digitalcircuit does things

Before:
> Copy-pasted with sender brackets hidden (wrong)
  Chat Monitor: Bitlbee:#channel digitalcircuit does things
  Channel:      -*- digitalcircuit does things

After:
> Copy-pasted with sender brackets hidden (correct)
  Chat Monitor: <Bitlbee:#channel> digitalcircuit does things
  Channel:      -*- digitalcircuit does things

Closes GH-314.

src/qtui/chatmonitorview.cpp
src/qtui/chatscene.cpp
src/qtui/chatscene.h

index 642fa81..5efceff 100644 (file)
@@ -43,6 +43,9 @@ ChatMonitorView::ChatMonitorView(ChatMonitorFilter *filter, QWidget *parent)
     _filter(filter)
 {
     scene()->setSenderCutoffMode(ChatScene::CutoffLeft);
+    // The normal message prefixes get replaced by the network and buffer name.  Re-add brackets for
+    // all message types.
+    scene()->setAlwaysBracketSender(true);
     connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), this, SLOT(coreConnectionStateChanged(bool)));
 }
 
index d609f0a..1588f4d 100644 (file)
@@ -75,6 +75,7 @@ ChatScene::ChatScene(QAbstractItemModel *model, const QString &idString, qreal w
     _markerLineValid(false),
     _markerLineJumpPending(false),
     _cutoffMode(CutoffRight),
+    _alwaysBracketSender(false),
     _selectingItem(0),
     _selectionStart(-1),
     _isSelecting(false),
@@ -1050,9 +1051,14 @@ QString ChatScene::selection() const
             }
             if (_selectionMinCol <= ChatLineModel::SenderColumn) {
                 ChatItem *item = _lines[l]->item(ChatLineModel::SenderColumn);
-                if (!_showSenderBrackets && item->chatLine()->msgType() == Message::Plain) {
-                    // Copying to plain-text.  Only re-add the sender brackets if they're normally
-                    // hidden.
+                if (!_showSenderBrackets && (_alwaysBracketSender
+                                             || item->chatLine()->msgType() == Message::Plain)) {
+                    // Copying to plain-text.  Re-add the sender brackets if they're normally hidden
+                    // for...
+                    // * Plain messages
+                    // * All messages in the Chat Monitor
+                    //
+                    // The Chat Monitor sets alwaysBracketSender() to true.
                     result += QString("<%1> ").arg(item->data(MessageModel::DisplayRole)
                                                    .toString());
                 } else {
index 4e90951..117fb86 100644 (file)
@@ -116,6 +116,23 @@ public:
     inline CutoffMode senderCutoffMode() const { return _cutoffMode; }
     inline void setSenderCutoffMode(CutoffMode mode) { _cutoffMode = mode; }
 
+    /**
+     * Gets whether to re-add hidden brackets around sender for all message types
+     *
+     * Used within the Chat Monitor as the normal message prefixes are overridden.
+     *
+     * @return Whether to re-add hidden brackets around sender for all message types
+     */
+    inline bool alwaysBracketSender() const { return _alwaysBracketSender; }
+    /**
+     * Sets whether to re-add hidden brackets around sender for all message types
+     *
+     * @see ChatScene::alwaysBracketSender()
+     *
+     * @param brackets Sets whether to re-add hidden brackets around sender for all message types
+     */
+    inline void setAlwaysBracketSender(bool alwaysBracket) { _alwaysBracketSender = alwaysBracket; }
+
     QString selection() const;
     bool hasSelection() const;
     bool hasGlobalSelection() const;
@@ -234,6 +251,8 @@ private:
     qreal _firstColHandlePos, _secondColHandlePos;
     int _defaultFirstColHandlePos, _defaultSecondColHandlePos;
     CutoffMode _cutoffMode;
+    /// Whether to re-add hidden brackets around sender for all message types
+    bool _alwaysBracketSender;
 
     ChatItem *_selectingItem;
     int _selectionStartCol, _selectionMinCol;