Added triple-clicking next to message to select whole message.

This commit is contained in:
Cranken 2018-10-02 13:41:34 +02:00 committed by pajlada
parent 5c2cdce516
commit c8326d73e7
2 changed files with 20 additions and 15 deletions

View file

@ -951,7 +951,6 @@ void ChannelView::mousePressEvent(QMouseEvent *event)
} }
int index = layout->getSelectionIndex(relativePos); int index = layout->getSelectionIndex(relativePos);
auto selectionItem = SelectionItem(messageIndex, index); auto selectionItem = SelectionItem(messageIndex, index);
this->setSelection(selectionItem, selectionItem); this->setSelection(selectionItem, selectionItem);
} break; } break;
@ -1022,18 +1021,22 @@ void ChannelView::mouseReleaseEvent(QMouseEvent *event)
const MessageLayoutElement *hoverLayoutElement = const MessageLayoutElement *hoverLayoutElement =
layout->getElementAt(relativePos); layout->getElementAt(relativePos);
// Triple-click next to message selects whole message
if (this->clickTimer_->isActive() && this->selecting_) {
this->selectWholeMessage(layout.get(), messageIndex);
}
if (hoverLayoutElement == nullptr) { if (hoverLayoutElement == nullptr) {
return; return;
} }
// handle the click // handle the click
this->handleMouseClick(event, hoverLayoutElement, layout.get(), this->handleMouseClick(event, hoverLayoutElement, layout.get());
messageIndex);
} }
void ChannelView::handleMouseClick(QMouseEvent *event, void ChannelView::handleMouseClick(QMouseEvent *event,
const MessageLayoutElement *hoveredElement, const MessageLayoutElement *hoveredElement,
MessageLayout *layout, int &messageIndex) MessageLayout *layout)
{ {
switch (event->button()) { switch (event->button()) {
case Qt::LeftButton: { case Qt::LeftButton: {
@ -1043,16 +1046,6 @@ void ChannelView::handleMouseClick(QMouseEvent *event,
this->showingLatestMessages_ = false; this->showingLatestMessages_ = false;
} }
if (this->clickTimer_->isActive()) {
auto firstRealCharacterIndex =
layout->getFirstMessageCharacterIndex();
SelectionItem msgStart(messageIndex,
firstRealCharacterIndex);
SelectionItem msgEnd(messageIndex,
layout->getLastCharacterIndex());
this->setSelection(msgStart, msgEnd);
}
// this->pausedBySelection = false; // this->pausedBySelection = false;
this->selecting_ = false; this->selecting_ = false;
// this->pauseTimeout.stop(); // this->pauseTimeout.stop();
@ -1195,6 +1188,9 @@ void ChannelView::mouseDoubleClickEvent(QMouseEvent *event)
layout->getElementAt(relativePos); layout->getElementAt(relativePos);
if (hoverLayoutElement == nullptr) { if (hoverLayoutElement == nullptr) {
// Possibility for triple click which doesn't have to be over an
// existing layout element
this->clickTimer_->start();
return; return;
} }
if (!this->isMouseDown_) { if (!this->isMouseDown_) {
@ -1307,4 +1303,12 @@ int ChannelView::getLayoutWidth() const
return this->width(); return this->width();
} }
void ChannelView::selectWholeMessage(MessageLayout *layout, int &messageIndex)
{
SelectionItem msgStart(messageIndex,
layout->getFirstMessageCharacterIndex());
SelectionItem msgEnd(messageIndex, layout->getLastCharacterIndex());
this->setSelection(msgStart, msgEnd);
}
} // namespace chatterino } // namespace chatterino

View file

@ -105,10 +105,11 @@ private:
void setSelection(const SelectionItem &start, const SelectionItem &end); void setSelection(const SelectionItem &start, const SelectionItem &end);
MessageElementFlags getFlags() const; MessageElementFlags getFlags() const;
bool isPaused(); bool isPaused();
void selectWholeMessage(MessageLayout *layout, int &messageIndex);
void handleMouseClick(QMouseEvent *event, void handleMouseClick(QMouseEvent *event,
const MessageLayoutElement *hoverLayoutElement, const MessageLayoutElement *hoverLayoutElement,
MessageLayout *layout, int &messageIndex); MessageLayout *layout);
void addContextMenuItems(const MessageLayoutElement *hoveredElement, void addContextMenuItems(const MessageLayoutElement *hoveredElement,
MessageLayout *layout); MessageLayout *layout);
int getLayoutWidth() const; int getLayoutWidth() const;