diff --git a/src/nm-device-interface.c b/src/nm-device-interface.c index f53a6028b8..70cce8b624 100644 --- a/src/nm-device-interface.c +++ b/src/nm-device-interface.c @@ -355,3 +355,12 @@ nm_device_interface_can_assume_connection (NMDeviceInterface *device) return !!NM_DEVICE_INTERFACE_GET_INTERFACE (device)->connection_match_config; } +void +nm_device_interface_set_enabled (NMDeviceInterface *device, gboolean enabled) +{ + g_return_if_fail (NM_IS_DEVICE_INTERFACE (device)); + + if (NM_DEVICE_INTERFACE_GET_INTERFACE (device)->set_enabled) + return NM_DEVICE_INTERFACE_GET_INTERFACE (device)->set_enabled (device, enabled); +} + diff --git a/src/nm-device-interface.h b/src/nm-device-interface.h index 54b5c41a59..0ec5e3da14 100644 --- a/src/nm-device-interface.h +++ b/src/nm-device-interface.h @@ -97,6 +97,8 @@ struct _NMDeviceInterface { NMConnection * (*connection_match_config) (NMDeviceInterface *device, const GSList *specs); + void (*set_enabled) (NMDeviceInterface *device, gboolean enabled); + /* Signals */ void (*state_changed) (NMDeviceInterface *device, NMDeviceState new_state, @@ -131,4 +133,6 @@ NMConnection * nm_device_interface_connection_match_config (NMDeviceInterface *d gboolean nm_device_interface_can_assume_connection (NMDeviceInterface *device); +void nm_device_interface_set_enabled (NMDeviceInterface *device, gboolean enabled); + #endif /* NM_DEVICE_INTERFACE_H */ diff --git a/src/nm-device-wifi.c b/src/nm-device-wifi.c index 20b73fb2fb..972a7de597 100644 --- a/src/nm-device-wifi.c +++ b/src/nm-device-wifi.c @@ -69,8 +69,10 @@ static gboolean impl_device_get_access_points (NMDeviceWifi *device, #define WIRELESS_SECRETS_TRIES "wireless-secrets-tries" +static void device_interface_init (NMDeviceInterface *iface_class); -G_DEFINE_TYPE (NMDeviceWifi, nm_device_wifi, NM_TYPE_DEVICE) +G_DEFINE_TYPE_EXTENDED (NMDeviceWifi, nm_device_wifi, NM_TYPE_DEVICE, 0, + G_IMPLEMENT_INTERFACE (NM_TYPE_DEVICE_INTERFACE, device_interface_init)) #define NM_DEVICE_WIFI_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_WIFI, NMDeviceWifiPrivate)) @@ -3420,15 +3422,13 @@ nm_device_wifi_get_activation_ap (NMDeviceWifi *self) return NULL; } -void -nm_device_wifi_set_enabled (NMDeviceWifi *self, gboolean enabled) +static void +real_set_enabled (NMDeviceInterface *device, gboolean enabled) { - NMDeviceWifiPrivate *priv; + NMDeviceWifi *self = NM_DEVICE_WIFI (device); + NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self); NMDeviceState state; - g_return_if_fail (NM_IS_DEVICE_WIFI (self)); - - priv = NM_DEVICE_WIFI_GET_PRIVATE (self); if (priv->enabled == enabled) return; @@ -3490,6 +3490,12 @@ nm_device_wifi_new (const char *udi, NULL); } +static void +device_interface_init (NMDeviceInterface *iface_class) +{ + iface_class->set_enabled = real_set_enabled; +} + static void nm_device_wifi_init (NMDeviceWifi * self) { diff --git a/src/nm-device-wifi.h b/src/nm-device-wifi.h index 126bc13982..c793844c5c 100644 --- a/src/nm-device-wifi.h +++ b/src/nm-device-wifi.h @@ -102,8 +102,6 @@ NM80211Mode nm_device_wifi_get_mode (NMDeviceWifi *self); NMAccessPoint * nm_device_wifi_get_activation_ap (NMDeviceWifi *self); -void nm_device_wifi_set_enabled (NMDeviceWifi *self, gboolean enabled); - guint32 nm_device_wifi_get_ifindex (NMDeviceWifi *self); RfKillState nm_device_wifi_get_ipw_rfkill_state (NMDeviceWifi *self); diff --git a/src/nm-manager.c b/src/nm-manager.c index 14c2a907e0..59d2bbe9d9 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -1184,7 +1184,7 @@ manager_set_wireless_enabled (NMManager *manager, gboolean enabled) /* enable/disable wireless devices as required */ for (iter = priv->devices; iter; iter = iter->next) { if (NM_IS_DEVICE_WIFI (iter->data)) - nm_device_wifi_set_enabled (NM_DEVICE_WIFI (iter->data), enabled); + nm_device_interface_set_enabled (NM_DEVICE_INTERFACE (iter->data), enabled); } } @@ -1371,7 +1371,7 @@ add_device (NMManager *self, NMDevice *device) * then set this device's rfkill state based on the global state. */ nm_manager_rfkill_update (self); - nm_device_wifi_set_enabled (NM_DEVICE_WIFI (device), priv->wireless_enabled); + nm_device_interface_set_enabled (NM_DEVICE_INTERFACE (device), priv->wireless_enabled); } type_desc = nm_device_get_type_desc (device); @@ -2562,7 +2562,7 @@ impl_manager_sleep (NMManager *self, gboolean sleep, GError **error) * to killswitch changes during sleep. */ if (NM_IS_DEVICE_WIFI (iter->data)) - nm_device_wifi_set_enabled (NM_DEVICE_WIFI (iter->data), wifi_enabled); + nm_device_interface_set_enabled (NM_DEVICE_INTERFACE (iter->data), wifi_enabled); nm_device_clear_autoconnect_inhibit (device); if (nm_device_interface_spec_match_list (NM_DEVICE_INTERFACE (device), unmanaged_specs))