Skip to content

Commit

Permalink
Merge pull request #561 from grulja/settings-portal-fix
Browse files Browse the repository at this point in the history
Settings: do not put failed implementations into the list
  • Loading branch information
matthiasclasen committed Feb 18, 2021
2 parents 5768e07 + 54c5721 commit 89d2197
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 14 deletions.
37 changes: 24 additions & 13 deletions src/settings.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ struct _SettingsClass
};

static XdpImplSettings **impls;
static int n_impls;
static int n_impls = 0;

GType settings_get_type (void) G_GNUC_CONST;
static void settings_iface_init (XdpSettingsIface *iface);
Expand Down Expand Up @@ -177,27 +177,38 @@ settings_create (GDBusConnection *connection,
Settings *settings;
g_autoptr(GError) error = NULL;
int i;
int n_impls_tmp;

n_impls = implementations->len;
impls = g_new (XdpImplSettings *, n_impls);
n_impls_tmp = implementations->len;
impls = g_new (XdpImplSettings *, n_impls_tmp);

settings = g_object_new (settings_get_type (), NULL);

for (i = 0; i < n_impls; i++)
for (i = 0; i < n_impls_tmp; i++)
{
PortalImplementation *impl = g_ptr_array_index (implementations, i);
const char *dbus_name = impl->dbus_name;

impls[i] = xdp_impl_settings_proxy_new_sync (connection,
G_DBUS_PROXY_FLAGS_NONE,
dbus_name,
DESKTOP_PORTAL_OBJECT_PATH,
NULL,
&error);
if (impls[i] == NULL)
g_warning ("Failed to create settings proxy: %s", error->message);
XdpImplSettings *impl_proxy = xdp_impl_settings_proxy_new_sync (connection,
G_DBUS_PROXY_FLAGS_NONE,
dbus_name,
DESKTOP_PORTAL_OBJECT_PATH,
NULL,
&error);
if (impl_proxy == NULL)
{
g_warning ("Failed to create settings proxy: %s", error->message);
}
else
g_signal_connect (impls[i], "setting-changed", G_CALLBACK (on_impl_settings_changed), settings);
{
impls[n_impls++] = impl_proxy;
g_signal_connect (impl_proxy, "setting-changed", G_CALLBACK (on_impl_settings_changed), settings);
}
}

if (!n_impls)
{
return NULL;
}

return G_DBUS_INTERFACE_SKELETON (settings);
Expand Down
2 changes: 2 additions & 0 deletions tests/backend/Makefile.am.inc
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ tests_test_backends_SOURCES = \
tests/backend/print.h \
tests/backend/screenshot.c \
tests/backend/screenshot.h \
tests/backend/settings.c \
tests/backend/settings.h \
tests/backend/wallpaper.c \
tests/backend/wallpaper.h \
tests/glib-backports.c \
Expand Down
31 changes: 31 additions & 0 deletions tests/backend/settings.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <gio/gio.h>

#include "src/xdp-impl-dbus.h"

#include "request.h"
#include "settings.h"

void
settings_init (GDBusConnection *connection,
const char *object_path)
{
g_autoptr(GError) error = NULL;
GDBusInterfaceSkeleton *helper;

helper = G_DBUS_INTERFACE_SKELETON (xdp_impl_settings_skeleton_new ());

if (!g_dbus_interface_skeleton_export (helper, connection, object_path, &error))
{
g_error ("Failed to export %s skeleton: %s\n",
g_dbus_interface_skeleton_get_info (helper)->name,
error->message);
exit (1);
}

g_debug ("providing %s at %s", g_dbus_interface_skeleton_get_info (helper)->name, object_path);
}
3 changes: 3 additions & 0 deletions tests/backend/settings.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#pragma once

void settings_init (GDBusConnection *connection, const char *object_path);
2 changes: 2 additions & 0 deletions tests/backend/test-backends.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include "notification.h"
#include "print.h"
#include "screenshot.h"
#include "settings.h"
#include "wallpaper.h"

#define BACKEND_BUS_NAME "org.freedesktop.impl.portal.Test"
Expand All @@ -39,6 +40,7 @@ on_bus_acquired (GDBusConnection *connection,
notification_init (connection, BACKEND_OBJECT_PATH);
print_init (connection, BACKEND_OBJECT_PATH);
screenshot_init (connection, BACKEND_OBJECT_PATH);
settings_init (connection, BACKEND_OBJECT_PATH);
wallpaper_init (connection, BACKEND_OBJECT_PATH);
}

Expand Down
2 changes: 1 addition & 1 deletion tests/portals/test.portal
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[portal]
DBusName=org.freedesktop.impl.portal.Test
Interfaces=org.freedesktop.impl.portal.Account;org.freedesktop.impl.portal.Email;org.freedesktop.impl.portal.FileChooser;org.freedesktop.impl.portal.Screenshot;org.freedesktop.impl.portal.Lockdown;org.freedesktop.impl.portal.Print;org.freedesktop.impl.portal.Access;org.freedesktop.impl.portal.Inhibit;org.freedesktop.impl.portal.AppChooser;org.freedesktop.impl.portal.Wallpaper;org.freedesktop.impl.portal.Background;org.freedesktop.impl.portal.Notification;
Interfaces=org.freedesktop.impl.portal.Account;org.freedesktop.impl.portal.Email;org.freedesktop.impl.portal.FileChooser;org.freedesktop.impl.portal.Screenshot;org.freedesktop.impl.portal.Lockdown;org.freedesktop.impl.portal.Print;org.freedesktop.impl.portal.Access;org.freedesktop.impl.portal.Inhibit;org.freedesktop.impl.portal.AppChooser;org.freedesktop.impl.portal.Wallpaper;org.freedesktop.impl.portal.Background;org.freedesktop.impl.portal.Notification;org.freedesktop.impl.portal.Settings;
UseIn=test

0 comments on commit 89d2197

Please sign in to comment.