Update submodules

This commit is contained in:
Ilya Fedin 2024-03-06 20:12:31 +04:00 committed by John Preston
parent b040b62b4e
commit 5b62d97288
8 changed files with 41 additions and 230 deletions

3
.gitmodules vendored
View File

@ -100,3 +100,6 @@
[submodule "Telegram/ThirdParty/libprisma"]
path = Telegram/ThirdParty/libprisma
url = https://github.com/desktop-app/libprisma.git
[submodule "Telegram/ThirdParty/xdg-desktop-portal"]
path = Telegram/ThirdParty/xdg-desktop-portal
url = https://github.com/flatpak/xdg-desktop-portal.git

View File

@ -1651,9 +1651,6 @@ else()
desktop-app::external_glibmm
)
include(${cmake_helpers_loc}/external/glib/generate_dbus.cmake)
generate_dbus(Telegram org.freedesktop.portal. XdpInhibit ${src_loc}/platform/linux/org.freedesktop.portal.Inhibit.xml)
if (NOT DESKTOP_APP_DISABLE_X11_INTEGRATION)
target_link_libraries(Telegram
PRIVATE

View File

@ -78,24 +78,24 @@ std::unique_ptr<base::Platform::DBus::ServiceWatcher> CreateServiceWatcher() {
Gio::DBus::BusType::SESSION);
const auto activatable = [&] {
try {
return ranges::contains(
base::Platform::DBus::ListActivatableNames(connection),
kService,
&Glib::ustring::raw);
} catch (...) {
const auto names = base::Platform::DBus::ListActivatableNames(
connection->gobj());
if (!names) {
// avoid service restart loop in sandboxed environments
return true;
}
return ranges::contains(*names, kService);
}();
return std::make_unique<base::Platform::DBus::ServiceWatcher>(
connection,
connection->gobj(),
kService,
[=](
const Glib::ustring &service,
const Glib::ustring &oldOwner,
const Glib::ustring &newOwner) {
const std::string &service,
const std::string &oldOwner,
const std::string &newOwner) {
Core::Sandbox::Instance().customEnterFromEventLoop([&] {
if (activatable && newOwner.empty()) {
Core::App().notifications().clearAll();
@ -115,27 +115,28 @@ void StartServiceAsync(Fn<void()> callback) {
const auto connection = Gio::DBus::Connection::get_sync(
Gio::DBus::BusType::SESSION);
base::Platform::DBus::StartServiceByNameAsync(
connection,
namespace DBus = base::Platform::DBus;
DBus::StartServiceByNameAsync(
connection->gobj(),
kService,
[=](Fn<base::Platform::DBus::StartReply()> result) {
[=](Fn<DBus::Result<DBus::StartReply>()> result) {
Core::Sandbox::Instance().customEnterFromEventLoop([&] {
Noexcept([&] {
try {
result(); // get the error if any
} catch (const Glib::Error &e) {
// get the error if any
if (const auto ret = result(); !ret) {
static const auto NotSupportedErrors = {
"org.freedesktop.DBus.Error.ServiceUnknown",
};
const auto errorName =
Gio::DBus::ErrorUtils::get_remote_error(e)
.raw();
if (!ranges::contains(
if (ranges::none_of(
NotSupportedErrors,
errorName)) {
throw;
[&](const auto &error) {
return strstr(
ret.error()->what(),
error);
})) {
throw std::runtime_error(
ret.error()->what());
}
}
});
@ -156,25 +157,20 @@ bool GetServiceRegistered() {
const auto connection = Gio::DBus::Connection::get_sync(
Gio::DBus::BusType::SESSION);
const auto hasOwner = [&] {
try {
return base::Platform::DBus::NameHasOwner(
connection,
kService);
} catch (...) {
return false;
}
}();
const auto hasOwner = base::Platform::DBus::NameHasOwner(
connection->gobj(),
kService
).value_or(false);
static const auto activatable = [&] {
try {
return ranges::contains(
base::Platform::DBus::ListActivatableNames(connection),
kService,
&Glib::ustring::raw);
} catch (...) {
const auto names = base::Platform::DBus::ListActivatableNames(
connection->gobj());
if (!names) {
return false;
}
return ranges::contains(*names, kService);
}();
return hasOwner || activatable;

View File

@ -1,186 +0,0 @@
<?xml version="1.0"?>
<!--
Copyright (C) 2016 Red Hat, Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library. If not, see <http://www.gnu.org/licenses/>.
Author: Matthias Clasen <mclasen@redhat.com>
-->
<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
<!--
org.freedesktop.portal.Inhibit:
@short_description: Portal for inhibiting session transitions
This simple interface lets sandboxed applications inhibit the user
session from ending, suspending, idling or getting switched away.
This documentation describes version 3 of this interface.
-->
<interface name="org.freedesktop.portal.Inhibit">
<!--
Inhibit:
@window: Identifier for the window
@flags: Flags identifying what is inhibited
@options: Vardict with optional further information
@handle: Object path for the #org.freedesktop.portal.Request object representing this call
Inhibits a session status changes. To remove the inhibition,
call org.freedesktop.portal.Request.Close() on the returned
handle.
The flags determine what changes are inhibited:
<simplelist>
<member>1: Logout</member>
<member>2: User Switch</member>
<member>4: Suspend</member>
<member>8: Idle</member>
</simplelist>
Supported keys in the @options vardict include:
<variablelist>
<varlistentry>
<term>handle_token s</term>
<listitem><para>
A string that will be used as the last element of the @handle. Must be a valid
object path element. See the #org.freedesktop.portal.Request documentation for
more information about the @handle.
</para></listitem>
</varlistentry>
<varlistentry>
<term>reason s</term>
<listitem><para>User-visible reason for the inhibition.</para></listitem>
</varlistentry>
</variablelist>
-->
<method name="Inhibit">
<arg type="s" name="window" direction="in"/>
<arg type="u" name="flags" direction="in"/>
<arg type="a{sv}" name="options" direction="in"/>
<arg type="o" name="handle" direction="out"/>
</method>
<!--
CreateMonitor:
@window: the parent window
@options: Vardict with optional further information
@handle: Object path for the #org.freedesktop.portal.Request object representing this call
Creates a monitoring session. While this session is
active, the caller will receive StateChanged signals
with updates on the session state.
A successfully created session can at any time be closed using
org.freedesktop.portal.Session::Close, or may at any time be closed
by the portal implementation, which will be signalled via
#org.freedesktop.portal.Session::Closed.
Supported keys in the @options vardict include:
<variablelist>
<varlistentry>
<term>handle_token s</term>
<listitem><para>
A string that will be used as the last element of the @handle. Must be a valid
object path element. See the #org.freedesktop.portal.Request documentation for
more information about the @handle.
</para></listitem>
</varlistentry>
<varlistentry>
<term>session_handle_token s</term>
<listitem><para>
A string that will be used as the last element of the session handle. Must be a valid
object path element. See the #org.freedesktop.portal.Session documentation for
more information about the session handle.
</para></listitem>
</varlistentry>
</variablelist>
The following results get returned via the #org.freedesktop.portal.Request::Response signal:
<variablelist>
<varlistentry>
<term>session_handle o</term>
<listitem><para>
The session handle. An object path for the
#org.freedesktop.portal.Session object representing the created
session.
</para></listitem>
</varlistentry>
</variablelist>
This method was added in version 2 of this interface.
-->
<method name="CreateMonitor">
<arg type="s" name="window" direction="in"/>
<arg type="a{sv}" name="options" direction="in"/>
<arg type="o" name="handle" direction="out"/>
</method>
<!--
StateChanged:
@session_handle: Object path for the #org.freedesktop.portal.Session object
@state: Vardict with information about the session state
The StateChanged signal is sent to active monitoring sessions when
the session state changes.
When the session state changes to 'Query End', clients with active monitoring
sessions are expected to respond by calling
org.freedesktop.portal.Inhibit.QueryEndResponse() within a second
of receiving the StateChanged signal. They may call org.freedesktop.portal.Inhibit.Inhibit()
first to inhibit logout, to prevent the session from proceeding to the Ending state.
The following information may get returned in the @state vardict:
<variablelist>
<varlistentry>
<term>screensaver-active b</term>
<listitem><para>
Whether the screensaver is active.
</para></listitem>
</varlistentry>
<varlistentry>
<term>session-state u</term>
<listitem><para>
The state of the session. This member is new in version 3.
</para>
<simplelist>
<member>1: Running</member>
<member>2: Query End</member>
<member>3: Ending</member>
</simplelist>
</listitem>
</varlistentry>
</variablelist>
-->
<signal name="StateChanged">
<arg type="o" name="session_handle" direction="out"/>
<arg type="a{sv}" name="state" direction="out"/>
</signal>
<!--
QueryEndResponse:
@session_handle: Object path for the #org.freedesktop.portal.Session object
Acknowledges that the caller received the #org.freedesktop.portal.Inhibit::StateChanged
signal. This method should be called within one second or receiving a StateChanged
signal with the 'Query End' state.
Since version 3.
-->
<method name="QueryEndResponse">
<arg type="o" name="session_handle" direction="in"/>
</method>
<property name="version" type="u" access="read"/>
</interface>
</node>

@ -0,0 +1 @@
Subproject commit fa8d41a2f9a5d30a1e41568b6fb53b046dce14dc

@ -1 +1 @@
Subproject commit 888a19075b569eda3d18a977543320823b984ae0
Subproject commit cee9211bd58e054f24ad5e7f122037f71a44b237

@ -1 +1 @@
Subproject commit 4fce8b1971721da739619acf36da0fe79d614a23
Subproject commit 27af88195bca687e9d2a52b4fcd4e83ef5476be9

2
cmake

@ -1 +1 @@
Subproject commit a46279fcfe69ebcc806bb31679ccece5f7c07508
Subproject commit b699c232d57d50070a7b1b861809e206624f48d4