diff --git a/Telegram/SourceFiles/platform/linux/linux_xdp_file_dialog.cpp b/Telegram/SourceFiles/platform/linux/linux_xdp_file_dialog.cpp index 96d5b2102..47622c2d5 100644 --- a/Telegram/SourceFiles/platform/linux/linux_xdp_file_dialog.cpp +++ b/Telegram/SourceFiles/platform/linux/linux_xdp_file_dialog.cpp @@ -574,6 +574,10 @@ int XDPFileDialog::exec() { const auto context = Glib::MainContext::create(); const auto loop = Glib::MainLoop::create(context); g_main_context_push_thread_default(context->gobj()); + const auto contextGuard = gsl::finally([&] { + g_main_context_pop_thread_default(context->gobj()); + }); + rpl::lifetime lifetime; accepted( @@ -594,7 +598,6 @@ int XDPFileDialog::exec() { QPointer guard = this; loop->run(); - g_main_context_pop_thread_default(context->gobj()); if (guard.isNull()) { return QDialog::Rejected; diff --git a/Telegram/SourceFiles/platform/linux/linux_xdp_open_with_dialog.cpp b/Telegram/SourceFiles/platform/linux/linux_xdp_open_with_dialog.cpp index de8e02bcf..dddf1b54a 100644 --- a/Telegram/SourceFiles/platform/linux/linux_xdp_open_with_dialog.cpp +++ b/Telegram/SourceFiles/platform/linux/linux_xdp_open_with_dialog.cpp @@ -108,6 +108,9 @@ bool ShowXDPOpenWithDialog(const QString &filepath) { const auto context = Glib::MainContext::create(); const auto loop = Glib::MainLoop::create(context); g_main_context_push_thread_default(context->gobj()); + const auto contextGuard = gsl::finally([&] { + g_main_context_pop_thread_default(context->gobj()); + }); const auto signalId = connection->signal_subscribe( [&]( @@ -163,7 +166,6 @@ bool ShowXDPOpenWithDialog(const QString &filepath) { QWindow window; QGuiApplicationPrivate::showModalWindow(&window); loop->run(); - g_main_context_pop_thread_default(context->gobj()); QGuiApplicationPrivate::hideModalWindow(&window); } diff --git a/Telegram/SourceFiles/platform/linux/specific_linux.cpp b/Telegram/SourceFiles/platform/linux/specific_linux.cpp index 7f13948ee..1707e53f3 100644 --- a/Telegram/SourceFiles/platform/linux/specific_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/specific_linux.cpp @@ -148,6 +148,9 @@ void PortalAutostart(bool start, bool silent) { const auto context = Glib::MainContext::create(); const auto loop = Glib::MainLoop::create(context); g_main_context_push_thread_default(context->gobj()); + const auto contextGuard = gsl::finally([&] { + g_main_context_pop_thread_default(context->gobj()); + }); const auto signalId = connection->signal_subscribe( [&]( @@ -200,7 +203,6 @@ void PortalAutostart(bool start, bool silent) { QWindow window; QGuiApplicationPrivate::showModalWindow(&window); loop->run(); - g_main_context_pop_thread_default(context->gobj()); QGuiApplicationPrivate::hideModalWindow(&window); } } catch (const Glib::Error &e) {