Fix-up QR code scanning actions

I cleaned up how resolving QR codes work, I made sure to test both user
and room links and everything works great.

A more awkward bug I fixed is
a workaround around a quirk in Kirigami.Dialog, but actually regresses
QR codes. Because the QR code scanner is currently an extra window (at
least on desktop) the UserDetailDialog will reparent itself to the
soon-to-be-destroyed scanner window.
This commit is contained in:
Joshua Goins
2025-09-09 17:11:11 +02:00
parent 3b419e18a3
commit 81e5061831
2 changed files with 15 additions and 4 deletions

View File

@@ -358,7 +358,11 @@ Kirigami.ApplicationWindow {
user: user,
connection: root.connection,
}) as UserDetailDialog;
dialog.parent = QmlUtils.focusedWindowItem(); // Kirigami Dialogs overwrite the parent, so we need to set it again
// FIXME: The reason why we don't want the focusedWindowItem for the room null case (aka QR codes) is because it will parent it to the soon-to-be-destroyed window item.
// But this won't be a problem if we turn it into a Kirigami.Dialog or some other in-scene item, which it really should be.
if (room != null) {
dialog.parent = QmlUtils.focusedWindowItem(); // Kirigami Dialogs overwrite the parent, so we need to set it again
}
dialog.open();
}

View File

@@ -209,9 +209,16 @@ void RoomManager::resolveResource(Uri uri, const QString &action)
return;
}
if (uri.type() == Uri::NonMatrix && action == "qr"_L1) {
Q_EMIT externalUrl(uri.toUrl());
return;
if (action == "qr"_L1) {
if (uri.type() == Uri::NonMatrix) {
Q_EMIT externalUrl(uri.toUrl());
return;
}
if (uri.type() != Uri::UserId) {
uri.setAction(QStringLiteral("join"));
} else {
uri.setAction(action);
}
}
// For matrix URIs: