diff options
Diffstat (limited to 'clients/tui/nmtui.c')
| -rw-r--r-- | clients/tui/nmtui.c | 47 |
1 files changed, 32 insertions, 15 deletions
diff --git a/clients/tui/nmtui.c b/clients/tui/nmtui.c index 47ba5bf5..70cad5d6 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); |