Use public Qt API for native dialogs modality

This commit is contained in:
Ilya Fedin 2022-05-19 11:36:13 +04:00 committed by John Preston
parent acd18a57fb
commit a2a401c0b0
2 changed files with 10 additions and 24 deletions

View File

@ -14,12 +14,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "window/window_controller.h" #include "window/window_controller.h"
#include "base/random.h" #include "base/random.h"
#include <QtGui/QWindow>
#include <fcntl.h> #include <fcntl.h>
#include <glibmm.h> #include <glibmm.h>
#include <giomm.h> #include <giomm.h>
#include <private/qguiapplication_p.h>
namespace Platform { namespace Platform {
namespace File { namespace File {
@ -90,12 +87,7 @@ bool ShowXDPOpenWithDialog(const QString &filepath) {
+ '/' + '/'
+ handleToken; + handleToken;
const auto context = Glib::MainContext::create(); const auto loop = Glib::MainLoop::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( const auto signalId = connection->signal_subscribe(
[&]( [&](
@ -148,10 +140,11 @@ bool ShowXDPOpenWithDialog(const QString &filepath) {
std::string(base::Platform::XDP::kService)); std::string(base::Platform::XDP::kService));
if (signalId != 0) { if (signalId != 0) {
QWindow window; QWidget window;
QGuiApplicationPrivate::showModalWindow(&window); window.setAttribute(Qt::WA_DontShowOnScreen);
window.setWindowModality(Qt::ApplicationModal);
window.show();
loop->run(); loop->run();
QGuiApplicationPrivate::hideModalWindow(&window);
} }
return true; return true;

View File

@ -36,9 +36,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include <QtWidgets/QSystemTrayIcon> #include <QtWidgets/QSystemTrayIcon>
#include <QtCore/QStandardPaths> #include <QtCore/QStandardPaths>
#include <QtCore/QProcess> #include <QtCore/QProcess>
#include <QtGui/QWindow>
#include <private/qguiapplication_p.h>
#ifndef DESKTOP_APP_DISABLE_DBUS_INTEGRATION #ifndef DESKTOP_APP_DISABLE_DBUS_INTEGRATION
#include <glibmm.h> #include <glibmm.h>
@ -113,12 +110,7 @@ void PortalAutostart(bool start, bool silent) {
+ '/' + '/'
+ handleToken; + handleToken;
const auto context = Glib::MainContext::create(); const auto loop = Glib::MainLoop::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( const auto signalId = connection->signal_subscribe(
[&]( [&](
@ -168,10 +160,11 @@ void PortalAutostart(bool start, bool silent) {
std::string(base::Platform::XDP::kService)); std::string(base::Platform::XDP::kService));
if (signalId != 0) { if (signalId != 0) {
QWindow window; QWidget window;
QGuiApplicationPrivate::showModalWindow(&window); window.setAttribute(Qt::WA_DontShowOnScreen);
window.setWindowModality(Qt::ApplicationModal);
window.show();
loop->run(); loop->run();
QGuiApplicationPrivate::hideModalWindow(&window);
} }
} catch (const Glib::Error &e) { } catch (const Glib::Error &e) {
if (!silent) { if (!silent) {