static void carrick_list_set_model (CarrickList *list, CarrickNetworkModel *model) { CarrickListPrivate *priv = list->priv; if (priv->model) { g_signal_handlers_disconnect_by_func (priv->model, _row_inserted_cb, list); g_signal_handlers_disconnect_by_func (priv->model, _row_deleted_cb, list); g_signal_handlers_disconnect_by_func (priv->model, _row_changed_cb, list); g_signal_handlers_disconnect_by_func (priv->model, _rows_reordered_cb, list); g_object_unref (priv->model); priv->model = NULL; } if (model) { DBusGProxy *manager; priv->model = g_object_ref (model); /* Keep track of OfflineMode, AvailableTechnologies and * EnabledTechnologies using connman.Manager */ manager = carrick_network_model_get_proxy (priv->model); dbus_g_proxy_connect_signal (manager, "PropertyChanged", G_CALLBACK (_mngr_property_changed_cb), list, NULL); net_connman_Manager_get_properties_async (manager, _mngr_get_properties_cb, list); gtk_tree_model_foreach (GTK_TREE_MODEL (model), _create_service_item, NULL); /* connect signals for changes in model */ g_signal_connect (priv->model, "row-inserted", G_CALLBACK (_row_inserted_cb), list); g_signal_connect (priv->model, "row-deleted", G_CALLBACK (_row_deleted_cb), list); g_signal_connect (priv->model, "row-changed", G_CALLBACK (_row_changed_cb), list); g_signal_connect (priv->model, "rows-reordered", G_CALLBACK (_rows_reordered_cb), list); } }
static void carrick_network_model_init (CarrickNetworkModel *self) { CarrickNetworkModelPrivate *priv; GError *error = NULL; priv = self->priv = NETWORK_MODEL_PRIVATE (self); priv->services = NULL; priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); if (error) { g_debug ("Error connecting to bus: %s", error->message); g_clear_error (&error); /* FIXME: Do better? */ } priv->manager = dbus_g_proxy_new_for_name (priv->connection, CONNMAN_SERVICE, CONNMAN_MANAGER_PATH, CONNMAN_MANAGER_INTERFACE); dbus_g_proxy_add_signal (priv->manager, "PropertyChanged", G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID); dbus_g_proxy_connect_signal (priv->manager, "PropertyChanged", G_CALLBACK (network_model_manager_changed_cb), self, NULL); net_connman_Manager_get_properties_async (priv->manager, network_model_manager_get_properties_cb, self); const GType column_types[] = { G_TYPE_OBJECT, /* proxy */ G_TYPE_UINT, /* index */ G_TYPE_STRING, /* name */ G_TYPE_STRING, /* type */ G_TYPE_STRING, /* state */ G_TYPE_BOOLEAN, /* favourite */ G_TYPE_UINT, /* strength */ G_TYPE_STRING, /* security */ G_TYPE_BOOLEAN, /* passphrase required */ G_TYPE_STRING, /* passphrase */ G_TYPE_BOOLEAN, /* setup required */ G_TYPE_STRING, /* method */ G_TYPE_STRING, /* address */ G_TYPE_STRING, /* netmask */ G_TYPE_STRING, /* gateway */ G_TYPE_STRING, /* manually configured method */ G_TYPE_STRING, /* manually configured address */ G_TYPE_STRING, /* manually configured netmask */ G_TYPE_STRING, /* manually configured gateway */ G_TYPE_STRING, /* ipv6 method */ G_TYPE_STRING, /* ipv6 address */ G_TYPE_UINT, /* ipv6 prefix length */ G_TYPE_STRING, /* ipv6 gateway */ G_TYPE_STRING, /* manually configured ipv6 method */ G_TYPE_STRING, /* manually configured ipv6 address */ G_TYPE_UINT, /* manually configured ipv6 prefix length */ G_TYPE_STRING, /* manually configured ipv6 gateway */ G_TYPE_STRV, /* name servers */ G_TYPE_STRV, /* manually configured name servers */ G_TYPE_BOOLEAN, /* immutable */ G_TYPE_BOOLEAN, /* login_required */ G_TYPE_STRING, /* ethernet mac address */ G_TYPE_STRING, /* proxy method */ G_TYPE_STRING, /* proxy url */ G_TYPE_STRV, /* proxy servers */ G_TYPE_STRV, /* proxy excludes */ G_TYPE_STRING, /* configured proxy method */ G_TYPE_STRING, /* configured proxy url */ G_TYPE_STRV, /* configured proxy servers */ G_TYPE_STRV, /* configured proxy excludes */ }; gtk_list_store_set_column_types (GTK_LIST_STORE (self), G_N_ELEMENTS (column_types), (GType *) column_types); gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (self), network_model_sort_cb, NULL, NULL); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (self), GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_DESCENDING); }