Use public Qt API for native dialogs modality
This commit is contained in:
parent
acd18a57fb
commit
a2a401c0b0
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue