summary refs log tree commit diff
path: root/clients/tui/nmtui-hostname.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 /clients/tui/nmtui-hostname.c
parent33491bc4279481db8ae47213e34a6d695a0e8830 (diff)
Imported Upstream version 1.0.0 upstream/1.0.0
Diffstat (limited to 'clients/tui/nmtui-hostname.c')
-rw-r--r--clients/tui/nmtui-hostname.c128
1 files changed, 128 insertions, 0 deletions
diff --git a/clients/tui/nmtui-hostname.c b/clients/tui/nmtui-hostname.c
new file mode 100644
index 00000000..23de95b8
--- /dev/null
+++ b/clients/tui/nmtui-hostname.c
@@ -0,0 +1,128 @@
+/* -*- 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-hostname
+ * @short_description: hostname-setting functionality
+ *
+ * nmtui-hostname implements the "set hostname" functionality
+ */
+
+#include "config.h"
+
+#include <glib/gi18n-lib.h>
+
+#include "nmt-newt.h"
+
+#include "nmtui.h"
+#include "nmtui-hostname.h"
+#include "nmt-utils.h"
+
+static char *
+nmtui_hostname_run_dialog (void)
+{
+	NmtNewtForm *form;
+	NmtNewtWidget *widget, *ok, *cancel;
+	NmtNewtGrid *grid;
+	NmtNewtEntry *entry;
+	NmtNewtButtonBox *bbox;
+	char *hostname, *ret = NULL;
+
+	form = g_object_new (NMT_TYPE_NEWT_FORM,
+	                     "title", _("Set Hostname"),
+	                     "escape-exits", TRUE,
+	                     NULL);
+
+	widget = nmt_newt_grid_new ();
+	nmt_newt_form_set_content (form, widget);
+	grid = NMT_NEWT_GRID (widget);
+
+	widget = nmt_newt_label_new (_("Hostname"));
+	nmt_newt_grid_add (grid, widget, 0, 0);
+
+	widget = nmt_newt_entry_new (40, 0);
+	nmt_newt_widget_set_exit_on_activate (widget, TRUE);
+	nmt_newt_grid_add (grid, widget, 1, 0);
+	nmt_newt_widget_set_padding (widget, 1, 0, 0, 0);
+	entry = NMT_NEWT_ENTRY (widget);
+
+	widget = nmt_newt_button_box_new (NMT_NEWT_BUTTON_BOX_HORIZONTAL);
+	nmt_newt_grid_add (grid, widget, 1, 1);
+	nmt_newt_widget_set_padding (widget, 0, 1, 0, 0);
+	bbox = NMT_NEWT_BUTTON_BOX (widget);
+
+	cancel = nmt_newt_button_box_add_end (bbox, _("Cancel"));
+	nmt_newt_widget_set_exit_on_activate (cancel, TRUE);
+	ok = nmt_newt_button_box_add_end (bbox, _("OK"));
+	nmt_newt_widget_set_exit_on_activate (ok, TRUE);
+
+	g_object_get (G_OBJECT (nm_client),
+	              NM_CLIENT_HOSTNAME, &hostname,
+	              NULL);
+	nmt_newt_entry_set_text (entry, hostname);
+	g_free (hostname);
+
+	widget = nmt_newt_form_run_sync (form);
+	if (widget == (NmtNewtWidget *)entry || widget == ok)
+		ret = g_strdup (nmt_newt_entry_get_text (entry));
+
+	g_object_unref (form);
+	return ret;
+}
+
+static void
+hostname_set (GObject      *object,
+              GAsyncResult *result,
+              gpointer      op)
+{
+	GError *error = NULL;
+
+	nm_client_save_hostname_finish (NM_CLIENT (object), result, &error);
+	nmt_sync_op_complete_boolean (op, error == NULL, error);
+	g_clear_error (&error);
+}
+
+NmtNewtForm *
+nmtui_hostname (int argc, char **argv)
+{
+	const char *hostname;
+	char *tmp = NULL;
+	NmtSyncOp op;
+	GError *error = NULL;
+
+	if (argc == 2)
+		hostname = argv[1];
+	else
+		hostname = tmp = nmtui_hostname_run_dialog ();
+
+	if (hostname) {
+		nmt_sync_op_init (&op);
+		nm_client_save_hostname_async (nm_client, hostname, NULL, hostname_set, &op);
+		if (nmt_sync_op_wait_boolean (&op, &error)) {
+			/* Translators: this indicates the result. ie, "I have set the hostname to ..." */
+			nmt_newt_message_dialog (_("Set hostname to '%s'"), hostname);
+		} else {
+			nmt_newt_message_dialog (_("Unable to set hostname: %s"), error->message);
+			g_error_free (error);
+		}
+
+		g_free (tmp);
+	}
+
+	return NULL;
+}