diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index e1e2b681..b7d2bfb1 100644
--- a/src/timeline/TimelineViewManager.cpp
+++ b/src/timeline/TimelineViewManager.cpp
@@ -21,6 +21,7 @@
#include "dialogs/ImageOverlay.h"
#include "emoji/EmojiModel.h"
#include "emoji/Provider.h"
+#include "ui/NhekoCursorShape.h"
#include "ui/NhekoDropArea.h"
#include <iostream> //only for debugging
@@ -118,6 +119,7 @@ TimelineViewManager::TimelineViewManager(CallManager *callManager, ChatPage *par
qmlRegisterType<DelegateChoice>("im.nheko", 1, 0, "DelegateChoice");
qmlRegisterType<DelegateChooser>("im.nheko", 1, 0, "DelegateChooser");
qmlRegisterType<NhekoDropArea>("im.nheko", 1, 0, "NhekoDropArea");
+ qmlRegisterType<NhekoCursorShape>("im.nheko", 1, 0, "CursorShape");
qmlRegisterUncreatableType<DeviceVerificationFlow>(
"im.nheko", 1, 0, "DeviceVerificationFlow", "Can't create verification flow from QML!");
qmlRegisterUncreatableType<UserProfile>(
@@ -548,4 +550,4 @@ void
TimelineViewManager::focusMessageInput()
{
emit focusInput();
-}
\ No newline at end of file
+}
diff --git a/src/ui/NhekoCursorShape.cpp b/src/ui/NhekoCursorShape.cpp
new file mode 100644
index 00000000..06b0a321
--- /dev/null
+++ b/src/ui/NhekoCursorShape.cpp
@@ -0,0 +1,25 @@
+#include "NhekoCursorShape.h"
+
+#include <QCursor>
+
+NhekoCursorShape::NhekoCursorShape(QQuickItem *parent)
+ : QQuickItem(parent)
+ , currentShape_(Qt::CursorShape::ArrowCursor)
+{}
+
+Qt::CursorShape
+NhekoCursorShape::cursorShape() const
+{
+ return cursor().shape();
+}
+
+void
+NhekoCursorShape::setCursorShape(Qt::CursorShape cursorShape)
+{
+ if (currentShape_ == cursorShape)
+ return;
+
+ currentShape_ = cursorShape;
+ setCursor(cursorShape);
+ emit cursorShapeChanged();
+}
diff --git a/src/ui/NhekoCursorShape.h b/src/ui/NhekoCursorShape.h
new file mode 100644
index 00000000..2eab5e42
--- /dev/null
+++ b/src/ui/NhekoCursorShape.h
@@ -0,0 +1,26 @@
+#pragma once
+
+// see
+// https://stackoverflow.com/questions/27821054/how-to-change-cursor-shape-in-qml-when-mousearea-is-covered-with-another-mousear/29382092#29382092
+
+#include <QQuickItem>
+
+class NhekoCursorShape : public QQuickItem
+{
+ Q_OBJECT
+
+ Q_PROPERTY(Qt::CursorShape cursorShape READ cursorShape WRITE setCursorShape NOTIFY
+ cursorShapeChanged)
+
+public:
+ explicit NhekoCursorShape(QQuickItem *parent = 0);
+
+private:
+ Qt::CursorShape cursorShape() const;
+ void setCursorShape(Qt::CursorShape cursorShape);
+
+ Qt::CursorShape currentShape_;
+
+signals:
+ void cursorShapeChanged();
+};
|