Fix event loop for non-first instance on Linux

This commit is contained in:
Ilya Fedin 2023-02-17 07:50:57 +04:00 committed by John Preston
parent 4247fd0c0f
commit e78975d770

View file

@ -245,6 +245,22 @@ void LaunchGApplication() {
.chopped(8) .chopped(8)
.toStdString(); .toStdString();
const auto owned = [&] {
if (!Gio::Application::id_is_valid(appId)) {
return false;
}
try {
return base::Platform::DBus::NameHasOwner(
Gio::DBus::Connection::get_sync(
Gio::DBus::BusType::SESSION),
appId);
} catch (...) {
}
return false;
}();
const auto app = Glib::wrap( const auto app = Glib::wrap(
G_APPLICATION( G_APPLICATION(
g_object_new( g_object_new(
@ -254,7 +270,8 @@ void LaunchGApplication() {
? appId.c_str() ? appId.c_str()
: nullptr, : nullptr,
"flags", "flags",
G_APPLICATION_HANDLES_OPEN, G_APPLICATION_HANDLES_OPEN
| (owned ? G_APPLICATION_NON_UNIQUE : 0),
nullptr))); nullptr)));
app->signal_startup().connect([=] { app->signal_startup().connect([=] {