diff --git a/resources/qml/RoomList.qml b/resources/qml/RoomList.qml
index 979e727d..cde744c5 100644
--- a/resources/qml/RoomList.qml
+++ b/resources/qml/RoomList.qml
@@ -212,6 +212,16 @@ Page {
Layout.preferredHeight: userInfoGrid.implicitHeight + 2 * Nheko.paddingMedium
Layout.minimumHeight: 40
+ TapHandler {
+ onSingleTapped: {
+ Nheko.updateUserProfile();
+ var userProfile = userProfileComponent.createObject(timelineRoot, {
+ "profile": Nheko.currentUser
+ });
+ userProfile.show();
+ }
+ }
+
RowLayout {
id: userInfoGrid
diff --git a/resources/qml/RoomSettings.qml b/resources/qml/RoomSettings.qml
index 14de0edf..1f7fe5de 100644
--- a/resources/qml/RoomSettings.qml
+++ b/resources/qml/RoomSettings.qml
@@ -20,7 +20,7 @@ ApplicationWindow {
minimumHeight: 650
palette: Nheko.colors
color: Nheko.colors.window
- modality: Qt.WindowModal
+ modality: Qt.NonModal
flags: Qt.Dialog
title: qsTr("Room Settings")
@@ -205,7 +205,7 @@ ApplicationWindow {
title: qsTr("End-to-End Encryption")
text: qsTr("Encryption is currently experimental and things might break unexpectedly.
Please take note that it can't be disabled afterwards.")
- modality: Qt.WindowModal
+ modality: Qt.NonModal
onAccepted: {
if (roomSettings.isEncryptionEnabled)
return ;
diff --git a/resources/qml/UserProfile.qml b/resources/qml/UserProfile.qml
index 4e5e64dc..21f34f15 100644
--- a/resources/qml/UserProfile.qml
+++ b/resources/qml/UserProfile.qml
@@ -22,7 +22,7 @@ ApplicationWindow {
palette: Nheko.colors
color: Nheko.colors.window
title: profile.isGlobalUserProfile ? qsTr("Global User Profile") : qsTr("Room User Profile")
- modality: Qt.WindowModal
+ modality: Qt.NonModal
flags: Qt.Dialog
Shortcut {
diff --git a/resources/qml/device-verification/DeviceVerification.qml b/resources/qml/device-verification/DeviceVerification.qml
index 6d0be204..e2c66c5a 100644
--- a/resources/qml/device-verification/DeviceVerification.qml
+++ b/resources/qml/device-verification/DeviceVerification.qml
@@ -15,7 +15,7 @@ ApplicationWindow {
onClosing: TimelineManager.removeVerificationFlow(flow)
title: stack.currentItem.title
flags: Qt.Dialog
- modality: Qt.WindowModal
+ modality: Qt.NonModal
palette: Nheko.colors
height: stack.implicitHeight
width: stack.implicitWidth
diff --git a/src/Cache.cpp b/src/Cache.cpp
index d8c78381..c41b66cc 100644
--- a/src/Cache.cpp
+++ b/src/Cache.cpp
@@ -3469,6 +3469,7 @@ Cache::updateUserKeys(const std::string &sync_token, const mtx::responses::Query
}
}
}
+
for (auto &[user_id, update] : updates) {
(void)update;
if (user_id == local_user) {
@@ -3476,9 +3477,8 @@ Cache::updateUserKeys(const std::string &sync_token, const mtx::responses::Query
(void)status;
emit verificationStatusChanged(user);
}
- } else {
- emit verificationStatusChanged(user_id);
}
+ emit verificationStatusChanged(user_id);
}
}
@@ -3552,6 +3552,19 @@ Cache::query_keys(const std::string &user_id,
last_changed = cache_->last_changed;
req.token = last_changed;
+ // use context object so that we can disconnect again
+ QObject *context{new QObject(this)};
+ QObject::connect(this,
+ &Cache::verificationStatusChanged,
+ context,
+ [cb, user_id, context_ = context](std::string updated_user) mutable {
+ if (user_id == updated_user) {
+ context_->deleteLater();
+ auto keys = cache::userKeys(user_id);
+ cb(keys.value_or(UserKeyCache{}), {});
+ }
+ });
+
http::client()->query_keys(
req,
[cb, user_id, last_changed, this](const mtx::responses::QueryKeys &res,
@@ -3565,21 +3578,6 @@ Cache::query_keys(const std::string &user_id,
}
emit userKeysUpdate(last_changed, res);
-
- // use context object so that we can disconnect again
- std::unique_ptr context{new QObject};
- QObject *pcontext = context.get();
- QObject::connect(
- this,
- &Cache::verificationStatusChanged,
- pcontext,
- [cb, user_id, context_ = std::move(context)](std::string updated_user) mutable {
- if (user_id == updated_user) {
- context_.release();
- auto keys = cache::userKeys(user_id);
- cb(keys.value_or(UserKeyCache{}), {});
- }
- });
});
}
diff --git a/src/ui/NhekoGlobalObject.h b/src/ui/NhekoGlobalObject.h
index fe645a34..fc35fe22 100644
--- a/src/ui/NhekoGlobalObject.h
+++ b/src/ui/NhekoGlobalObject.h
@@ -40,7 +40,7 @@ public:
Q_INVOKABLE void openLink(QString link) const;
-private slots:
+public slots:
void updateUserProfile();
signals:
diff --git a/src/ui/UserProfile.cpp b/src/ui/UserProfile.cpp
index cef8bd85..da130242 100644
--- a/src/ui/UserProfile.cpp
+++ b/src/ui/UserProfile.cpp
@@ -42,7 +42,6 @@ UserProfile::UserProfile(QString roomid,
if (!cache::client() || !cache::client()->isDatabaseReady())
return;
- fetchDeviceList(this->userid_);
connect(cache::client(),
&Cache::verificationStatusChanged,
this,
@@ -66,7 +65,9 @@ UserProfile::UserProfile(QString roomid,
: verification::VERIFIED;
}
deviceList_.reset(deviceList_.deviceList_);
+ emit devicesChanged();
});
+ fetchDeviceList(this->userid_);
}
QHash
@@ -223,6 +224,7 @@ UserProfile::fetchDeviceList(const QString &userID)
}
this->deviceList_.queueReset(std::move(deviceInfo));
+ emit devicesChanged();
});
});
}
diff --git a/src/ui/UserProfile.h b/src/ui/UserProfile.h
index bf71d0de..721d7230 100644
--- a/src/ui/UserProfile.h
+++ b/src/ui/UserProfile.h
@@ -90,7 +90,7 @@ class UserProfile : public QObject
Q_PROPERTY(QString displayName READ displayName NOTIFY displayNameChanged)
Q_PROPERTY(QString userid READ userid CONSTANT)
Q_PROPERTY(QString avatarUrl READ avatarUrl NOTIFY avatarUrlChanged)
- Q_PROPERTY(DeviceInfoModel *deviceList READ deviceList CONSTANT)
+ Q_PROPERTY(DeviceInfoModel *deviceList READ deviceList NOTIFY devicesChanged)
Q_PROPERTY(bool isGlobalUserProfile READ isGlobalUserProfile CONSTANT)
Q_PROPERTY(int userVerified READ getUserStatus NOTIFY userStatusChanged)
Q_PROPERTY(bool isLoading READ isLoading NOTIFY loadingChanged)
@@ -133,6 +133,7 @@ signals:
void avatarUrlChanged();
void displayError(const QString &errorMessage);
void globalUsernameRetrieved(const QString &globalUser);
+ void devicesChanged();
public slots:
void updateAvatarUrl();