diff options
Diffstat (limited to 'src/nm-rfkill-manager.c')
| -rw-r--r-- | src/nm-rfkill-manager.c | 609 |
1 files changed, 309 insertions, 300 deletions
diff --git a/src/nm-rfkill-manager.c b/src/nm-rfkill-manager.c index 28666fa0..4b3e18d7 100644 --- a/src/nm-rfkill-manager.c +++ b/src/nm-rfkill-manager.c @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: GPL-2.0+ +/* SPDX-License-Identifier: GPL-2.0+ */ /* * Copyright (C) 2009 - 2013 Red Hat, Inc. */ @@ -14,409 +14,418 @@ /*****************************************************************************/ enum { - RFKILL_CHANGED, - LAST_SIGNAL, + RFKILL_CHANGED, + LAST_SIGNAL, }; -static guint signals[LAST_SIGNAL] = { 0 }; +static guint signals[LAST_SIGNAL] = {0}; typedef struct { - NMUdevClient *udev_client; + NMUdevClient *udev_client; - /* Authoritative rfkill state (RFKILL_* enum) */ - RfKillState rfkill_states[RFKILL_TYPE_MAX]; - GSList *killswitches; + /* Authoritative rfkill state (RFKILL_* enum) */ + RfKillState rfkill_states[RFKILL_TYPE_MAX]; + GSList * killswitches; } NMRfkillManagerPrivate; struct _NMRfkillManager { - GObject parent; - NMRfkillManagerPrivate _priv; + GObject parent; + NMRfkillManagerPrivate _priv; }; struct _NMRfkillManagerClass { - GObjectClass parent; + GObjectClass parent; }; -G_DEFINE_TYPE (NMRfkillManager, nm_rfkill_manager, G_TYPE_OBJECT) +G_DEFINE_TYPE(NMRfkillManager, nm_rfkill_manager, G_TYPE_OBJECT) -#define NM_RFKILL_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMRfkillManager, NM_IS_RFKILL_MANAGER) +#define NM_RFKILL_MANAGER_GET_PRIVATE(self) \ + _NM_GET_PRIVATE(self, NMRfkillManager, NM_IS_RFKILL_MANAGER) /*****************************************************************************/ typedef struct { - char *name; - guint64 seqnum; - char *path; - char *driver; - RfKillType rtype; - int state; - gboolean platform; + char * name; + guint64 seqnum; + char * path; + char * driver; + RfKillType rtype; + int state; + gboolean platform; } Killswitch; RfKillState -nm_rfkill_manager_get_rfkill_state (NMRfkillManager *self, RfKillType rtype) +nm_rfkill_manager_get_rfkill_state(NMRfkillManager *self, RfKillType rtype) { - g_return_val_if_fail (self != NULL, RFKILL_UNBLOCKED); - g_return_val_if_fail (rtype < RFKILL_TYPE_MAX, RFKILL_UNBLOCKED); + g_return_val_if_fail(self != NULL, RFKILL_UNBLOCKED); + g_return_val_if_fail(rtype < RFKILL_TYPE_MAX, RFKILL_UNBLOCKED); - return NM_RFKILL_MANAGER_GET_PRIVATE (self)->rfkill_states[rtype]; + return NM_RFKILL_MANAGER_GET_PRIVATE(self)->rfkill_states[rtype]; } static const char * -rfkill_type_to_desc (RfKillType rtype) +rfkill_type_to_desc(RfKillType rtype) { - if (rtype == 0) - return "Wi-Fi"; - else if (rtype == 1) - return "WWAN"; - else if (rtype == 2) - return "WiMAX"; - return "unknown"; + if (rtype == 0) + return "Wi-Fi"; + else if (rtype == 1) + return "WWAN"; + else if (rtype == 2) + return "WiMAX"; + return "unknown"; } static const char * -rfkill_state_to_desc (RfKillState rstate) +rfkill_state_to_desc(RfKillState rstate) { - if (rstate == 0) - return "unblocked"; - else if (rstate == 1) - return "soft-blocked"; - else if (rstate == 2) - return "hard-blocked"; - return "unknown"; + if (rstate == 0) + return "unblocked"; + else if (rstate == 1) + return "soft-blocked"; + else if (rstate == 2) + return "hard-blocked"; + return "unknown"; } static Killswitch * -killswitch_new (struct udev_device *device, RfKillType rtype) +killswitch_new(struct udev_device *device, RfKillType rtype) { - Killswitch *ks; - struct udev_device *parent = NULL, *grandparent = NULL; - const char *driver, *subsys, *parent_subsys = NULL; - - ks = g_malloc0 (sizeof (Killswitch)); - ks->name = g_strdup (udev_device_get_sysname (device)); - ks->seqnum = udev_device_get_seqnum (device); - ks->path = g_strdup (udev_device_get_syspath (device)); - ks->rtype = rtype; - - driver = udev_device_get_property_value (device, "DRIVER"); - subsys = udev_device_get_subsystem (device); - - /* Check parent for various attributes */ - parent = udev_device_get_parent (device); - if (parent) { - parent_subsys = udev_device_get_subsystem (parent); - if (!driver) - driver = udev_device_get_property_value (parent, "DRIVER"); - if (!driver) { - /* Sigh; try the grandparent */ - grandparent = udev_device_get_parent (parent); - if (grandparent) - driver = udev_device_get_property_value (grandparent, "DRIVER"); - } - } - - if (!driver) - driver = "(unknown)"; - ks->driver = g_strdup (driver); - - if ( g_strcmp0 (subsys, "platform") == 0 - || g_strcmp0 (parent_subsys, "platform") == 0 - || g_strcmp0 (subsys, "acpi") == 0 - || g_strcmp0 (parent_subsys, "acpi") == 0) - ks->platform = TRUE; - - return ks; + Killswitch * ks; + struct udev_device *parent = NULL, *grandparent = NULL; + const char * driver, *subsys, *parent_subsys = NULL; + + ks = g_malloc0(sizeof(Killswitch)); + ks->name = g_strdup(udev_device_get_sysname(device)); + ks->seqnum = udev_device_get_seqnum(device); + ks->path = g_strdup(udev_device_get_syspath(device)); + ks->rtype = rtype; + + driver = udev_device_get_property_value(device, "DRIVER"); + subsys = udev_device_get_subsystem(device); + + /* Check parent for various attributes */ + parent = udev_device_get_parent(device); + if (parent) { + parent_subsys = udev_device_get_subsystem(parent); + if (!driver) + driver = udev_device_get_property_value(parent, "DRIVER"); + if (!driver) { + /* Sigh; try the grandparent */ + grandparent = udev_device_get_parent(parent); + if (grandparent) + driver = udev_device_get_property_value(grandparent, "DRIVER"); + } + } + + if (!driver) + driver = "(unknown)"; + ks->driver = g_strdup(driver); + + if (g_strcmp0(subsys, "platform") == 0 || g_strcmp0(parent_subsys, "platform") == 0 + || g_strcmp0(subsys, "acpi") == 0 || g_strcmp0(parent_subsys, "acpi") == 0) + ks->platform = TRUE; + + return ks; } static void -killswitch_destroy (Killswitch *ks) +killswitch_destroy(Killswitch *ks) { - g_return_if_fail (ks != NULL); + g_return_if_fail(ks != NULL); - g_free (ks->name); - g_free (ks->path); - g_free (ks->driver); - memset (ks, 0, sizeof (Killswitch)); - g_free (ks); + g_free(ks->name); + g_free(ks->path); + g_free(ks->driver); + memset(ks, 0, sizeof(Killswitch)); + g_free(ks); } static RfKillState -sysfs_state_to_nm_state (int sysfs_state) +sysfs_state_to_nm_state(int sysfs_state) { - switch (sysfs_state) { - case 0: - return RFKILL_SOFT_BLOCKED; - case 1: - return RFKILL_UNBLOCKED; - case 2: - return RFKILL_HARD_BLOCKED; - default: - nm_log_warn (LOGD_RFKILL, "unhandled rfkill state %d", sysfs_state); - break; - } - return RFKILL_UNBLOCKED; + switch (sysfs_state) { + case 0: + return RFKILL_SOFT_BLOCKED; + case 1: + return RFKILL_UNBLOCKED; + case 2: + return RFKILL_HARD_BLOCKED; + default: + nm_log_warn(LOGD_RFKILL, "unhandled rfkill state %d", sysfs_state); + break; + } + return RFKILL_UNBLOCKED; } static void -recheck_killswitches (NMRfkillManager *self) +recheck_killswitches(NMRfkillManager *self) { - NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE (self); - GSList *iter; - RfKillState poll_states[RFKILL_TYPE_MAX]; - RfKillState platform_states[RFKILL_TYPE_MAX]; - gboolean platform_checked[RFKILL_TYPE_MAX]; - int i; - - /* Default state is unblocked */ - for (i = 0; i < RFKILL_TYPE_MAX; i++) { - poll_states[i] = RFKILL_UNBLOCKED; - platform_states[i] = RFKILL_UNBLOCKED; - platform_checked[i] = FALSE; - } - - /* Poll the states of all killswitches */ - for (iter = priv->killswitches; iter; iter = g_slist_next (iter)) { - Killswitch *ks = iter->data; - struct udev_device *device; - RfKillState dev_state; - int sysfs_state; - - device = udev_device_new_from_subsystem_sysname (nm_udev_client_get_udev (priv->udev_client), - "rfkill", ks->name); - if (!device) - continue; - sysfs_state = _nm_utils_ascii_str_to_int64 (udev_device_get_property_value (device, "RFKILL_STATE"), - 10, G_MININT, G_MAXINT, -1); - dev_state = sysfs_state_to_nm_state (sysfs_state); - - nm_log_dbg (LOGD_RFKILL, "%s rfkill%s switch %s state now %d/%u", - rfkill_type_to_desc (ks->rtype), - ks->platform ? " platform" : "", - ks->name, - sysfs_state, - dev_state); - - if (ks->platform == FALSE) { - if (dev_state > poll_states[ks->rtype]) - poll_states[ks->rtype] = dev_state; - } else { - platform_checked[ks->rtype] = TRUE; - if (dev_state > platform_states[ks->rtype]) - platform_states[ks->rtype] = dev_state; - } - udev_device_unref (device); - } - - /* Log and emit change signal for final rfkill states */ - for (i = 0; i < RFKILL_TYPE_MAX; i++) { - if (platform_checked[i] == TRUE) { - /* blocked platform switch state overrides device state, otherwise - * let the device state stand. (bgo #655773) - */ - if (platform_states[i] != RFKILL_UNBLOCKED) - poll_states[i] = platform_states[i]; - } - - if (poll_states[i] != priv->rfkill_states[i]) { - nm_log_dbg (LOGD_RFKILL, "%s rfkill state now '%s'", - rfkill_type_to_desc (i), - rfkill_state_to_desc (poll_states[i])); - - priv->rfkill_states[i] = poll_states[i]; - g_signal_emit (self, signals[RFKILL_CHANGED], 0, i, priv->rfkill_states[i]); - } - } + NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE(self); + GSList * iter; + RfKillState poll_states[RFKILL_TYPE_MAX]; + RfKillState platform_states[RFKILL_TYPE_MAX]; + gboolean platform_checked[RFKILL_TYPE_MAX]; + int i; + + /* Default state is unblocked */ + for (i = 0; i < RFKILL_TYPE_MAX; i++) { + poll_states[i] = RFKILL_UNBLOCKED; + platform_states[i] = RFKILL_UNBLOCKED; + platform_checked[i] = FALSE; + } + + /* Poll the states of all killswitches */ + for (iter = priv->killswitches; iter; iter = g_slist_next(iter)) { + Killswitch * ks = iter->data; + struct udev_device *device; + RfKillState dev_state; + int sysfs_state; + + device = udev_device_new_from_subsystem_sysname(nm_udev_client_get_udev(priv->udev_client), + "rfkill", + ks->name); + if (!device) + continue; + sysfs_state = + _nm_utils_ascii_str_to_int64(udev_device_get_property_value(device, "RFKILL_STATE"), + 10, + G_MININT, + G_MAXINT, + -1); + dev_state = sysfs_state_to_nm_state(sysfs_state); + + nm_log_dbg(LOGD_RFKILL, + "%s rfkill%s switch %s state now %d/%u", + rfkill_type_to_desc(ks->rtype), + ks->platform ? " platform" : "", + ks->name, + sysfs_state, + dev_state); + + if (ks->platform == FALSE) { + if (dev_state > poll_states[ks->rtype]) + poll_states[ks->rtype] = dev_state; + } else { + platform_checked[ks->rtype] = TRUE; + if (dev_state > platform_states[ks->rtype]) + platform_states[ks->rtype] = dev_state; + } + udev_device_unref(device); + } + + /* Log and emit change signal for final rfkill states */ + for (i = 0; i < RFKILL_TYPE_MAX; i++) { + if (platform_checked[i] == TRUE) { + /* blocked platform switch state overrides device state, otherwise + * let the device state stand. (bgo #655773) + */ + if (platform_states[i] != RFKILL_UNBLOCKED) + poll_states[i] = platform_states[i]; + } + + if (poll_states[i] != priv->rfkill_states[i]) { + nm_log_dbg(LOGD_RFKILL, + "%s rfkill state now '%s'", + rfkill_type_to_desc(i), + rfkill_state_to_desc(poll_states[i])); + + priv->rfkill_states[i] = poll_states[i]; + g_signal_emit(self, signals[RFKILL_CHANGED], 0, i, priv->rfkill_states[i]); + } + } } static Killswitch * -killswitch_find_by_name (NMRfkillManager *self, const char *name) +killswitch_find_by_name(NMRfkillManager *self, const char *name) { - NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE (self); - GSList *iter; + NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE(self); + GSList * iter; - g_return_val_if_fail (name != NULL, NULL); + g_return_val_if_fail(name != NULL, NULL); - for (iter = priv->killswitches; iter; iter = g_slist_next (iter)) { - Killswitch *candidate = iter->data; + for (iter = priv->killswitches; iter; iter = g_slist_next(iter)) { + Killswitch *candidate = iter->data; - if (!strcmp (name, candidate->name)) - return candidate; - } - return NULL; + if (!strcmp(name, candidate->name)) + return candidate; + } + return NULL; } static RfKillType -rfkill_type_to_enum (const char *str) +rfkill_type_to_enum(const char *str) { - g_return_val_if_fail (str != NULL, RFKILL_TYPE_UNKNOWN); + g_return_val_if_fail(str != NULL, RFKILL_TYPE_UNKNOWN); - if (!strcmp (str, "wlan")) - return RFKILL_TYPE_WLAN; - else if (!strcmp (str, "wwan")) - return RFKILL_TYPE_WWAN; + if (!strcmp(str, "wlan")) + return RFKILL_TYPE_WLAN; + else if (!strcmp(str, "wwan")) + return RFKILL_TYPE_WWAN; - return RFKILL_TYPE_UNKNOWN; + return RFKILL_TYPE_UNKNOWN; } static void -add_one_killswitch (NMRfkillManager *self, struct udev_device *device) +add_one_killswitch(NMRfkillManager *self, struct udev_device *device) { - NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE (self); - const char *str_type; - RfKillType rtype; - Killswitch *ks; - - str_type = udev_device_get_property_value (device, "RFKILL_TYPE"); - rtype = rfkill_type_to_enum (str_type); - if (rtype == RFKILL_TYPE_UNKNOWN) - return; - - ks = killswitch_new (device, rtype); - priv->killswitches = g_slist_prepend (priv->killswitches, ks); - - nm_log_info (LOGD_RFKILL, "%s: found %s radio killswitch (at %s) (%sdriver %s)", - ks->name, - rfkill_type_to_desc (rtype), - ks->path, - ks->platform ? "platform " : "", - ks->driver ?: "<unknown>"); + NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE(self); + const char * str_type; + RfKillType rtype; + Killswitch * ks; + + str_type = udev_device_get_property_value(device, "RFKILL_TYPE"); + rtype = rfkill_type_to_enum(str_type); + if (rtype == RFKILL_TYPE_UNKNOWN) + return; + + ks = killswitch_new(device, rtype); + priv->killswitches = g_slist_prepend(priv->killswitches, ks); + + nm_log_info(LOGD_RFKILL, + "%s: found %s radio killswitch (at %s) (%sdriver %s)", + ks->name, + rfkill_type_to_desc(rtype), + ks->path, + ks->platform ? "platform " : "", + ks->driver ?: "<unknown>"); } static void -rfkill_add (NMRfkillManager *self, struct udev_device *device) +rfkill_add(NMRfkillManager *self, struct udev_device *device) { - const char *name; + const char *name; - g_return_if_fail (device != NULL); - name = udev_device_get_sysname (device); - g_return_if_fail (name != NULL); + g_return_if_fail(device != NULL); + name = udev_device_get_sysname(device); + g_return_if_fail(name != NULL); - if (!killswitch_find_by_name (self, name)) - add_one_killswitch (self, device); + if (!killswitch_find_by_name(self, name)) + add_one_killswitch(self, device); } static void -rfkill_remove (NMRfkillManager *self, - struct udev_device *device) +rfkill_remove(NMRfkillManager *self, struct udev_device *device) { - NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE (self); - GSList *iter; - const char *name; - - g_return_if_fail (device != NULL); - name = udev_device_get_sysname (device); - g_return_if_fail (name != NULL); - - for (iter = priv->killswitches; iter; iter = g_slist_next (iter)) { - Killswitch *ks = iter->data; - - if (!strcmp (ks->name, name)) { - nm_log_info (LOGD_RFKILL, "radio killswitch %s disappeared", ks->path); - priv->killswitches = g_slist_remove (priv->killswitches, ks); - killswitch_destroy (ks); - break; - } - } + NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE(self); + GSList * iter; + const char * name; + + g_return_if_fail(device != NULL); + name = udev_device_get_sysname(device); + g_return_if_fail(name != NULL); + + for (iter = priv->killswitches; iter; iter = g_slist_next(iter)) { + Killswitch *ks = iter->data; + + if (!strcmp(ks->name, name)) { + nm_log_info(LOGD_RFKILL, "radio killswitch %s disappeared", ks->path); + priv->killswitches = g_slist_remove(priv->killswitches, ks); + killswitch_destroy(ks); + break; + } + } } static void -handle_uevent (NMUdevClient *client, - struct udev_device *device, - gpointer user_data) +handle_uevent(NMUdevClient *client, struct udev_device *device, gpointer user_data) { - NMRfkillManager *self = NM_RFKILL_MANAGER (user_data); - const char *subsys; - const char *action; + NMRfkillManager *self = NM_RFKILL_MANAGER(user_data); + const char * subsys; + const char * action; - action = udev_device_get_action (device); + action = udev_device_get_action(device); - g_return_if_fail (action != NULL); + g_return_if_fail(action != NULL); - /* A bit paranoid */ - subsys = udev_device_get_subsystem (device); - g_return_if_fail (!g_strcmp0 (subsys, "rfkill")); + /* A bit paranoid */ + subsys = udev_device_get_subsystem(device); + g_return_if_fail(!g_strcmp0(subsys, "rfkill")); - nm_log_dbg (LOGD_PLATFORM, "udev rfkill event: action '%s' device '%s'", - action, udev_device_get_sysname (device)); + nm_log_dbg(LOGD_PLATFORM, + "udev rfkill event: action '%s' device '%s'", + action, + udev_device_get_sysname(device)); - if (!strcmp (action, "add")) - rfkill_add (self, device); - else if (!strcmp (action, "remove")) - rfkill_remove (self, device); + if (!strcmp(action, "add")) + rfkill_add(self, device); + else if (!strcmp(action, "remove")) + rfkill_remove(self, device); - recheck_killswitches (self); + recheck_killswitches(self); } /*****************************************************************************/ static void -nm_rfkill_manager_init (NMRfkillManager *self) +nm_rfkill_manager_init(NMRfkillManager *self) { - NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE (self); - struct udev_enumerate *enumerate; - struct udev_list_entry *iter; - guint i; - - for (i = 0; i < RFKILL_TYPE_MAX; i++) - priv->rfkill_states[i] = RFKILL_UNBLOCKED; - - priv->udev_client = nm_udev_client_new ((const char *[]) { "rfkill", NULL }, - handle_uevent, self); - - enumerate = nm_udev_client_enumerate_new (priv->udev_client); - udev_enumerate_scan_devices (enumerate); - iter = udev_enumerate_get_list_entry (enumerate); - for (; iter; iter = udev_list_entry_get_next (iter)) { - struct udev_device *udevice; - - udevice = udev_device_new_from_syspath (udev_enumerate_get_udev (enumerate), - udev_list_entry_get_name (iter)); - if (!udevice) - continue; - - add_one_killswitch (self, udevice); - udev_device_unref (udevice); - } - udev_enumerate_unref (enumerate); - - recheck_killswitches (self); + NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE(self); + struct udev_enumerate * enumerate; + struct udev_list_entry *iter; + guint i; + + for (i = 0; i < RFKILL_TYPE_MAX; i++) + priv->rfkill_states[i] = RFKILL_UNBLOCKED; + + priv->udev_client = nm_udev_client_new((const char *[]){"rfkill", NULL}, handle_uevent, self); + + enumerate = nm_udev_client_enumerate_new(priv->udev_client); + udev_enumerate_scan_devices(enumerate); + iter = udev_enumerate_get_list_entry(enumerate); + for (; iter; iter = udev_list_entry_get_next(iter)) { + struct udev_device *udevice; + + udevice = udev_device_new_from_syspath(udev_enumerate_get_udev(enumerate), + udev_list_entry_get_name(iter)); + if (!udevice) + continue; + + add_one_killswitch(self, udevice); + udev_device_unref(udevice); + } + udev_enumerate_unref(enumerate); + + recheck_killswitches(self); } NMRfkillManager * -nm_rfkill_manager_new (void) +nm_rfkill_manager_new(void) { - return NM_RFKILL_MANAGER (g_object_new (NM_TYPE_RFKILL_MANAGER, NULL)); + return NM_RFKILL_MANAGER(g_object_new(NM_TYPE_RFKILL_MANAGER, NULL)); } static void -dispose (GObject *object) +dispose(GObject *object) { - NMRfkillManager *self = NM_RFKILL_MANAGER (object); - NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE (self); + NMRfkillManager * self = NM_RFKILL_MANAGER(object); + NMRfkillManagerPrivate *priv = NM_RFKILL_MANAGER_GET_PRIVATE(self); - if (priv->killswitches) { - g_slist_free_full (priv->killswitches, (GDestroyNotify) killswitch_destroy); - priv->killswitches = NULL; - } + if (priv->killswitches) { + g_slist_free_full(priv->killswitches, (GDestroyNotify) killswitch_destroy); + priv->killswitches = NULL; + } - priv->udev_client = nm_udev_client_unref (priv->udev_client); + priv->udev_client = nm_udev_client_unref(priv->udev_client); - G_OBJECT_CLASS (nm_rfkill_manager_parent_class)->dispose (object); + G_OBJECT_CLASS(nm_rfkill_manager_parent_class)->dispose(object); } static void -nm_rfkill_manager_class_init (NMRfkillManagerClass *klass) +nm_rfkill_manager_class_init(NMRfkillManagerClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->dispose = dispose; - - signals[RFKILL_CHANGED] = - g_signal_new (NM_RFKILL_MANAGER_SIGNAL_RFKILL_CHANGED, - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - 0, - NULL, NULL, NULL, - G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->dispose = dispose; + + signals[RFKILL_CHANGED] = g_signal_new(NM_RFKILL_MANAGER_SIGNAL_RFKILL_CHANGED, + G_OBJECT_CLASS_TYPE(object_class), + G_SIGNAL_RUN_FIRST, + 0, + NULL, + NULL, + NULL, + G_TYPE_NONE, + 2, + G_TYPE_UINT, + G_TYPE_UINT); } |