static void cell_error_data_func (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) { guint32 col = GPOINTER_TO_UINT (data); char *value = NULL; char *addr, *next_hop; guint32 prefix; gint64 metric; const char *color = "red"; gboolean invalid = FALSE; if (col == COL_ADDRESS) invalid = !utils_tree_model_get_address (tree_model, iter, COL_ADDRESS, AF_INET, TRUE, &addr, &value); else if (col == COL_PREFIX) invalid = !utils_tree_model_get_ip4_prefix (tree_model, iter, COL_PREFIX, TRUE, &prefix, &value) || prefix == 0; else if (col == COL_NEXT_HOP) invalid = !utils_tree_model_get_address (tree_model, iter, COL_NEXT_HOP, AF_INET, FALSE, &next_hop, &value); else if (col == COL_METRIC) invalid = !utils_tree_model_get_int64 (tree_model, iter, COL_METRIC, 0, G_MAXUINT32, FALSE, &metric, &value); else g_warn_if_reached (); if (invalid) utils_set_cell_background (cell, color, value); else utils_set_cell_background (cell, NULL, NULL); g_free (value); }
static void cell_error_data_func (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) { guint32 col = GPOINTER_TO_UINT (data); char *value = NULL; const char *color = NULL; guint32 prefix; gboolean invalid = FALSE; gtk_tree_model_get (tree_model, iter, col, &value, -1); if (col == COL_ADDRESS) invalid = !value || !*value || !nm_utils_ipaddr_valid (AF_INET, value) || is_address_unspecified (value); else if (col == COL_PREFIX) invalid = !parse_netmask (value, &prefix); else if (col == COL_GATEWAY) { invalid = value && *value && !nm_utils_ipaddr_valid (AF_INET, value); /* Check gateway against address and prefix */ if (!invalid && possibly_wrong_gateway (tree_model, iter, value)) color = "#DDC000"; /* darker than "yellow", else selected text is hard to read */ } else g_warn_if_reached (); if (invalid) color = "red"; utils_set_cell_background (cell, color, color ? value : NULL); g_free (value); }