summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-05-14 20:49:20 -0700
committerMarcel Holtmann <marcel@holtmann.org>2009-05-14 20:49:20 -0700
commit3dd391655187e588a4371f329b228df7e9745ba9 (patch)
treeb6fcbf30c099aaba84c91e851d2967009ea256dd /src
parent19d241d45b6ebfd7e1cc7d5e289ceba9316db6f2 (diff)
downloadconnman-3dd391655187e588a4371f329b228df7e9745ba9.tar.gz
connman-3dd391655187e588a4371f329b228df7e9745ba9.tar.bz2
connman-3dd391655187e588a4371f329b228df7e9745ba9.zip
Make sure to sort connected services first always first
Diffstat (limited to 'src')
-rw-r--r--src/service.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/service.c b/src/service.c
index c194c557..951c9d6c 100644
--- a/src/service.c
+++ b/src/service.c
@@ -592,6 +592,13 @@ static gint service_compare(gconstpointer a, gconstpointer b,
struct connman_service *service_a = (void *) a;
struct connman_service *service_b = (void *) b;
+ if (service_a->state != service_b->state) {
+ if (service_a->state == CONNMAN_SERVICE_STATE_READY)
+ return -1;
+ if (service_b->state == CONNMAN_SERVICE_STATE_READY)
+ return 1;
+ }
+
if (service_a->order > service_b->order)
return -1;
@@ -669,6 +676,8 @@ int __connman_service_set_carrier(struct connman_service *service,
int __connman_service_indicate_state(struct connman_service *service,
enum connman_service_state state)
{
+ GSequenceIter *iter;
+
DBG("service %p state %d", service, state);
if (service == NULL)
@@ -728,6 +737,12 @@ int __connman_service_indicate_state(struct connman_service *service,
state_changed(service);
}
+ iter = g_hash_table_lookup(service_hash, service->identifier);
+ if (iter != NULL)
+ g_sequence_sort_changed(iter, service_compare, NULL);
+
+ __connman_profile_changed();
+
return 0;
}