Get the selection something like this:
GList *sel;
sel = GTK_LIST(list)->selection; |
This is how GList is defined (quoting glist.h):
typedef struct _GList GList;
struct _GList
{
gpointer data;
GList *next;
GList *prev;
}; |
A GList structure is just a simple structure for doubly
linked lists. There exist several g_list_*() functions to
modify a linked list in glib.h. However the
GTK_LIST(MyGtkList)->selection is maintained by the
gtk_list_*() functions and should not be modified.
The selection_mode of the GtkList determines the
selection facilities of a GtkList and therefore the contents
of GTK_LIST(AnyGtkList)->selection:
The data field of the GList structure
GTK_LIST(MyGtkList)->selection points to the first
GtkListItem that is selected. So if you would like to
determine which listitems are selected you should go like
this:
{
gchar *list_items[]={
"Item0",
"Item1",
"foo",
"last Item",
};
guint nlist_items=sizeof(list_items)/sizeof(list_items[0]);
GtkWidget *list_item;
guint i;
list=gtk_list_new();
gtk_list_set_selection_mode(GTK_LIST(list), GTK_SELECTION_MULTIPLE);
gtk_container_add(GTK_CONTAINER(AnyGtkContainer), list);
gtk_widget_show (list);
for (i = 0; i < nlist_items; i++)
{
list_item=gtk_list_item_new_with_label(list_items[i]);
gtk_object_set_user_data(GTK_OBJECT(list_item), (gpointer)i);
gtk_container_add(GTK_CONTAINER(list), list_item);
gtk_widget_show(list_item);
}
} |
To get known about the selection:
{
GList *items;
items=GTK_LIST(list)->selection;
printf("Selected Items: ");
while (items) {
if (GTK_IS_LIST_ITEM(items->data))
printf("%d ", (guint)
gtk_object_get_user_data(items->data));
items=items->next;
}
printf("\n");
} |