static void nmt_newt_container_finalize (GObject *object) { NmtNewtContainer *container = NMT_NEWT_CONTAINER (object); NmtNewtContainerPrivate *priv = NMT_NEWT_CONTAINER_GET_PRIVATE (object); while (priv->children->len) nmt_newt_container_remove (container, priv->children->pdata[0]); G_OBJECT_CLASS (nmt_newt_container_parent_class)->finalize (object); }
static void rebuild_header (NmtEditorSection *section) { NmtEditorSectionPrivate *priv = NMT_EDITOR_SECTION_GET_PRIVATE (section); /* Removing any widget in an NmtEditorGrid removes its whole row, so we can * remove the existing title/widget/toggle by asking to remove toggle. */ nmt_newt_container_remove (NMT_NEWT_CONTAINER (priv->header), priv->toggle); nmt_editor_grid_append (priv->header, priv->title, priv->header_widget, priv->toggle); nmt_editor_grid_set_row_flags (priv->header, priv->toggle, NMT_EDITOR_GRID_ROW_LABEL_ALIGN_LEFT | NMT_EDITOR_GRID_ROW_EXTRA_ALIGN_RIGHT); }
static void ensure_widgets (NmtWidgetList *list) { NmtWidgetListPrivate *priv = NMT_WIDGET_LIST_GET_PRIVATE (list); NmtNewtWidget *widget, *button, *focus; gboolean was_empty; NmtNewtForm *form; int i; was_empty = priv->widgets->len == 0; if (priv->length < priv->widgets->len) { /* remove excess widgets */ for (i = priv->length; i < priv->widgets->len; i++) { nmt_newt_container_remove (NMT_NEWT_CONTAINER (list), priv->widgets->pdata[i]); nmt_newt_container_remove (NMT_NEWT_CONTAINER (list), priv->remove_buttons->pdata[i]); } g_ptr_array_set_size (priv->widgets, priv->length); g_ptr_array_set_size (priv->remove_buttons, priv->length); } else if (priv->length > priv->widgets->len) { /* add new widgets */ for (i = priv->widgets->len; i < priv->length; i++) { widget = NMT_WIDGET_LIST_GET_CLASS (list)->create_widget (list, i); nmt_newt_grid_add (NMT_NEWT_GRID (list), widget, 0, i); g_ptr_array_add (priv->widgets, widget); button = nmt_newt_button_new (_("Remove")); g_signal_connect (button, "clicked", G_CALLBACK (remove_clicked), list); nmt_newt_grid_add (NMT_NEWT_GRID (list), button, 1, i); nmt_newt_widget_set_padding (button, 1, 0, 0, 0); g_ptr_array_add (priv->remove_buttons, button); } } else return; if (priv->widgets->len == 0 && priv->empty_widget) { nmt_newt_widget_set_visible (priv->empty_widget, TRUE); nmt_newt_grid_move (NMT_NEWT_GRID (list), priv->add_button, 0, 1); } else { if (was_empty && priv->empty_widget) nmt_newt_widget_set_visible (priv->empty_widget, FALSE); nmt_newt_grid_move (NMT_NEWT_GRID (list), priv->add_button, 0, priv->length); } form = nmt_newt_widget_get_form (NMT_NEWT_WIDGET (list)); if (form) { if (priv->widgets->len) { if (was_empty) focus = priv->widgets->pdata[0]; else focus = priv->widgets->pdata[priv->widgets->len - 1]; } else focus = priv->add_button; nmt_newt_form_set_focus (form, focus); } g_clear_object (&priv->add_sensitivity); if (priv->widgets->len) { widget = priv->widgets->pdata[priv->widgets->len - 1]; priv->add_sensitivity = g_object_bind_property (widget, "valid", priv->add_button, "sensitive", G_BINDING_SYNC_CREATE); g_object_add_weak_pointer (G_OBJECT (priv->add_sensitivity), (gpointer *)&priv->add_sensitivity); } }