mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-03 23:00:28 +01:00
2007-09-25 Dan Williams <dcbw@redhat.com>
* src/nm-manager.c - (nm_manager_update_state): new function; updates state and emits appropriate signals ensuring a state-change signal for the same state never gets emitted twice in a row. - (manager_device_state_changed): handle more device state to get a better picture of the overall NM state git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@2882 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
parent
28de472ce7
commit
e6f7cb13df
2 changed files with 60 additions and 49 deletions
|
|
@ -1,3 +1,12 @@
|
|||
2007-09-25 Dan Williams <dcbw@redhat.com>
|
||||
|
||||
* src/nm-manager.c
|
||||
- (nm_manager_update_state): new function; updates state and emits
|
||||
appropriate signals ensuring a state-change signal for the same state
|
||||
never gets emitted twice in a row.
|
||||
- (manager_device_state_changed): handle more device state to get a
|
||||
better picture of the overall NM state
|
||||
|
||||
2007-09-25 Dan Williams <dcbw@redhat.com>
|
||||
|
||||
* libnm-glib/nm-settings.c
|
||||
|
|
|
|||
100
src/nm-manager.c
100
src/nm-manager.c
|
|
@ -21,11 +21,11 @@ static gboolean impl_manager_legacy_state (NMManager *manager, guint32 *state, G
|
|||
#include "nm-manager-glue.h"
|
||||
|
||||
static void nm_manager_connections_destroy (NMManager *manager, NMConnectionType type);
|
||||
static void manager_state_changed (NMManager *manager);
|
||||
static void manager_set_wireless_enabled (NMManager *manager, gboolean enabled);
|
||||
|
||||
typedef struct {
|
||||
GSList *devices;
|
||||
NMState state;
|
||||
|
||||
GHashTable *user_connections;
|
||||
DBusGProxy *user_proxy;
|
||||
|
|
@ -71,6 +71,7 @@ nm_manager_init (NMManager *manager)
|
|||
|
||||
priv->wireless_enabled = TRUE;
|
||||
priv->sleeping = FALSE;
|
||||
priv->state = NM_STATE_DISCONNECTED;
|
||||
|
||||
priv->user_connections = g_hash_table_new_full (g_str_hash,
|
||||
g_str_equal,
|
||||
|
|
@ -83,6 +84,47 @@ nm_manager_init (NMManager *manager)
|
|||
g_object_unref);
|
||||
}
|
||||
|
||||
NMState
|
||||
nm_manager_get_state (NMManager *manager)
|
||||
{
|
||||
g_return_val_if_fail (NM_IS_MANAGER (manager), NM_STATE_UNKNOWN);
|
||||
|
||||
return NM_MANAGER_GET_PRIVATE (manager)->state;
|
||||
}
|
||||
|
||||
static void
|
||||
nm_manager_update_state (NMManager *manager)
|
||||
{
|
||||
NMManagerPrivate *priv;
|
||||
NMState new_state = NM_STATE_DISCONNECTED;
|
||||
|
||||
g_return_if_fail (NM_IS_MANAGER (manager));
|
||||
|
||||
priv = NM_MANAGER_GET_PRIVATE (manager);
|
||||
|
||||
if (priv->sleeping) {
|
||||
new_state = NM_STATE_ASLEEP;
|
||||
} else {
|
||||
GSList *iter;
|
||||
|
||||
for (iter = priv->devices; iter; iter = iter->next) {
|
||||
NMDevice *dev = NM_DEVICE (iter->data);
|
||||
|
||||
if (nm_device_get_state (dev) == NM_DEVICE_STATE_ACTIVATED) {
|
||||
new_state = NM_STATE_CONNECTED;
|
||||
break;
|
||||
} else if (nm_device_is_activating (dev)) {
|
||||
new_state = NM_STATE_CONNECTING;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (priv->state != new_state) {
|
||||
priv->state = new_state;
|
||||
g_signal_emit (manager, signals[STATE_CHANGE], 0, priv->state);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
finalize (GObject *object)
|
||||
{
|
||||
|
|
@ -125,7 +167,8 @@ get_property (GObject *object, guint prop_id,
|
|||
|
||||
switch (prop_id) {
|
||||
case PROP_STATE:
|
||||
g_value_set_uint (value, nm_manager_get_state (NM_MANAGER (object)));
|
||||
nm_manager_update_state (NM_MANAGER (object));
|
||||
g_value_set_uint (value, priv->state);
|
||||
break;
|
||||
case PROP_WIRELESS_ENABLED:
|
||||
g_value_set_boolean (value, priv->wireless_enabled);
|
||||
|
|
@ -586,12 +629,6 @@ nm_manager_connections_destroy (NMManager *manager,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
manager_state_changed (NMManager *manager)
|
||||
{
|
||||
g_signal_emit (manager, signals[STATE_CHANGE], 0, nm_manager_get_state (manager));
|
||||
}
|
||||
|
||||
static void
|
||||
manager_set_wireless_enabled (NMManager *manager, gboolean enabled)
|
||||
{
|
||||
|
|
@ -625,18 +662,7 @@ manager_device_state_changed (NMDevice *device, NMDeviceState state, gpointer us
|
|||
{
|
||||
NMManager *manager = NM_MANAGER (user_data);
|
||||
|
||||
/* Only these state changes can modify the manager state */
|
||||
switch (state) {
|
||||
case NM_DEVICE_STATE_ACTIVATED:
|
||||
case NM_DEVICE_STATE_FAILED:
|
||||
case NM_DEVICE_STATE_CANCELLED:
|
||||
case NM_DEVICE_STATE_DOWN:
|
||||
case NM_DEVICE_STATE_DISCONNECTED:
|
||||
manager_state_changed (manager);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
nm_manager_update_state (manager);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -773,33 +799,6 @@ nm_manager_get_device_by_udi (NMManager *manager, const char *udi)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
NMState
|
||||
nm_manager_get_state (NMManager *manager)
|
||||
{
|
||||
NMManagerPrivate *priv;
|
||||
GSList *iter;
|
||||
NMState state = NM_STATE_DISCONNECTED;
|
||||
|
||||
g_return_val_if_fail (NM_IS_MANAGER (manager), NM_STATE_UNKNOWN);
|
||||
|
||||
priv = NM_MANAGER_GET_PRIVATE (manager);
|
||||
|
||||
if (priv->sleeping)
|
||||
return NM_STATE_ASLEEP;
|
||||
|
||||
for (iter = priv->devices; iter; iter = iter->next) {
|
||||
NMDevice *dev = NM_DEVICE (iter->data);
|
||||
|
||||
if (nm_device_get_state (dev) == NM_DEVICE_STATE_ACTIVATED)
|
||||
return NM_STATE_CONNECTED;
|
||||
|
||||
if (nm_device_is_activating (dev))
|
||||
state = NM_STATE_CONNECTING;
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_manager_wireless_enabled (NMManager *manager)
|
||||
{
|
||||
|
|
@ -845,7 +844,7 @@ nm_manager_sleep (NMManager *manager, gboolean sleep)
|
|||
priv->devices = NULL;
|
||||
}
|
||||
|
||||
manager_state_changed (manager);
|
||||
nm_manager_update_state (manager);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
|
@ -890,7 +889,10 @@ impl_manager_legacy_wake (NMManager *manager, GError **err)
|
|||
static gboolean
|
||||
impl_manager_legacy_state (NMManager *manager, guint32 *state, GError **err)
|
||||
{
|
||||
*state = nm_manager_get_state (manager);
|
||||
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
|
||||
|
||||
nm_manager_update_state (manager);
|
||||
*state = priv->state;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue