From b8ce9d543d730b912245015591cfa2cb892af657 Mon Sep 17 00:00:00 2001
From: Nicolas Werner <nicolas.werner@hotmail.de>
Date: Tue, 15 Dec 2020 00:17:44 +0100
Subject: [PATCH] Fix scrolling the room list using touch

---
 src/RoomInfoListItem.cpp | 44 ++++++++++++++++++++--------------------
 src/RoomList.cpp         |  2 ++
 2 files changed, 24 insertions(+), 22 deletions(-)

diff --git a/src/RoomInfoListItem.cpp b/src/RoomInfoListItem.cpp
index 985ab1b93..0acfcc902 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;
-        }
-
-        if (roomType_ == RoomType::Invited) {
-                const auto point = event->pos();
+        } else if (event->buttons() == Qt::LeftButton) {
+                if (roomType_ == RoomType::Invited) {
+                        const auto point = event->pos();
 
-                if (acceptBtnRegion_.contains(point))
-                        emit acceptInvite(roomId_);
+                        if (acceptBtnRegion_.contains(point))
+                                emit acceptInvite(roomId_);
 
-                if (declineBtnRegion_.contains(point))
-                        emit declineInvite(roomId_);
+                        if (declineBtnRegion_.contains(point))
+                                emit declineInvite(roomId_);
 
-                return;
-        }
+                        return;
+                }
 
-        emit clicked(roomId_);
+                emit clicked(roomId_);
 
-        setPressedState(true);
+                setPressedState(true);
 
-        // Ripple on mouse position by default.
-        QPoint pos           = event->pos();
-        qreal radiusEndValue = static_cast<qreal>(width()) / 3;
+                // Ripple on mouse position by default.
+                QPoint pos           = event->pos();
+                qreal radiusEndValue = static_cast<qreal>(width()) / 3;
 
-        Ripple *ripple = new Ripple(pos);
+                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->setRadiusEndValue(radiusEndValue);
+                ripple->setOpacityStartValue(0.15);
+                ripple->setColor(QColor("white"));
+                ripple->radiusAnimation()->setDuration(200);
+                ripple->opacityAnimation()->setDuration(400);
 
-        ripple_overlay_->addRipple(ripple);
+                ripple_overlay_->addRipple(ripple);
+        }
 }
 
 void
diff --git a/src/RoomList.cpp b/src/RoomList.cpp
index 8c9e296fd..aab89491c 100644
--- a/src/RoomList.cpp
+++ b/src/RoomList.cpp
@@ -45,8 +45,10 @@ RoomList::RoomList(QSharedPointer<UserSettings> 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.
-- 
GitLab