summaryrefslogtreecommitdiff
path: root/clients/tui/nmtui.c
diff options
context:
space:
mode:
Diffstat (limited to 'clients/tui/nmtui.c')
-rw-r--r--clients/tui/nmtui.c47
1 files changed, 32 insertions, 15 deletions
diff --git a/clients/tui/nmtui.c b/clients/tui/nmtui.c
index 47ba5bf56e..70cad5d6ad 100644
--- a/clients/tui/nmtui.c
+++ b/clients/tui/nmtui.c
@@ -43,7 +43,7 @@
NMClient *nm_client;
static GMainLoop *loop;
-typedef NmtNewtForm * (*NmtuiSubprogram) (int argc, char **argv);
+typedef NmtNewtForm * (*NmtuiSubprogram) (gboolean is_top, int argc, char **argv);
static const struct {
const char *name, *shortcut, *arg;
@@ -61,22 +61,43 @@ static const struct {
nmtui_hostname }
};
static const int num_subprograms = G_N_ELEMENTS (subprograms);
+static NmtNewtForm *toplevel_form;
-static void
+static NmtNewtForm *
quit_func (int argc, char **argv)
{
+ if (toplevel_form)
+ nmt_newt_form_quit (toplevel_form);
+
nmtui_quit ();
+
+ return NULL;
+}
+
+static void
+main_list_activated (NmtNewtWidget *widget, NmtNewtListbox *listbox)
+{
+ NmtNewtForm *form;
+ NmtuiSubprogram sub;
+
+ sub = nmt_newt_listbox_get_active_key (listbox);
+ if (sub) {
+ form = sub (FALSE, 0, NULL);
+ if (form) {
+ nmt_newt_form_show (form);
+ g_object_unref (form);
+ }
+ }
}
static NmtNewtForm *
-nmtui_main (int argc, char **argv)
+nmtui_main (gboolean is_top, int argc, char **argv)
{
NmtNewtForm *form;
NmtNewtWidget *widget, *ok;
NmtNewtGrid *grid;
NmtNewtListbox *listbox;
NmtNewtButtonBox *bbox;
- NmtuiSubprogram subprogram = NULL;
int i;
form = g_object_new (NMT_TYPE_NEWT_FORM,
@@ -97,8 +118,9 @@ nmtui_main (int argc, char **argv)
NULL);
nmt_newt_grid_add (grid, widget, 0, 1);
nmt_newt_widget_set_padding (widget, 0, 1, 0, 1);
- nmt_newt_widget_set_exit_on_activate (widget, TRUE);
listbox = NMT_NEWT_LISTBOX (widget);
+ g_signal_connect (widget, "activated",
+ G_CALLBACK (main_list_activated), listbox);
for (i = 0; i < num_subprograms; i++) {
nmt_newt_listbox_append (listbox, _(subprograms[i].display_name),
@@ -112,17 +134,12 @@ nmtui_main (int argc, char **argv)
bbox = NMT_NEWT_BUTTON_BOX (widget);
ok = nmt_newt_button_box_add_end (bbox, _("OK"));
- nmt_newt_widget_set_exit_on_activate (ok, TRUE);
+ g_signal_connect (ok, "activated",
+ G_CALLBACK (main_list_activated), listbox);
- widget = nmt_newt_form_run_sync (form);
- if (widget)
- subprogram = nmt_newt_listbox_get_active_key (listbox);
- g_object_unref (form);
+ toplevel_form = form;
- if (subprogram)
- return subprogram (argc, argv);
- else
- return NULL;
+ return form;
}
/**
@@ -179,7 +196,7 @@ idle_run_subprogram (gpointer user_data)
NmtuiStartupData *data = user_data;
NmtNewtForm *form;
- form = data->subprogram (data->argc, data->argv);
+ form = data->subprogram (TRUE, data->argc, data->argv);
if (form) {
g_signal_connect (form, "quit", G_CALLBACK (toplevel_form_quit), NULL);
nmt_newt_form_show (form);