From b8ce9d543d730b912245015591cfa2cb892af657 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 15 Dec 2020 00:17:44 +0100 Subject: [PATCH] Fix scrolling the room list using touch --- src/RoomInfoListItem.cpp | 60 ++++++++++++++++++++-------------------- src/RoomList.cpp | 2 ++ 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/src/RoomInfoListItem.cpp b/src/RoomInfoListItem.cpp index 985ab1b9..0acfcc90 100644 --- a/src/RoomInfoListItem.cpp +++ b/src/RoomInfoListItem.cpp @@ -484,37 +484,37 @@ RoomInfoListItem::mousePressEvent(QMouseEvent *event) if (event->buttons() == Qt::RightButton) { QWidget::mousePressEvent(event); return; + } else if (event->buttons() == Qt::LeftButton) { + if (roomType_ == RoomType::Invited) { + const auto point = event->pos(); + + if (acceptBtnRegion_.contains(point)) + emit acceptInvite(roomId_); + + if (declineBtnRegion_.contains(point)) + emit declineInvite(roomId_); + + return; + } + + emit clicked(roomId_); + + setPressedState(true); + + // Ripple on mouse position by default. + QPoint pos = event->pos(); + qreal radiusEndValue = static_cast(width()) / 3; + + Ripple *ripple = new Ripple(pos); + + ripple->setRadiusEndValue(radiusEndValue); + ripple->setOpacityStartValue(0.15); + ripple->setColor(QColor("white")); + ripple->radiusAnimation()->setDuration(200); + ripple->opacityAnimation()->setDuration(400); + + ripple_overlay_->addRipple(ripple); } - - if (roomType_ == RoomType::Invited) { - const auto point = event->pos(); - - if (acceptBtnRegion_.contains(point)) - emit acceptInvite(roomId_); - - if (declineBtnRegion_.contains(point)) - emit declineInvite(roomId_); - - return; - } - - emit clicked(roomId_); - - setPressedState(true); - - // Ripple on mouse position by default. - QPoint pos = event->pos(); - qreal radiusEndValue = static_cast(width()) / 3; - - Ripple *ripple = new Ripple(pos); - - ripple->setRadiusEndValue(radiusEndValue); - ripple->setOpacityStartValue(0.15); - ripple->setColor(QColor("white")); - ripple->radiusAnimation()->setDuration(200); - ripple->opacityAnimation()->setDuration(400); - - ripple_overlay_->addRipple(ripple); } void diff --git a/src/RoomList.cpp b/src/RoomList.cpp index 8c9e296f..aab89491 100644 --- a/src/RoomList.cpp +++ b/src/RoomList.cpp @@ -45,8 +45,10 @@ RoomList::RoomList(QSharedPointer userSettings, QWidget *parent) scrollArea_->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); scrollArea_->setWidgetResizable(true); scrollArea_->setAlignment(Qt::AlignLeading | Qt::AlignTop | Qt::AlignVCenter); + scrollArea_->setAttribute(Qt::WA_AcceptTouchEvents); QScroller::grabGesture(scrollArea_, QScroller::TouchGesture); + QScroller::grabGesture(scrollArea_, QScroller::LeftMouseButtonGesture); // The scrollbar on macOS will hide itself when not active so it won't interfere // with the content.