We have a tree that can collapse!
This commit is contained in:
parent
5dffcee4a1
commit
b8802b2918
Binary file not shown.
17
main.c
17
main.c
|
@ -119,6 +119,15 @@ GListModel* create_model_func(GObject *item, gpointer user_data)
|
||||||
return get_children_model(cur);
|
return get_children_model(cur);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void on_expander_toggled(GtkExpander *expander, gpointer user_data) {
|
||||||
|
// This is a conceptual callback for when an expander is toggled
|
||||||
|
GtkTreeListRow *row = GTK_TREE_LIST_ROW(user_data);
|
||||||
|
gboolean is_expanded = gtk_tree_list_row_get_expanded(row);
|
||||||
|
gtk_tree_list_row_set_expanded(row, !is_expanded);
|
||||||
|
// Assuming you have a way to update your model's is_expanded property
|
||||||
|
// Update your model here based on the new state
|
||||||
|
}
|
||||||
|
|
||||||
void setup_factory (GtkListItemFactory *factory, GtkListItem *list_item, gpointer user_data)
|
void setup_factory (GtkListItemFactory *factory, GtkListItem *list_item, gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkWidget* expander = gtk_expander_new (NULL);
|
GtkWidget* expander = gtk_expander_new (NULL);
|
||||||
|
@ -139,7 +148,7 @@ void bind_factory (GtkListItemFactory *factory, GtkListItem *list_item, gpointer
|
||||||
gtk_expander_set_label(GTK_EXPANDER(expander), text);
|
gtk_expander_set_label(GTK_EXPANDER(expander), text);
|
||||||
|
|
||||||
|
|
||||||
gtk_tree_list_row_set_expanded(row, !is_expanded);
|
//gtk_tree_list_row_set_expanded(row, !is_expanded);
|
||||||
|
|
||||||
if (gtk_tree_list_row_get_children(row)) {
|
if (gtk_tree_list_row_get_children(row)) {
|
||||||
printf("[bind_factory] here is %s content (childs)\n", text);
|
printf("[bind_factory] here is %s content (childs)\n", text);
|
||||||
|
@ -147,6 +156,12 @@ void bind_factory (GtkListItemFactory *factory, GtkListItem *list_item, gpointer
|
||||||
printf("[bind_factory] here is %s content (no childs)\n", text);
|
printf("[bind_factory] here is %s content (no childs)\n", text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Disconnect previous signal handlers to avoid stacking them
|
||||||
|
g_signal_handlers_disconnect_by_func(expander, G_CALLBACK(on_expander_toggled), row);
|
||||||
|
|
||||||
|
// Connect the signal handler
|
||||||
|
g_signal_connect(expander, "activate", G_CALLBACK(on_expander_toggled), row);
|
||||||
|
|
||||||
gtk_widget_set_margin_start(expander, gtk_tree_list_row_get_depth(row)*20);
|
gtk_widget_set_margin_start(expander, gtk_tree_list_row_get_depth(row)*20);
|
||||||
|
|
||||||
//g_object_unref(row); // Decrease the reference count when done
|
//g_object_unref(row); // Decrease the reference count when done
|
||||||
|
|
Loading…
Reference in New Issue