From 67ea175fc6b8a98571acb32bb0b2cf842b301e2a Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 17 Apr 2018 19:19:34 +0400 Subject: [PATCH] Show choose file box over the passport panel. --- .../SourceFiles/boxes/download_path_box.cpp | 13 ++++-- Telegram/SourceFiles/core/file_utilities.cpp | 41 +++++++++++++++++-- Telegram/SourceFiles/core/file_utilities.h | 5 +++ .../admin_log/history_admin_log_inner.cpp | 1 + .../history/history_inner_widget.cpp | 1 + .../SourceFiles/history/history_widget.cpp | 2 +- .../view/history_view_context_menu.cpp | 1 + .../SourceFiles/lang/lang_cloud_manager.cpp | 2 +- Telegram/SourceFiles/mediaview.cpp | 1 + .../passport/passport_panel_controller.cpp | 12 +++--- .../passport/passport_panel_edit_scans.cpp | 20 +++++---- .../passport/passport_panel_edit_scans.h | 4 +- .../platform/linux/file_utilities_linux.cpp | 37 ++++++++++++++--- .../platform/mac/file_utilities_mac.h | 18 +++++++- .../platform/platform_file_utilities.h | 9 +++- .../platform/win/file_utilities_win.cpp | 10 ++++- .../settings/settings_background_widget.cpp | 9 +++- .../SourceFiles/settings/settings_cover.cpp | 9 +++- .../SourceFiles/settings/settings_widget.cpp | 6 +-- Telegram/SourceFiles/ui/special_buttons.cpp | 10 +++-- .../window/themes/window_theme_editor.cpp | 6 +-- 21 files changed, 170 insertions(+), 47 deletions(-) diff --git a/Telegram/SourceFiles/boxes/download_path_box.cpp b/Telegram/SourceFiles/boxes/download_path_box.cpp index cb97307f5e..0332b3dd1b 100644 --- a/Telegram/SourceFiles/boxes/download_path_box.cpp +++ b/Telegram/SourceFiles/boxes/download_path_box.cpp @@ -83,20 +83,25 @@ void DownloadPathBox::radioChanged(Directory value) { } void DownloadPathBox::onEditPath() { - auto initialPath = [] { + const auto initialPath = [] { if (!Global::DownloadPath().isEmpty() && Global::DownloadPath() != qstr("tmp")) { return Global::DownloadPath().left(Global::DownloadPath().size() - (Global::DownloadPath().endsWith('/') ? 1 : 0)); } return QString(); - }; - FileDialog::GetFolder(lang(lng_download_path_choose), initialPath(), base::lambda_guarded(this, [this](const QString &result) { + }(); + const auto handleFolder = [=](const QString &result) { if (!result.isEmpty()) { _path = result + '/'; _pathBookmark = psDownloadPathBookmark(_path); setPathText(QDir::toNativeSeparators(_path)); _group->setValue(Directory::Custom); } - })); + }; + FileDialog::GetFolder( + this, + lang(lng_download_path_choose), + initialPath, + base::lambda_guarded(this, handleFolder)); } void DownloadPathBox::save() { diff --git a/Telegram/SourceFiles/core/file_utilities.cpp b/Telegram/SourceFiles/core/file_utilities.cpp index 0ef1461c8d..1ee269c738 100644 --- a/Telegram/SourceFiles/core/file_utilities.cpp +++ b/Telegram/SourceFiles/core/file_utilities.cpp @@ -13,17 +13,38 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "messenger.h" bool filedialogGetSaveFile( + QPointer parent, QString &file, const QString &caption, const QString &filter, const QString &initialPath) { QStringList files; QByteArray remoteContent; - bool result = Platform::FileDialog::Get(files, remoteContent, caption, filter, FileDialog::internal::Type::WriteFile, initialPath); + bool result = Platform::FileDialog::Get( + parent, + files, + remoteContent, + caption, + filter, + FileDialog::internal::Type::WriteFile, + initialPath); file = files.isEmpty() ? QString() : files.at(0); return result; } +bool filedialogGetSaveFile( + QString &file, + const QString &caption, + const QString &filter, + const QString &initialPath) { + return filedialogGetSaveFile( + Messenger::Instance().getFileDialogParent(), + file, + caption, + filter, + initialPath); +} + QString filedialogDefaultName( const QString &prefix, const QString &extension, @@ -130,6 +151,7 @@ void UnsafeLaunchDefault(const QString &filepath) { namespace FileDialog { void GetOpenPath( + QPointer parent, const QString &caption, const QString &filter, base::lambda callback, @@ -138,6 +160,7 @@ void GetOpenPath( auto files = QStringList(); auto remoteContent = QByteArray(); const auto success = Platform::FileDialog::Get( + parent, files, remoteContent, caption, @@ -161,6 +184,7 @@ void GetOpenPath( } void GetOpenPaths( + QPointer parent, const QString &caption, const QString &filter, base::lambda callback, @@ -169,6 +193,7 @@ void GetOpenPaths( auto files = QStringList(); auto remoteContent = QByteArray(); const auto success = Platform::FileDialog::Get( + parent, files, remoteContent, caption, @@ -188,6 +213,7 @@ void GetOpenPaths( } void GetWritePath( + QPointer parent, const QString &caption, const QString &filter, const QString &initialPath, @@ -195,7 +221,7 @@ void GetWritePath( base::lambda failed) { InvokeQueued(QApplication::instance(), [=] { auto file = QString(); - if (filedialogGetSaveFile(file, caption, filter, initialPath)) { + if (filedialogGetSaveFile(parent, file, caption, filter, initialPath)) { if (callback) { callback(std::move(file)); } @@ -206,6 +232,7 @@ void GetWritePath( } void GetFolder( + QPointer parent, const QString &caption, const QString &initialPath, base::lambda callback, @@ -214,6 +241,7 @@ void GetFolder( auto files = QStringList(); auto remoteContent = QByteArray(); const auto success = Platform::FileDialog::Get( + parent, files, remoteContent, caption, @@ -244,7 +272,14 @@ void InitLastPathDefault() { cSetDialogLastPath(QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)); } -bool GetDefault(QStringList &files, QByteArray &remoteContent, const QString &caption, const QString &filter, FileDialog::internal::Type type, QString startFile = QString()) { +bool GetDefault( + QPointer parent, + QStringList &files, + QByteArray &remoteContent, + const QString &caption, + const QString &filter, + FileDialog::internal::Type type, + QString startFile = QString()) { if (cDialogLastPath().isEmpty()) { Platform::FileDialog::InitLastPath(); } diff --git a/Telegram/SourceFiles/core/file_utilities.h b/Telegram/SourceFiles/core/file_utilities.h index 4c180f3eda..d9ab99d4ef 100644 --- a/Telegram/SourceFiles/core/file_utilities.h +++ b/Telegram/SourceFiles/core/file_utilities.h @@ -54,22 +54,26 @@ struct OpenResult { QByteArray remoteContent; }; void GetOpenPath( + QPointer parent, const QString &caption, const QString &filter, base::lambda callback, base::lambda failed = base::lambda()); void GetOpenPaths( + QPointer parent, const QString &caption, const QString &filter, base::lambda callback, base::lambda failed = base::lambda()); void GetWritePath( + QPointer parent, const QString &caption, const QString &filter, const QString &initialPath, base::lambda callback, base::lambda failed = base::lambda()); void GetFolder( + QPointer parent, const QString &caption, const QString &initialPath, base::lambda callback, @@ -89,6 +93,7 @@ enum class Type { void InitLastPathDefault(); bool GetDefault( + QPointer parent, QStringList &files, QByteArray &remoteContent, const QString &caption, diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp index 7e8f5cc9ff..b68847cfd8 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp @@ -1085,6 +1085,7 @@ void InnerWidget::savePhotoToFile(PhotoData *photo) { auto filter = qsl("JPEG Image (*.jpg);;") + FileDialog::AllFilesFilter(); FileDialog::GetWritePath( + this, lang(lng_save_photo), filter, filedialogDefaultName(qsl("photo"), qsl(".jpg")), diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index 2ea4f4dfe4..c01dc71b8a 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -1738,6 +1738,7 @@ void HistoryInner::savePhotoToFile(not_null photo) { auto filter = qsl("JPEG Image (*.jpg);;") + FileDialog::AllFilesFilter(); FileDialog::GetWritePath( + this, lang(lng_save_photo), filter, filedialogDefaultName( diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 0e18a01fb2..698b9b4062 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -3221,7 +3221,7 @@ void HistoryWidget::chooseAttach() { auto filter = FileDialog::AllFilesFilter() + qsl(";;Image files (*") + cImgExtensions().join(qsl(" *")) + qsl(")"); - FileDialog::GetOpenPaths(lang(lng_choose_files), filter, base::lambda_guarded(this, [this](FileDialog::OpenResult &&result) { + FileDialog::GetOpenPaths(this, lang(lng_choose_files), filter, base::lambda_guarded(this, [this](FileDialog::OpenResult &&result) { if (result.paths.isEmpty() && result.remoteContent.isEmpty()) { return; } diff --git a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp index f755dd41d9..585052b9ae 100644 --- a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp +++ b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp @@ -49,6 +49,7 @@ void SavePhotoToFile(not_null photo) { } FileDialog::GetWritePath( + Messenger::Instance().getFileDialogParent(), lang(lng_save_photo), qsl("JPEG Image (*.jpg);;") + FileDialog::AllFilesFilter(), filedialogDefaultName(qsl("photo"), qsl(".jpg")), diff --git a/Telegram/SourceFiles/lang/lang_cloud_manager.cpp b/Telegram/SourceFiles/lang/lang_cloud_manager.cpp index c91c4768c0..76321246d2 100644 --- a/Telegram/SourceFiles/lang/lang_cloud_manager.cpp +++ b/Telegram/SourceFiles/lang/lang_cloud_manager.cpp @@ -231,7 +231,7 @@ void CloudManager::switchToLanguage(QString id) { void CloudManager::performSwitchToCustom() { auto filter = qsl("Language files (*.strings)"); auto title = qsl("Choose language .strings file"); - FileDialog::GetOpenPath(title, filter, [weak = base::make_weak(this)](const FileDialog::OpenResult &result) { + FileDialog::GetOpenPath(Messenger::Instance().getFileDialogParent(), title, filter, [weak = base::make_weak(this)](const FileDialog::OpenResult &result) { if (!weak || result.paths.isEmpty()) { return; } diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 5ef3d4301e..9531833fe9 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -851,6 +851,7 @@ void MediaView::onSaveAs() { psBringToBack(this); auto filter = qsl("JPEG Image (*.jpg);;") + FileDialog::AllFilesFilter(); FileDialog::GetWritePath( + this, lang(lng_save_photo), filter, filedialogDefaultName( diff --git a/Telegram/SourceFiles/passport/passport_panel_controller.cpp b/Telegram/SourceFiles/passport/passport_panel_controller.cpp index e6433251bb..ee468839bc 100644 --- a/Telegram/SourceFiles/passport/passport_panel_controller.cpp +++ b/Telegram/SourceFiles/passport/passport_panel_controller.cpp @@ -833,13 +833,11 @@ void PanelController::editWithUpload(int index, int documentIndex) { Expects(documentIndex >= 0 && documentIndex < _scopes[index].documents.size()); - EditScans::ChooseScan( - base::lambda_guarded(_panel.get(), - [=](QByteArray &&content) { - base::take(_scopeDocumentTypeBox); - editScope(index, documentIndex); - uploadScan(std::move(content)); - })); + EditScans::ChooseScan(_panel.get(), [=](QByteArray &&content) { + base::take(_scopeDocumentTypeBox); + editScope(index, documentIndex); + uploadScan(std::move(content)); + }); } void PanelController::editScope(int index, int documentIndex) { diff --git a/Telegram/SourceFiles/passport/passport_panel_edit_scans.cpp b/Telegram/SourceFiles/passport/passport_panel_edit_scans.cpp index 679b6ef013..b7945415fe 100644 --- a/Telegram/SourceFiles/passport/passport_panel_edit_scans.cpp +++ b/Telegram/SourceFiles/passport/passport_panel_edit_scans.cpp @@ -423,22 +423,27 @@ void EditScans::chooseScan() { _controller->showToast(lang(lng_passport_scans_limit_reached)); return; } - ChooseScan(base::lambda_guarded(this, [=](QByteArray &&content) { + ChooseScan(this, [=](QByteArray &&content) { _controller->uploadScan(std::move(content)); - })); + }); } void EditScans::chooseSelfie() { - ChooseScan(base::lambda_guarded(this, [=](QByteArray &&content) { + ChooseScan(this, [=](QByteArray &&content) { _controller->uploadSelfie(std::move(content)); - })); + }); } -void EditScans::ChooseScan(base::lambda callback) { +void EditScans::ChooseScan( + QPointer parent, + base::lambda callback) { + Expects(parent != nullptr); + const auto filter = FileDialog::AllFilesFilter() + qsl(";;Image files (*") + cImgExtensions().join(qsl(" *")) + qsl(")"); + const auto guardedCallback = base::lambda_guarded(parent, callback); const auto processFile = [=](FileDialog::OpenResult &&result) { if (result.paths.size() == 1) { auto content = [&] { @@ -449,13 +454,14 @@ void EditScans::ChooseScan(base::lambda callback) { return f.readAll(); }(); if (!content.isEmpty()) { - callback(std::move(content)); + guardedCallback(std::move(content)); } } else if (!result.remoteContent.isEmpty()) { - callback(std::move(result.remoteContent)); + guardedCallback(std::move(result.remoteContent)); } }; FileDialog::GetOpenPath( + parent, lang(lng_passport_choose_image), filter, processFile); diff --git a/Telegram/SourceFiles/passport/passport_panel_edit_scans.h b/Telegram/SourceFiles/passport/passport_panel_edit_scans.h index e9da863ee2..6e29701d9f 100644 --- a/Telegram/SourceFiles/passport/passport_panel_edit_scans.h +++ b/Telegram/SourceFiles/passport/passport_panel_edit_scans.h @@ -41,7 +41,9 @@ public: base::optional validateGetErrorTop(); - static void ChooseScan(base::lambda callback); + static void ChooseScan( + QPointer parent, + base::lambda callback); private: void setupContent(const QString &header); diff --git a/Telegram/SourceFiles/platform/linux/file_utilities_linux.cpp b/Telegram/SourceFiles/platform/linux/file_utilities_linux.cpp index 5a2cdbd8bc..16e37a9218 100644 --- a/Telegram/SourceFiles/platform/linux/file_utilities_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/file_utilities_linux.cpp @@ -139,8 +139,14 @@ bool PreviewSupported() { && (Libs::gdk_pixbuf_new_from_file_at_size != nullptr); } -bool GetNative(QStringList &files, QByteArray &remoteContent, const QString &caption, const QString &filter, Type type, QString startFile) { - auto parent = Messenger::Instance().getFileDialogParent(); +bool GetNative( + QPointer parent, + QStringList &files, + QByteArray &remoteContent, + const QString &caption, + const QString &filter, + Type type, + QString startFile) { internal::GtkFileDialog dialog(parent, caption, QString(), filter); dialog.setModal(true); @@ -185,13 +191,34 @@ bool GetNative(QStringList &files, QByteArray &remoteContent, const QString &cap } // namespace -bool Get(QStringList &files, QByteArray &remoteContent, const QString &caption, const QString &filter, Type type, QString startFile) { +bool Get( + QPointer parent, + QStringList &files, + QByteArray &remoteContent, + const QString &caption, + const QString &filter, + Type type, + QString startFile) { #ifndef TDESKTOP_DISABLE_GTK_INTEGRATION if (NativeSupported()) { - return GetNative(files, remoteContent, caption, filter, type, startFile); + return GetNative( + parent, + files, + remoteContent, + caption, + filter, + type, + startFile); } #endif // !TDESKTOP_DISABLE_GTK_INTEGRATION - return ::FileDialog::internal::GetDefault(files, remoteContent, caption, filter, type, startFile); + return ::FileDialog::internal::GetDefault( + parent, + files, + remoteContent, + caption, + filter, + type, + startFile); } #ifndef TDESKTOP_DISABLE_GTK_INTEGRATION diff --git a/Telegram/SourceFiles/platform/mac/file_utilities_mac.h b/Telegram/SourceFiles/platform/mac/file_utilities_mac.h index f63105ba8d..284474e16f 100644 --- a/Telegram/SourceFiles/platform/mac/file_utilities_mac.h +++ b/Telegram/SourceFiles/platform/mac/file_utilities_mac.h @@ -27,8 +27,22 @@ inline void InitLastPath() { ::FileDialog::internal::InitLastPathDefault(); } -inline bool Get(QStringList &files, QByteArray &remoteContent, const QString &caption, const QString &filter, ::FileDialog::internal::Type type, QString startFile) { - return ::FileDialog::internal::GetDefault(files, remoteContent, caption, filter, type, startFile); +inline bool Get( + QPointer parent, + QStringList &files, + QByteArray &remoteContent, + const QString &caption, + const QString &filter, + ::FileDialog::internal::Type type, + QString startFile) { + return ::FileDialog::internal::GetDefault( + parent, + files, + remoteContent, + caption, + filter, + type, + startFile); } } // namespace FileDialog diff --git a/Telegram/SourceFiles/platform/platform_file_utilities.h b/Telegram/SourceFiles/platform/platform_file_utilities.h index b595362cbf..68b1058b1b 100644 --- a/Telegram/SourceFiles/platform/platform_file_utilities.h +++ b/Telegram/SourceFiles/platform/platform_file_utilities.h @@ -29,7 +29,14 @@ namespace FileDialog { void InitLastPath(); -bool Get(QStringList &files, QByteArray &remoteContent, const QString &caption, const QString &filter, ::FileDialog::internal::Type type, QString startFile = QString()); +bool Get( + QPointer parent, + QStringList &files, + QByteArray &remoteContent, + const QString &caption, + const QString &filter, + ::FileDialog::internal::Type type, + QString startFile = QString()); } // namespace FileDialog } // namespace Platform diff --git a/Telegram/SourceFiles/platform/win/file_utilities_win.cpp b/Telegram/SourceFiles/platform/win/file_utilities_win.cpp index 26c7ec4a53..c8fb4140ac 100644 --- a/Telegram/SourceFiles/platform/win/file_utilities_win.cpp +++ b/Telegram/SourceFiles/platform/win/file_utilities_win.cpp @@ -333,7 +333,14 @@ void InitLastPath() { } } -bool Get(QStringList &files, QByteArray &remoteContent, const QString &caption, const QString &filter, ::FileDialog::internal::Type type, QString startFile) { +bool Get( + QPointer parent, + QStringList &files, + QByteArray &remoteContent, + const QString &caption, + const QString &filter, + ::FileDialog::internal::Type type, + QString startFile) { if (cDialogLastPath().isEmpty()) { Platform::FileDialog::InitLastPath(); } @@ -344,7 +351,6 @@ bool Get(QStringList &files, QByteArray &remoteContent, const QString &caption, // that forced file icon and maybe other properties being resolved and this was // a blocking operation. auto helperPath = cDialogHelperPathFinal(); - auto parent = Messenger::Instance().getFileDialogParent(); QFileDialog dialog(parent, caption, helperPath, filter); dialog.setModal(true); diff --git a/Telegram/SourceFiles/settings/settings_background_widget.cpp b/Telegram/SourceFiles/settings/settings_background_widget.cpp index 700a7942d3..1975b93611 100644 --- a/Telegram/SourceFiles/settings/settings_background_widget.cpp +++ b/Telegram/SourceFiles/settings/settings_background_widget.cpp @@ -231,7 +231,7 @@ void BackgroundWidget::onChooseFromFile() { auto imgExtensions = cImgExtensions(); auto filters = QStringList(qsl("Theme files (*.tdesktop-theme *.tdesktop-palette *") + imgExtensions.join(qsl(" *")) + qsl(")")); filters.push_back(FileDialog::AllFilesFilter()); - FileDialog::GetOpenPath(lang(lng_choose_image), filters.join(qsl(";;")), base::lambda_guarded(this, [this](const FileDialog::OpenResult &result) { + const auto callback = [=](const FileDialog::OpenResult &result) { if (result.paths.isEmpty() && result.remoteContent.isEmpty()) { return; } @@ -263,7 +263,12 @@ void BackgroundWidget::onChooseFromFile() { Window::Theme::Background()->setImage(Window::Theme::kCustomBackground, std::move(img)); _tile->setChecked(false); _background->updateImage(); - })); + }; + FileDialog::GetOpenPath( + this, + lang(lng_choose_image), + filters.join(qsl(";;")), + base::lambda_guarded(this, callback)); } void BackgroundWidget::onEditTheme() { diff --git a/Telegram/SourceFiles/settings/settings_cover.cpp b/Telegram/SourceFiles/settings/settings_cover.cpp index 2c34ce173c..40ce533197 100644 --- a/Telegram/SourceFiles/settings/settings_cover.cpp +++ b/Telegram/SourceFiles/settings/settings_cover.cpp @@ -343,7 +343,7 @@ void CoverWidget::refreshStatusText() { void CoverWidget::chooseNewPhoto() { auto imageExtensions = cImgExtensions(); auto filter = qsl("Image files (*") + imageExtensions.join(qsl(" *")) + qsl(");;") + FileDialog::AllFilesFilter(); - FileDialog::GetOpenPath(lang(lng_choose_image), filter, base::lambda_guarded(this, [this](const FileDialog::OpenResult &result) { + const auto callback = [=](const FileDialog::OpenResult &result) { if (result.paths.isEmpty() && result.remoteContent.isEmpty()) { return; } @@ -356,7 +356,12 @@ void CoverWidget::chooseNewPhoto() { } showSetPhotoBox(img); - })); + }; + FileDialog::GetOpenPath( + this, + lang(lng_choose_image), + filter, + base::lambda_guarded(this, callback)); } void CoverWidget::editName() { diff --git a/Telegram/SourceFiles/settings/settings_widget.cpp b/Telegram/SourceFiles/settings/settings_widget.cpp index 136dab07c3..fd19cc5a74 100644 --- a/Telegram/SourceFiles/settings/settings_widget.cpp +++ b/Telegram/SourceFiles/settings/settings_widget.cpp @@ -90,7 +90,7 @@ void fillCodes() { } }); Codes.insert(qsl("loadcolors"), [] { - FileDialog::GetOpenPath("Open palette file", "Palette (*.tdesktop-palette)", [](const FileDialog::OpenResult &result) { + FileDialog::GetOpenPath(Messenger::Instance().getFileDialogParent(), "Open palette file", "Palette (*.tdesktop-palette)", [](const FileDialog::OpenResult &result) { if (!result.paths.isEmpty()) { Window::Theme::Apply(result.paths.front()); } @@ -108,7 +108,7 @@ void fillCodes() { })); }); Codes.insert(qsl("endpoints"), [] { - FileDialog::GetOpenPath("Open DC endpoints", "DC Endpoints (*.tdesktop-endpoints)", [](const FileDialog::OpenResult &result) { + FileDialog::GetOpenPath(Messenger::Instance().getFileDialogParent(), "Open DC endpoints", "DC Endpoints (*.tdesktop-endpoints)", [](const FileDialog::OpenResult &result) { if (!result.paths.isEmpty()) { if (!Messenger::Instance().mtp()->dcOptions()->loadFromFile(result.paths.front())) { Ui::show(Box("Could not load endpoints :( Errors in 'log.txt'.")); @@ -136,7 +136,7 @@ void fillCodes() { return; } - FileDialog::GetOpenPath("Open audio file", audioFilters, [key](const FileDialog::OpenResult &result) { + FileDialog::GetOpenPath(Messenger::Instance().getFileDialogParent(), "Open audio file", audioFilters, [key](const FileDialog::OpenResult &result) { if (AuthSession::Exists() && !result.paths.isEmpty()) { auto track = Media::Audio::Current().createTrack(); track->fillFromFile(result.paths.front()); diff --git a/Telegram/SourceFiles/ui/special_buttons.cpp b/Telegram/SourceFiles/ui/special_buttons.cpp index 7b2c754f6b..6bab381151 100644 --- a/Telegram/SourceFiles/ui/special_buttons.cpp +++ b/Telegram/SourceFiles/ui/special_buttons.cpp @@ -95,7 +95,10 @@ void SuggestPhotoFile( } template -void ShowChoosePhotoBox(PeerId peerForCrop, Callback &&callback) { +void ShowChoosePhotoBox( + QPointer parent, + PeerId peerForCrop, + Callback &&callback) { auto imgExtensions = cImgExtensions(); auto filter = qsl("Image files (*") + imgExtensions.join(qsl(" *")) @@ -108,6 +111,7 @@ void ShowChoosePhotoBox(PeerId peerForCrop, Callback &&callback) { SuggestPhotoFile(result, peerForCrop, std::move(callback)); }; FileDialog::GetOpenPath( + parent, lang(lng_choose_image), filter, std::move(handleChosenPhoto)); @@ -470,7 +474,7 @@ void UserpicButton::changePhotoLazy() { auto callback = base::lambda_guarded( this, [this](QImage &&image) { setImage(std::move(image)); }); - ShowChoosePhotoBox(_peerForCrop, std::move(callback)); + ShowChoosePhotoBox(this, _peerForCrop, std::move(callback)); } void UserpicButton::uploadNewPeerPhoto() { @@ -482,7 +486,7 @@ void UserpicButton::uploadNewPeerPhoto() { _peer->id ); }); - ShowChoosePhotoBox(_peerForCrop, std::move(callback)); + ShowChoosePhotoBox(this, _peerForCrop, std::move(callback)); } void UserpicButton::openPeerPhoto() { diff --git a/Telegram/SourceFiles/window/themes/window_theme_editor.cpp b/Telegram/SourceFiles/window/themes/window_theme_editor.cpp index 76469c1713..cfb4afaca7 100644 --- a/Telegram/SourceFiles/window/themes/window_theme_editor.cpp +++ b/Telegram/SourceFiles/window/themes/window_theme_editor.cpp @@ -621,7 +621,7 @@ void ThemeExportBox::updateThumbnail() { } void ThemeExportBox::chooseBackgroundFromFile() { - FileDialog::GetOpenPath(lang(lng_theme_editor_choose_image), "Image files (*.jpeg *.jpg *.png)", base::lambda_guarded(this, [this](const FileDialog::OpenResult &result) { + FileDialog::GetOpenPath(this, lang(lng_theme_editor_choose_image), "Image files (*.jpeg *.jpg *.png)", base::lambda_guarded(this, [this](const FileDialog::OpenResult &result) { auto content = result.remoteContent; if (!result.paths.isEmpty()) { QFile f(result.paths.front()); @@ -651,7 +651,7 @@ void ThemeExportBox::exportTheme() { auto caption = lang(lng_theme_editor_choose_name); auto filter = "Themes (*.tdesktop-theme)"; auto name = "awesome.tdesktop-theme"; - FileDialog::GetWritePath(caption, filter, name, base::lambda_guarded(this, [this](const QString &path) { + FileDialog::GetWritePath(this, caption, filter, name, base::lambda_guarded(this, [this](const QString &path) { zlib::FileToWrite zip; zip_fileinfo zfi = { { 0, 0, 0, 0, 0, 0 }, 0, 0, 0 }; @@ -787,7 +787,7 @@ void Editor::paintEvent(QPaintEvent *e) { void Editor::Start() { auto palettePath = Local::themePaletteAbsolutePath(); if (palettePath.isEmpty()) { - FileDialog::GetWritePath(lang(lng_theme_editor_save_palette), "Palette (*.tdesktop-palette)", "colors.tdesktop-palette", [](const QString &path) { + FileDialog::GetWritePath(App::wnd(), lang(lng_theme_editor_save_palette), "Palette (*.tdesktop-palette)", "colors.tdesktop-palette", [](const QString &path) { if (!Local::copyThemeColorsToPalette(path)) { writeDefaultPalette(path); }