static void gtk_cell_view_set_cell_data (GtkCellView *cell_view) { GtkTreeIter iter; GtkTreePath *path; g_return_if_fail (cell_view->priv->displayed_row != NULL); path = gtk_tree_row_reference_get_path (cell_view->priv->displayed_row); if (!path) return; gtk_tree_model_get_iter (cell_view->priv->model, &iter, path); gtk_tree_path_free (path); gtk_cell_area_apply_attributes (cell_view->priv->area, cell_view->priv->model, &iter, FALSE, FALSE); if (cell_view->priv->draw_sensitive) { GList *l, *cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (cell_view->priv->area)); for (l = cells; l; l = l->next) { GObject *renderer = l->data; g_object_set (renderer, "sensitive", TRUE, NULL); } g_list_free (cells); } }
static void gtk_cell_view_request_model (GtkCellView *cellview, GtkTreeIter *parent, GtkOrientation orientation, gint for_size, gint *minimum_size, gint *natural_size) { GtkCellViewPrivate *priv = cellview->priv; GtkTreeIter iter; gboolean valid; if (!priv->model) return; valid = gtk_tree_model_iter_children (priv->model, &iter, parent); while (valid) { gint min, nat; gtk_cell_area_apply_attributes (priv->area, priv->model, &iter, FALSE, FALSE); if (orientation == GTK_ORIENTATION_HORIZONTAL) { if (for_size < 0) gtk_cell_area_get_preferred_width (priv->area, priv->context, GTK_WIDGET (cellview), &min, &nat); else gtk_cell_area_get_preferred_width_for_height (priv->area, priv->context, GTK_WIDGET (cellview), for_size, &min, &nat); } else { if (for_size < 0) gtk_cell_area_get_preferred_height (priv->area, priv->context, GTK_WIDGET (cellview), &min, &nat); else gtk_cell_area_get_preferred_height_for_width (priv->area, priv->context, GTK_WIDGET (cellview), for_size, &min, &nat); } *minimum_size = MAX (min, *minimum_size); *natural_size = MAX (nat, *natural_size); /* Recurse into children when they exist */ gtk_cell_view_request_model (cellview, &iter, orientation, for_size, minimum_size, natural_size); valid = gtk_tree_model_iter_next (priv->model, &iter); } }
static gchar * get_text_from_label_widget (GtkWidget *label) { if (GTK_IS_LABEL (label)) return g_strdup (gtk_label_get_text (GTK_LABEL (label))); else if (GTK_IS_CELL_VIEW (label)) { GList *cells, *l; GtkTreeModel *model; GtkTreeIter iter; GtkTreePath *path; GtkCellArea *area; gchar *text; model = gtk_cell_view_get_model (GTK_CELL_VIEW (label)); path = gtk_cell_view_get_displayed_row (GTK_CELL_VIEW (label)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free (path); area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (label)); gtk_cell_area_apply_attributes (area, model, &iter, FALSE, FALSE); cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (label)); text = NULL; for (l = cells; l; l = l->next) { GtkCellRenderer *cell = l->data; if (GTK_IS_CELL_RENDERER_TEXT (cell)) { g_object_get (cell, "text", &text, NULL); break; } } g_list_free (cells); return text; } return NULL; }