};
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 {
.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,
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,
}
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);