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);
    }
}
예제 #2
0
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);
}