gdbus: Introduce G_DBUS_SIGNAL_FLAG_EXPERIMENTAL

This flag can be used to mark signals as experimental, marked
signals are disabled by default and can be enabled by setting
G_DBUS_FLAG_ENABLE_EXPERIMENTAL using g_dbus_set_flags.
This commit is contained in:
Luiz Augusto von Dentz 2012-12-28 14:51:00 +02:00 committed by Marcel Holtmann
parent 4b50c0bd05
commit 4b14fcc9a1
2 changed files with 23 additions and 4 deletions

View File

@ -100,7 +100,8 @@ enum GDBusMethodFlags {
};
enum GDBusSignalFlags {
G_DBUS_SIGNAL_FLAG_DEPRECATED = (1 << 0),
G_DBUS_SIGNAL_FLAG_DEPRECATED = (1 << 0),
G_DBUS_SIGNAL_FLAG_EXPERIMENTAL = (1 << 1),
};
enum GDBusPropertyFlags {
@ -208,6 +209,11 @@ struct GDBusSecurityTable {
.args = _args, \
.flags = G_DBUS_SIGNAL_FLAG_DEPRECATED
#define GDBUS_EXPERIMENTAL_SIGNAL(_name, _args) \
.name = _name, \
.args = _args, \
.flags = G_DBUS_SIGNAL_FLAG_EXPERIMENTAL
void g_dbus_set_flags(int flags);
gboolean g_dbus_register_interface(DBusConnection *connection,

View File

@ -164,6 +164,12 @@ static void generate_interface_xml(GString *gstr, struct interface_data *iface)
for (signal = iface->signals; signal && signal->name; signal++) {
gboolean deprecated = signal->flags &
G_DBUS_SIGNAL_FLAG_DEPRECATED;
gboolean experimental = signal->flags &
G_DBUS_SIGNAL_FLAG_EXPERIMENTAL;
if (!(global_flags & G_DBUS_FLAG_ENABLE_EXPERIMENTAL) &&
experimental)
continue;
if (!deprecated && !(signal->args && signal->args->name))
g_string_append_printf(gstr,
@ -1266,10 +1272,17 @@ static gboolean check_signal(DBusConnection *conn, const char *path,
}
for (signal = iface->signals; signal && signal->name; signal++) {
if (!strcmp(signal->name, name)) {
*args = signal->args;
return TRUE;
if (strcmp(signal->name, name) != 0)
continue;
if (signal->flags & G_DBUS_SIGNAL_FLAG_EXPERIMENTAL) {
const char *env = g_getenv("GDBUS_EXPERIMENTAL");
if (g_strcmp0(env, "1") != 0)
break;
}
*args = signal->args;
return TRUE;
}
error("No signal named %s on interface %s", name, interface);