Guard avatar upload controls across nested file and crop dialogs
This commit is contained in:
1 parent
9c782be562
commit
0a69864d10
1 file changed
+14
-5
@@ -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();
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user