Guard avatar upload controls across nested file and crop dialogs

This commit is contained in:
evgeny committed 2026-10-27 12:15:17 +01:00
1 parent 9c782be562
commit 0a69864d10
1 file changed
+14 -5
+14 -5
View File
@@ -35,6 +35,8 @@ extern "C" {
#include <QTextStream>
#include <QMessageBox>
#include <QFileDialog>
#include <QPointer>
#include <QScopeGuard>
#include <QScrollArea>
#include <QSpinBox>
#include <QSettings>
@@ -125,12 +127,19 @@ SettingsDialog::SettingsDialog(const QString& configPath, DbManager* db, UtunNod
};
connect(avatars, &AvatarManager::serversChanged, controls, update);
connect(avatars, &AvatarManager::statusChanged, status, &QLabel::setText);
connect(upload, &QPushButton::clicked, controls, [avatars, server, controls] {
const QString path = QFileDialog::getOpenFileName(controls, QCoreApplication::translate("ChatGui", "Choose avatar"), {},
QCoreApplication::translate("ChatGui", "Images (*.png *.jpg *.jpeg *.webp)"));
connect(upload, &QPushButton::clicked, controls,
[manager = QPointer<AvatarManager>(avatars), owner = QPointer<QWidget>(controls), selection = QPointer<QComboBox>(server)] {
if (!manager || !owner || !selection) return;
QPointer<QFileDialog> chooser = new QFileDialog(owner, QCoreApplication::translate("ChatGui", "Choose avatar"));
auto release = qScopeGuard([&] { delete chooser.data(); });
chooser->setNameFilter(QCoreApplication::translate("ChatGui", "Images (*.png *.jpg *.jpeg *.webp)"));
chooser->setFileMode(QFileDialog::ExistingFile);
QObject::connect(manager, &QObject::destroyed, chooser, &QDialog::reject);
if (chooser->exec() != QDialog::Accepted || !chooser || !manager || !owner || !selection) return;
const auto files = chooser->selectedFiles(); if (files.isEmpty()) return;
const QString path = files.first(); const quint64 serverId = selection->currentData().toULongLong();
QRectF crop;
if (!path.isEmpty() && selectAvatarCrop(path, crop, controls))
avatars->uploadDefault(path, server->currentData().toULongLong(), crop);
if (selectAvatarCrop(path, crop, owner) && manager) manager->uploadDefault(path, serverId, crop);
});
connect(clear, &QPushButton::clicked, avatars, &AvatarManager::clearDefault); update();
}