Georges Basile Stavracas Neto 1267081e5c linux-pipewire: Move fetching cursor mode to portal.c
The portal.c file was introduced after the PipeWire code landed, and
handles acquiring a D-Bus connection to the portal interface, and also
has helpers to get properties from portals. The available cursor modes
property fits nicely in portal.c.

Move fetching the cursor mode to portal.c.
2022-04-09 16:45:02 -07:00

122 lines
2.8 KiB
C

/* portal.c
*
* Copyright 2021 Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "portal.h"
#include "pipewire.h"
static GDBusConnection *connection = NULL;
static GDBusProxy *proxy = NULL;
static void ensure_proxy(void)
{
g_autoptr(GError) error = NULL;
if (!connection) {
connection = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error);
if (error) {
blog(LOG_WARNING,
"[portals] Error retrieving D-Bus connection: %s",
error->message);
return;
}
}
if (!proxy) {
proxy = g_dbus_proxy_new_sync(
connection, G_DBUS_PROXY_FLAGS_NONE, NULL,
"org.freedesktop.portal.Desktop",
"/org/freedesktop/portal/desktop",
"org.freedesktop.portal.ScreenCast", NULL, &error);
if (error) {
blog(LOG_WARNING,
"[portals] Error retrieving D-Bus proxy: %s",
error->message);
return;
}
}
}
uint32_t portal_get_available_capture_types(void)
{
g_autoptr(GVariant) cached_source_types = NULL;
uint32_t available_source_types;
ensure_proxy();
if (!proxy)
return 0;
cached_source_types =
g_dbus_proxy_get_cached_property(proxy, "AvailableSourceTypes");
available_source_types =
cached_source_types ? g_variant_get_uint32(cached_source_types)
: 0;
return available_source_types;
}
uint32_t portal_get_available_cursor_modes(void)
{
g_autoptr(GVariant) cached_cursor_modes = NULL;
uint32_t available_cursor_modes;
ensure_proxy();
if (!proxy)
return 0;
cached_cursor_modes =
g_dbus_proxy_get_cached_property(proxy, "AvailableCursorModes");
available_cursor_modes =
cached_cursor_modes ? g_variant_get_uint32(cached_cursor_modes)
: 0;
return available_cursor_modes;
}
uint32_t portal_get_screencast_version(void)
{
g_autoptr(GVariant) cached_version = NULL;
uint32_t version;
ensure_proxy();
if (!proxy)
return 0;
cached_version = g_dbus_proxy_get_cached_property(proxy, "version");
version = cached_version ? g_variant_get_uint32(cached_version) : 0;
return version;
}
GDBusConnection *portal_get_dbus_connection(void)
{
ensure_proxy();
return connection;
}
GDBusProxy *portal_get_dbus_proxy(void)
{
ensure_proxy();
return proxy;
}