CEPage * ce_page_vpn_new (NMConnectionEditor *editor, NMConnection *connection, GtkWindow *parent_window, NMClient *client, const char **out_secrets_setting_name, GError **error) { CEPageVpn *self; CEPageVpnPrivate *priv; const char *service_type; GError *local = NULL; self = CE_PAGE_VPN (ce_page_new (CE_TYPE_PAGE_VPN, editor, connection, parent_window, client, NULL, NULL, _("VPN"))); if (!self) { g_set_error_literal (error, NMA_ERROR, NMA_ERROR_GENERIC, _("Could not load VPN user interface.")); return NULL; } priv = CE_PAGE_VPN_GET_PRIVATE (self); priv->setting = nm_connection_get_setting_vpn (connection); g_assert (priv->setting); service_type = nm_setting_vpn_get_service_type (priv->setting); g_assert (service_type); priv->service_type = g_strdup (service_type); priv->plugin = vpn_get_plugin_by_service (service_type); if (!priv->plugin) { g_set_error (error, NMA_ERROR, NMA_ERROR_GENERIC, _("Could not find VPN plugin for “%s”."), service_type); g_object_unref (self); return NULL; } priv->plugin = g_object_ref (priv->plugin); priv->editor = nm_vpn_editor_plugin_get_editor (priv->plugin, CE_PAGE (self)->connection, &local); if (!priv->editor) { g_set_error (error, NMA_ERROR, NMA_ERROR_GENERIC, _("Could not load editor VPN plugin for “%s” (%s)."), service_type, local ? local->message : _("unknown failure")); g_clear_error (&local); g_object_unref (self); return NULL; } g_signal_connect (self, "initialized", G_CALLBACK (finish_setup), NULL); *out_secrets_setting_name = NM_SETTING_VPN_SETTING_NAME; return CE_PAGE (self); }
static gboolean ce_page_validate_v (CEPage *page, NMConnection *connection, GError **error) { CEPageVpn *self = CE_PAGE_VPN (page); CEPageVpnPrivate *priv = CE_PAGE_VPN_GET_PRIVATE (self); return nm_vpn_editor_update_connection (priv->editor, connection, error); }
static gboolean validate (CEPage *page, NMConnection *connection, GError **error) { CEPageVpn *self = CE_PAGE_VPN (page); CEPageVpnPrivate *priv = CE_PAGE_VPN_GET_PRIVATE (self); return nm_vpn_plugin_ui_widget_interface_update_connection (priv->ui, connection, error); }
static void dispose (GObject *object) { CEPageVpn *page = CE_PAGE_VPN (object); g_clear_object (&page->ui); G_OBJECT_CLASS (ce_page_vpn_parent_class)->dispose (object); }
static void page_initialized (CEPage *page, GError *error, gpointer user_data) { NMConnectionEditor *editor = NM_CONNECTION_EDITOR (user_data); GtkWidget *widget, *parent; GtkNotebook *notebook; GtkWidget *label; GList *children, *iter; gpointer order, child_order; int i; if (error) { gtk_widget_hide (editor->window); nm_connection_editor_error (editor->parent_window, _("Error initializing editor"), "%s", error->message); g_signal_emit (editor, editor_signals[EDITOR_DONE], 0, GTK_RESPONSE_NONE); return; } /* Add the page to the UI */ notebook = GTK_NOTEBOOK (gtk_builder_get_object (editor->builder, "notebook")); label = gtk_label_new (ce_page_get_title (page)); widget = ce_page_get_page (page); parent = gtk_widget_get_parent (widget); if (parent) gtk_container_remove (GTK_CONTAINER (parent), widget); order = g_object_get_data (G_OBJECT (page), ORDER_TAG); g_object_set_data (G_OBJECT (widget), ORDER_TAG, order); children = gtk_container_get_children (GTK_CONTAINER (notebook)); for (iter = children, i = 0; iter; iter = iter->next, i++) { child_order = g_object_get_data (G_OBJECT (iter->data), ORDER_TAG); if (child_order > order) break; } g_list_free (children); gtk_notebook_insert_page (notebook, widget, label, i); if (CE_IS_PAGE_VPN (page) && ce_page_vpn_can_export (CE_PAGE_VPN (page))) gtk_widget_show (editor->export_button); /* Move the page from the initializing list to the main page list */ editor->initializing_pages = g_slist_remove (editor->initializing_pages, page); editor->pages = g_slist_append (editor->pages, page); recheck_initialization (editor); }
CEPage * ce_page_vpn_new (NMConnection *connection, GtkWindow *parent_window, NMClient *client, NMRemoteSettings *settings, const char **out_secrets_setting_name, GError **error) { CEPageVpn *self; CEPageVpnPrivate *priv; const char *service_type; self = CE_PAGE_VPN (ce_page_new (CE_TYPE_PAGE_VPN, connection, parent_window, client, settings, NULL, NULL, _("VPN"))); if (!self) { g_set_error_literal (error, NMA_ERROR, NMA_ERROR_GENERIC, _("Could not load VPN user interface.")); return NULL; } priv = CE_PAGE_VPN_GET_PRIVATE (self); priv->setting = nm_connection_get_setting_vpn (connection); g_assert (priv->setting); service_type = nm_setting_vpn_get_service_type (priv->setting); g_assert (service_type); priv->service_type = g_strdup (service_type); priv->plugin = vpn_get_plugin_by_service (service_type); if (!priv->plugin) { g_set_error (error, NMA_ERROR, NMA_ERROR_GENERIC, _("Could not find VPN plugin service for '%s'."), service_type); g_object_unref (self); return NULL; } g_signal_connect (self, "initialized", G_CALLBACK (finish_setup), NULL); *out_secrets_setting_name = NM_SETTING_VPN_SETTING_NAME; return CE_PAGE (self); }
gboolean ce_page_vpn_save_secrets (CEPage *page, NMConnection *connection) { CEPageVpn *self = CE_PAGE_VPN (page); CEPageVpnPrivate *priv = CE_PAGE_VPN_GET_PRIVATE (self); GError *error = NULL; gboolean success = FALSE; success = nm_vpn_plugin_ui_widget_interface_save_secrets (priv->ui, connection, &error); if (!success) { g_warning ("%s: couldn't save VPN secrets: (%d) %s", __func__, error ? error->code : -1, error ? error->message : "unknown"); if (error) g_error_free (error); } return success; }
static gboolean validate (CEPage *page, NMConnection *connection, GError **error) { CEPageVpn *self = CE_PAGE_VPN (page); GtkWidget *widget; g_object_set (self->setting_connection, NM_SETTING_CONNECTION_ID, gtk_entry_get_text (self->name), NULL); widget = GTK_WIDGET (gtk_builder_get_object (CE_PAGE (page)->builder, "combo_zone")); firewall_ui_to_setting (self->setting_connection, widget); if (!nm_setting_verify (NM_SETTING (self->setting_connection), NULL, error)) return FALSE; if (!self->ui) return TRUE; return nm_vpn_plugin_ui_widget_interface_update_connection (self->ui, connection, error); }
CEPage * ce_page_vpn_new (NMConnection *connection, GtkWindow *parent_window, GError **error) { CEPageVpn *self; CEPageVpnPrivate *priv; CEPage *parent; const char *service_type; self = CE_PAGE_VPN (g_object_new (CE_TYPE_PAGE_VPN, CE_PAGE_CONNECTION, connection, CE_PAGE_PARENT_WINDOW, parent_window, NULL)); parent = CE_PAGE (self); priv = CE_PAGE_VPN_GET_PRIVATE (self); parent->title = g_strdup (_("VPN")); priv->setting = (NMSettingVPN *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN); g_assert (priv->setting); service_type = nm_setting_vpn_get_service_type (priv->setting); g_assert (service_type); priv->service_type = g_strdup (service_type); priv->plugin = vpn_get_plugin_by_service (service_type); if (!priv->plugin) { g_set_error (error, 0, 0, _("Could not find VPN plugin service for '%s'."), service_type); g_object_unref (self); return NULL; } g_signal_connect (self, "initialized", G_CALLBACK (finish_setup), NULL); if (!ce_page_initialize (parent, NM_SETTING_VPN_SETTING_NAME, error)) { g_object_unref (self); return NULL; } return CE_PAGE (self); }