matrixion/resources/qml/dialogs/IgnoredUsers.qml
Reilly Brogan c9f1a449d8
linux: Use kirigami mouse handling if available
Qt6 changed the mouse scroll wheel handling for QtQuick to a type that mimics how touch pads/screens work, which most people find feels very poor. KDE fixes this by creating a custom type which re-implements the QtWidgets handling (see https://invent.kde.org/frameworks/kirigami/-/merge_requests/415).

On Matrix Nico has expressed a desire not to have to deal with compiling Kirigami for Windows and Mac, which is understandable. Linux users on the other hand almost always have kirigami available in their package repos which sidesteps that particular issue. We can search for Kirigami at build time and if present define a QML context property to allow it to be used, which should fix this issue for Linux users at least.

Helps with nheko-reborn/nheko#1819 (which won't be completely resolved until this is working for Windows and Mac as well).

Signed-off-by: Reilly Brogan <reilly@reillybrogan.com>
2024-11-05 15:37:54 -06:00

88 lines
2.4 KiB
QML

// SPDX-FileCopyrightText: Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later
import QtQml
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import im.nheko
import "../"
Window {
id: ignoredUsers
title: qsTr("Ignored users")
flags: Qt.WindowCloseButtonHint | Qt.WindowTitleHint
height: 650
width: 420
minimumHeight: 420
color: palette.window
ListView {
id: view
anchors.fill: parent
spacing: Nheko.paddingMedium
footerPositioning: ListView.OverlayFooter
Loader {
source: NHEKO_USE_KIRIGAMI ? "../components/KirigamiWheelHandler.qml" : ""
}
model: TimelineManager.ignoredUsers
header: ColumnLayout {
Text {
Layout.fillWidth: true
Layout.maximumWidth: view.width
wrapMode: Text.Wrap
color: palette.text
text: qsTr("Ignoring a user hides their messages (they can still see yours!).")
}
Item { Layout.preferredHeight: Nheko.paddingLarge }
}
delegate: RowLayout {
property var profile: TimelineManager.getGlobalUserProfile(modelData)
width: view.width
Avatar {
enabled: false
displayName: profile.displayName
userid: profile.userid
url: profile.avatarUrl.replace("mxc://", "image://MxcImage/")
}
Text {
Layout.fillWidth: true
Layout.alignment: Qt.AlignLeft
elide: Text.ElideRight
color: palette.text
text: modelData
}
ImageButton {
Layout.preferredHeight: 24
Layout.preferredWidth: 24
image: ":/icons/icons/ui/dismiss.svg"
hoverEnabled: true
ToolTip.visible: hovered
ToolTip.text: qsTr("Stop Ignoring.")
onClicked: profile.ignored = false
}
}
footer: DialogButtonBox {
z: 2
width: view.width
alignment: Qt.AlignRight
standardButtons: DialogButtonBox.Ok
onAccepted: ignoredUsers.close()
background: Rectangle {
anchors.fill: parent
color: palette.window
}
}
}
}