static void monitoring_widget_changed (GObject *object, GParamSpec *pspec, gpointer user_data) { NmtPageBond *bond = NMT_PAGE_BOND (user_data); NmtPageBondPrivate *priv = NMT_PAGE_BOND_GET_PRIVATE (bond); if (priv->updating) return; priv->monitoring_mode = nmt_newt_popup_get_active (priv->monitoring); if (priv->monitoring_mode == NMT_PAGE_BOND_MONITORING_MII) { nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->miimon), TRUE); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->updelay), TRUE); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->downdelay), TRUE); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_interval), FALSE); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_ip_target), FALSE); } else { nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_interval), TRUE); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_ip_target), TRUE); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->miimon), FALSE); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->updelay), FALSE); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->downdelay), FALSE); } }
static void mode_widget_changed (GObject *object, GParamSpec *pspec, gpointer user_data) { NmtPageBond *bond = NMT_PAGE_BOND (user_data); NmtPageBondPrivate *priv = NMT_PAGE_BOND_GET_PRIVATE (bond); const char *mode; if (priv->updating) return; mode = nmt_newt_popup_get_active_id (priv->mode); priv->updating = TRUE; nm_setting_bond_add_option (priv->s_bond, NM_SETTING_BOND_OPTION_MODE, mode); priv->updating = FALSE; if (!strcmp (mode, "balance-tlb") || !strcmp (mode, "balance-alb")) { nmt_newt_popup_set_active (priv->monitoring, NMT_PAGE_BOND_MONITORING_MII); nmt_newt_component_set_sensitive (NMT_NEWT_COMPONENT (priv->monitoring), FALSE); } else nmt_newt_component_set_sensitive (NMT_NEWT_COMPONENT (priv->monitoring), TRUE); if (!strcmp (mode, "active-backup")) { nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->primary), TRUE); nm_setting_bond_add_option (priv->s_bond, NM_SETTING_BOND_OPTION_PRIMARY, nmt_newt_entry_get_text (priv->primary)); } else { nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->primary), FALSE); nm_setting_bond_remove_option (priv->s_bond, NM_SETTING_BOND_OPTION_PRIMARY); } }
static void adjust_border_for_allocation (NmtNewtSectionPrivate *priv, int height) { int i; /* We have to use a series of one-line labels rather than a multi-line * textbox, because newt will hide any component that's partially offscreen, * but we want the on-screen portion of the border to show even if part of * it is offscreen. */ if (height == 1) { nmt_newt_widget_set_visible (priv->border_closed_label, TRUE); nmt_newt_widget_set_visible (priv->border_open_label, FALSE); for (i = 0; i < priv->border_line_labels->len; i++) nmt_newt_widget_set_visible (priv->border_line_labels->pdata[i], FALSE); nmt_newt_widget_set_visible (priv->border_end_label, FALSE); } else { nmt_newt_widget_set_visible (priv->border_closed_label, FALSE); nmt_newt_widget_set_visible (priv->border_open_label, TRUE); for (i = 0; i < height - 2; i++) { if (i >= priv->border_line_labels->len) { NmtNewtWidget *label; label = nmt_newt_label_new (line_glyph); g_ptr_array_add (priv->border_line_labels, label); nmt_newt_grid_add (NMT_NEWT_GRID (priv->border_grid), label, 0, i + 1); } else nmt_newt_widget_set_visible (priv->border_line_labels->pdata[i], TRUE); } nmt_newt_widget_set_visible (priv->border_end_label, TRUE); nmt_newt_grid_move (NMT_NEWT_GRID (priv->border_grid), priv->border_end_label, 0, height - 1); } }
static void nmt_widget_list_constructed (GObject *object) { NmtWidgetListPrivate *priv = NMT_WIDGET_LIST_GET_PRIVATE (object); if (priv->length == 0 && priv->empty_widget) { nmt_newt_widget_set_visible (priv->empty_widget, TRUE); nmt_newt_grid_move (NMT_NEWT_GRID (object), priv->add_button, 0, 1); } G_OBJECT_CLASS (nmt_widget_list_parent_class)->constructed (object); }
static void mode_changed (GObject *object, GParamSpec *pspec, gpointer user_data) { NMSettingIPTunnel *s_ip_tunnel = NM_SETTING_IP_TUNNEL (object); NmtPageIPTunnel *ip_tunnel = NMT_PAGE_IP_TUNNEL (user_data); NmtPageIPTunnelPrivate *priv = NMT_PAGE_IP_TUNNEL_GET_PRIVATE (ip_tunnel); NMIPTunnelMode mode; gboolean enable_keys; mode = nm_setting_ip_tunnel_get_mode (s_ip_tunnel); enable_keys = NM_IN_SET (mode, NM_IP_TUNNEL_MODE_GRE, NM_IP_TUNNEL_MODE_IP6GRE); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->input_key), enable_keys); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->output_key), enable_keys); if (!enable_keys) { nmt_newt_entry_set_text (priv->input_key, ""); nmt_newt_entry_set_text (priv->output_key, ""); } }
static void nmt_newt_section_init (NmtNewtSection *section) { NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (section); NmtNewtContainerClass *parent_class = NMT_NEWT_CONTAINER_CLASS (nmt_newt_section_parent_class); priv->show_border = TRUE; priv->border_grid = nmt_newt_grid_new (); parent_class->add (NMT_NEWT_CONTAINER (section), priv->border_grid); priv->border_open_label = nmt_newt_label_new (open_glyph); nmt_newt_widget_set_visible (priv->border_open_label, FALSE); nmt_newt_grid_add (NMT_NEWT_GRID (priv->border_grid), priv->border_open_label, 0, 0); priv->border_closed_label = nmt_newt_label_new (closed_glyph); nmt_newt_grid_add (NMT_NEWT_GRID (priv->border_grid), priv->border_closed_label, 0, 0); priv->border_end_label = nmt_newt_label_new (end_glyph); nmt_newt_widget_set_visible (priv->border_open_label, FALSE); nmt_newt_grid_add (NMT_NEWT_GRID (priv->border_grid), priv->border_end_label, 0, 1); priv->border_line_labels = g_ptr_array_new (); }
static void bond_options_changed (GObject *object, GParamSpec *pspec, gpointer user_data) { NMSettingBond *s_bond = NM_SETTING_BOND (object); NmtPageBond *bond = NMT_PAGE_BOND (user_data); NmtPageBondPrivate *priv = NMT_PAGE_BOND_GET_PRIVATE (bond); const char *val; char **ips; if (priv->updating) return; priv->updating = TRUE; val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_MODE); nmt_newt_popup_set_active_id (priv->mode, val); if (!strcmp (val, "active-backup")) { nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->primary), TRUE); val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_PRIMARY); nmt_newt_entry_set_text (priv->primary, val); } else nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->primary), FALSE); if (priv->monitoring_mode == NMT_PAGE_BOND_MONITORING_UNKNOWN) { val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_ARP_INTERVAL); if (val && strcmp (val, "0") != 0) priv->monitoring_mode = NMT_PAGE_BOND_MONITORING_ARP; else priv->monitoring_mode = NMT_PAGE_BOND_MONITORING_MII; } nmt_newt_popup_set_active (priv->monitoring, priv->monitoring_mode); if (priv->monitoring_mode == NMT_PAGE_BOND_MONITORING_MII) { nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->miimon), TRUE); val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_MIIMON); nmt_newt_entry_set_text (priv->miimon, val); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->updelay), TRUE); val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_UPDELAY); nmt_newt_entry_set_text (priv->updelay, val); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->downdelay), TRUE); val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_DOWNDELAY); nmt_newt_entry_set_text (priv->downdelay, val); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_interval), FALSE); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_ip_target), FALSE); } else { nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_interval), TRUE); val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_ARP_INTERVAL); nmt_newt_entry_set_text (priv->arp_interval, val); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->arp_ip_target), TRUE); val = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_ARP_IP_TARGET); ips = g_strsplit (val, ",", -1); g_object_set (G_OBJECT (priv->arp_ip_target), "strings", ips, NULL); g_strfreev (ips); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->miimon), FALSE); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->updelay), FALSE); nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->downdelay), FALSE); } priv->updating = FALSE; }
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); } }