static void sync_accounts (GisGoaPage *page) { GisGoaPagePrivate *priv = gis_goa_page_get_instance_private (page); GList *accounts, *l; accounts = goa_client_get_accounts (priv->goa_client); for (l = accounts; l != NULL; l = l->next) { GoaObject *object = GOA_OBJECT (l->data); GoaAccount *account = goa_object_get_account (object); const char *account_type = goa_account_get_provider_type (account); ProviderWidget *provider_widget; provider_widget = g_hash_table_lookup (priv->providers, account_type); if (!provider_widget) continue; priv->accounts_exist = TRUE; if (provider_widget->displayed_account) continue; provider_widget->displayed_account = account; sync_provider_widget (provider_widget); } g_list_free_full (accounts, (GDestroyNotify) g_object_unref); sync_visibility (page); gis_page_set_skippable (GIS_PAGE (page), !priv->accounts_exist); gis_page_set_complete (GIS_PAGE (page), priv->accounts_exist); }
static void gis_goa_page_constructed (GObject *object) { GisGoaPage *page = GIS_GOA_PAGE (object); GisGoaPagePrivate *priv = gis_goa_page_get_instance_private (page); GError *error = NULL; GNetworkMonitor *network_monitor = g_network_monitor_get_default (); G_OBJECT_CLASS (gis_goa_page_parent_class)->constructed (object); gis_page_set_skippable (GIS_PAGE (page), TRUE); priv->providers = g_hash_table_new (g_str_hash, g_str_equal); priv->goa_client = goa_client_new_sync (NULL, &error); if (priv->goa_client == NULL) { g_warning ("Failed to get a GoaClient: %s", error->message); g_error_free (error); return; } g_signal_connect (priv->goa_client, "account-added", G_CALLBACK (accounts_changed), page); g_signal_connect (priv->goa_client, "account-removed", G_CALLBACK (accounts_changed), page); g_signal_connect (network_monitor, "network-changed", G_CALLBACK (network_status_changed), page); gtk_list_box_set_header_func (GTK_LIST_BOX (priv->accounts_list), update_header_func, NULL, NULL); g_signal_connect (priv->accounts_list, "row-activated", G_CALLBACK (row_activated), page); populate_provider_list (page); sync_accounts (page); }
static void gis_network_page_constructed (GObject *object) { GisNetworkPage *page = GIS_NETWORK_PAGE (object); GisNetworkPagePrivate *priv = gis_network_page_get_instance_private (page); const GPtrArray *devices; NMDevice *device; guint i; gboolean visible = FALSE; G_OBJECT_CLASS (gis_network_page_parent_class)->constructed (object); priv->icons = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); priv->nm_client = nm_client_new (); g_object_bind_property (priv->nm_client, "wireless-enabled", priv->turn_on_switch, "active", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); devices = nm_client_get_devices (priv->nm_client); if (devices) { for (i = 0; i < devices->len; i++) { device = g_ptr_array_index (devices, i); if (!nm_device_get_managed (device)) continue; if (nm_device_get_device_type (device) == NM_DEVICE_TYPE_WIFI) { /* FIXME deal with multiple, dynamic devices */ priv->nm_device = g_object_ref (device); break; } } } if (priv->nm_device == NULL) { g_debug ("No network device found, hiding network page"); goto out; } if (nm_device_get_state (priv->nm_device) == NM_DEVICE_STATE_ACTIVATED) { g_debug ("Activated network device found, hiding network page"); goto out; } visible = TRUE; priv->nm_settings = nm_remote_settings_new (NULL); g_signal_connect (priv->nm_device, "notify::state", G_CALLBACK (device_state_changed), page); g_signal_connect (priv->nm_client, "notify::active-connections", G_CALLBACK (active_connections_changed), page); gtk_list_box_set_selection_mode (GTK_LIST_BOX (priv->network_list), GTK_SELECTION_NONE); gtk_list_box_set_header_func (GTK_LIST_BOX (priv->network_list), update_header_func, NULL, NULL); gtk_list_box_set_sort_func (GTK_LIST_BOX (priv->network_list), ap_sort, NULL, NULL); g_signal_connect (priv->network_list, "row-activated", G_CALLBACK (row_activated), page); refresh_wireless_list (page); sync_complete (page); gis_page_set_skippable (GIS_PAGE (page), TRUE); out: gtk_widget_set_visible (GTK_WIDGET (page), visible); }