summary refs log tree commit diff
path: root/tui/nmtui-connect.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2015-01-22 00:29:39 +0100
committerMichael Biebl <biebl@debian.org>2015-01-22 00:29:39 +0100
commit2c032d8f1c6292c1338a615e6ec40252889ba85c (patch)
tree1f77182220b2b0264288ba4a476ab47e5bc48716 /tui/nmtui-connect.c
parent33491bc4279481db8ae47213e34a6d695a0e8830 (diff)
Imported Upstream version 1.0.0 upstream/1.0.0
Diffstat (limited to 'tui/nmtui-connect.c')
-rw-r--r--tui/nmtui-connect.c353
1 files changed, 0 insertions, 353 deletions
diff --git a/tui/nmtui-connect.c b/tui/nmtui-connect.c
deleted file mode 100644
index a86b8df5..00000000
--- a/tui/nmtui-connect.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * Copyright 2013 Red Hat, Inc.
- */
-
-/**
- * SECTION:nmtui-connect
- * @short_description: nm-applet-like functionality
- *
- * nmtui-connect implements activating #NMConnections, including
- * presenting a password dialog if necessary.
- *
- * It's supposed to also implement deactivating them, but it doesn't.
- * FIXME.
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-
-#include <glib/gi18n-lib.h>
-#include <nm-utils.h>
-
-#include "nmt-newt.h"
-
-#include "nmtui.h"
-#include "nmtui-connect.h"
-#include "nmt-connect-connection-list.h"
-#include "nmt-password-dialog.h"
-#include "nmt-secret-agent.h"
-#include "nmt-utils.h"
-
-static void
-secrets_requested (NmtSecretAgent *agent,
-                   const char     *request_id,
-                   const char     *title,
-                   const char     *msg,
-                   GPtrArray      *secrets,
-                   gpointer        user_data)
-{
-	NmtNewtForm *form;
-
-	form = nmt_password_dialog_new (request_id, title, msg, secrets);
-	nmt_newt_form_run_sync (form);
-
-	if (nmt_password_dialog_succeeded (NMT_PASSWORD_DIALOG (form)))
-		nmt_secret_agent_response (agent, request_id, secrets);
-	else
-		nmt_secret_agent_response (agent, request_id, NULL);
-
-	g_object_unref (form);
-}
-
-static void
-connect_cancelled (NmtNewtForm *form,
-                   gpointer     user_data)
-{
-	NmtSyncOp *op = user_data;
-	GError *error = NULL;
-
-	error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_CANCELLED, "Cancelled");
-	nmt_sync_op_complete_boolean (op, FALSE, error);
-	g_clear_error (&error);
-}
-
-static void
-activate_ac_state_changed (GObject    *object,
-                           GParamSpec *pspec,
-                           gpointer    user_data)
-{
-	NmtSyncOp *op = user_data;
-	NMActiveConnectionState state;
-	GError *error = NULL;
-
-	state = nm_active_connection_get_state (NM_ACTIVE_CONNECTION (object));
-	if (state == NM_ACTIVE_CONNECTION_STATE_ACTIVATING)
-		return;
-
-	if (state != NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
-		error = g_error_new_literal (NM_CLIENT_ERROR, NM_CLIENT_ERROR_UNKNOWN,
-		                             _("Activation failed"));
-	}
-
-	nmt_sync_op_complete_boolean (op, error == NULL, error);
-	g_clear_error (&error);
-}
-
-static void
-activate_callback (NMClient           *client,
-                   NMActiveConnection *ac,
-                   GError             *error,
-                   gpointer            user_data)
-{
-	NmtSyncOp *op = user_data;
-
-	if (error)
-		nmt_sync_op_complete_pointer (op, NULL, error);
-	else
-		nmt_sync_op_complete_pointer (op, g_object_ref (ac), NULL);
-}
-
-static void
-add_and_activate_callback (NMClient           *client,
-                           NMActiveConnection *ac,
-                           const char         *new_connection_path,
-                           GError             *error,
-                           gpointer            user_data)
-{
-	/* We don't care about @new_connection_path, so... */
-	activate_callback (client, ac, error, user_data);
-}
-
-static void
-activate_connection (NMConnection *connection,
-                     NMDevice     *device,
-                     NMObject     *specific_object)
-{
-	NmtNewtForm *form;
-	NMSecretAgent *agent;
-	NmtNewtWidget *label;
-	NmtSyncOp op;
-	const char *specific_object_path;
-	NMActiveConnection *ac;
-	GError *error = NULL;
-
-	form = g_object_new (NMT_TYPE_NEWT_FORM,
-	                     "escape-exits", TRUE,
-	                     NULL);
-	label = nmt_newt_label_new (_("Connecting..."));
-	nmt_newt_form_set_content (form, label);
-
-	agent = nmt_secret_agent_new ();
-	nm_secret_agent_register (agent);
-	g_signal_connect (agent, "request-secrets", G_CALLBACK (secrets_requested), NULL);
-
-	specific_object_path = specific_object ? nm_object_get_path (specific_object) : NULL;
-
-	/* There's no way to cancel an nm_client_activate_connection() /
-	 * nm_client_add_and_activate_connection() call, so we always let them
-	 * complete, even if the user hits Esc; they shouldn't normally take long
-	 * to complete anyway.
-	 */
-
-	nmt_sync_op_init (&op);
-	if (connection) {
-		nm_client_activate_connection (nm_client,
-		                               connection, device, specific_object_path,
-		                               activate_callback, &op);
-	} else {
-		nm_client_add_and_activate_connection (nm_client,
-		                                       NULL, device, specific_object_path,
-		                                       add_and_activate_callback, &op);
-	}
-
-	nmt_newt_form_show (form);
-
-	ac = nmt_sync_op_wait_pointer (&op, &error);
-	if (!ac) {
-		nmt_newt_message_dialog (_("Could not activate connection: %s"), error->message);
-		g_clear_error (&error);
-		goto done;
-	} else if (nm_active_connection_get_state (ac) == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
-		/* Already active */
-		goto done;
-	} else if (!nmt_newt_widget_get_realized (NMT_NEWT_WIDGET (form))) {
-		/* User already hit Esc */
-		goto done;
-	}
-
-	/* Now wait for the connection to actually reach the ACTIVATED state,
-	 * allowing the user to cancel if it takes too long.
-	 */
-
-	nmt_sync_op_init (&op);
-
-	g_signal_connect (form, "quit", G_CALLBACK (connect_cancelled), &op);
-	g_signal_connect (ac, "notify::" NM_ACTIVE_CONNECTION_STATE,
-	                  G_CALLBACK (activate_ac_state_changed), &op);
-
-	if (!nmt_sync_op_wait_boolean (&op, &error)) {
-		if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
-			nmt_newt_message_dialog (_("Could not activate connection: %s"), error->message);
-		g_clear_error (&error);
-	}
-
-	g_signal_handlers_disconnect_by_func (form, G_CALLBACK (connect_cancelled), &op);
-	g_signal_handlers_disconnect_by_func (ac, G_CALLBACK (activate_ac_state_changed), &op);
-
- done:
-	if (nmt_newt_widget_get_realized (NMT_NEWT_WIDGET (form)))
-		nmt_newt_form_quit (form);
-	g_object_unref (form);
-
-	/* If the activation failed very quickly, then agent won't be registered yet,
-	 * and nm_secret_agent_unregister() would complain if we called it...
-	 */
-	if (nm_secret_agent_get_registered (agent))
-		nm_secret_agent_unregister (agent);
-	g_object_unref (agent);
-}
-
-static void
-listbox_activated (NmtNewtListbox *listbox,
-                   gpointer        user_data)
-{
-	NmtConnectConnectionList *list = NMT_CONNECT_CONNECTION_LIST (listbox);
-	NMConnection *connection;
-	NMDevice *device;
-	NMObject *specific_object;
-	NMActiveConnection *ac;
-
-	if (!nmt_connect_connection_list_get_selection (list,
-	                                                &connection,
-	                                                &device,
-	                                                &specific_object,
-	                                                &ac))
-		return;
-
-	if (ac)
-		nm_client_deactivate_connection (nm_client, ac);
-	else
-		activate_connection (connection, device, specific_object);
-}
-
-static void
-activate_clicked (NmtNewtButton *button,
-                  gpointer       listbox)
-{
-	listbox_activated (listbox, NULL);
-}
-
-static void
-listbox_active_changed (GObject    *object,
-                        GParamSpec *pspec,
-                        gpointer    button)
-{
-	NmtConnectConnectionList *list = NMT_CONNECT_CONNECTION_LIST (object);
-	static const char *activate, *deactivate;
-	static int deactivate_padding, activate_padding;
-	NMActiveConnection *ac;
-	gboolean has_selection;
-
-	if (G_UNLIKELY (activate == NULL)) {
-		int activate_width, deactivate_width;
-
-		activate = _("Activate");
-		activate_width = nmt_newt_text_width (activate);
-		deactivate = _("Deactivate");
-		deactivate_width = nmt_newt_text_width (deactivate);
-
-		activate_padding = MAX (0, deactivate_width - activate_width);
-		deactivate_padding = MAX (0, activate_width - deactivate_width);
-	}
-
-	has_selection = nmt_connect_connection_list_get_selection (list, NULL, NULL, NULL, &ac);
-
-	nmt_newt_component_set_sensitive (button, has_selection);
-	if (has_selection && ac) {
-		nmt_newt_button_set_label (button, deactivate);
-		nmt_newt_widget_set_padding (button, 0, 0, deactivate_padding, 0);
-	} else {
-		nmt_newt_button_set_label (button, activate);
-		nmt_newt_widget_set_padding (button, 0, 0, activate_padding, 0);
-	}
-}
-
-static NmtNewtForm *
-nmt_connect_connection_list (void)
-{
-	int screen_width, screen_height;
-	NmtNewtForm *form;
-	NmtNewtWidget *list, *activate, *quit, *bbox, *grid;
-
-	newtGetScreenSize (&screen_width, &screen_height);
-
-	form = g_object_new (NMT_TYPE_NEWT_FORM,
-	                     "y", 2,
-	                     "height", screen_height - 4,
-	                     "escape-exits", TRUE,
-	                     NULL);
-
-	grid = nmt_newt_grid_new ();
-
-	list = nmt_connect_connection_list_new ();
-	nmt_newt_grid_add (NMT_NEWT_GRID (grid), list, 0, 0);
-	nmt_newt_grid_set_flags (NMT_NEWT_GRID (grid), list,
-	                         NMT_NEWT_GRID_FILL_X | NMT_NEWT_GRID_FILL_Y |
-	                         NMT_NEWT_GRID_EXPAND_X | NMT_NEWT_GRID_EXPAND_Y);
-	g_signal_connect (list, "activated", G_CALLBACK (listbox_activated), NULL);
-
-	bbox = nmt_newt_button_box_new (NMT_NEWT_BUTTON_BOX_VERTICAL);
-	nmt_newt_grid_add (NMT_NEWT_GRID (grid), bbox, 1, 0);
-	nmt_newt_widget_set_padding (bbox, 1, 1, 0, 1);
-
-	activate = nmt_newt_button_box_add_start (NMT_NEWT_BUTTON_BOX (bbox), _("Activate"));
-	g_signal_connect (list, "notify::active", G_CALLBACK (listbox_active_changed), activate);
-	listbox_active_changed (G_OBJECT (list), NULL, activate);
-	g_signal_connect (activate, "clicked", G_CALLBACK (activate_clicked), list);
-
-	quit = nmt_newt_button_box_add_end (NMT_NEWT_BUTTON_BOX (bbox), _("Quit"));
-	nmt_newt_widget_set_exit_on_activate (quit, TRUE);
-
-	nmt_newt_form_set_content (form, grid);
-	return form;
-}
-
-static NmtNewtForm *
-nmt_connect_connection (const char *identifier)
-{
-	NmtNewtWidget *list;
-	NMConnection *connection;
-	NMDevice *device;
-	NMObject *specific_object;
-	NMActiveConnection *ac;
-
-	list = nmt_connect_connection_list_new ();
-	if (!nmt_connect_connection_list_get_connection (NMT_CONNECT_CONNECTION_LIST (list),
-	                                                 identifier,
-	                                                 &connection,
-	                                                 &device,
-	                                                 &specific_object,
-	                                                 &ac))
-		nmt_newt_message_dialog (_("No such connection '%s'"), identifier);
-	else if (ac)
-		nmt_newt_message_dialog (_("Connection is already active"));
-	else
-		activate_connection (connection, device, specific_object);
-	g_object_unref (list);
-
-	return NULL;
-}
-
-NmtNewtForm *
-nmtui_connect (int argc, char **argv)
-{
-	if (argc == 2)
-		return nmt_connect_connection (argv[1]);
-	else
-		return nmt_connect_connection_list ();
-}