#include <gtk/gtk.h>

static GtkWidget *list;
static GtkWidget *scrolled_win;

static char *list_items[] =
{
  "X",
  "Y",
  "Z",
  NULL
};


static void on_click (GtkButton *button,
		      gpointer user_data)
{
  GList *items = gtk_container_children(GTK_CONTAINER(list));
  GtkWidget *item;

  if (items)
    {
      item = GTK_WIDGET(items->data);
      gtk_container_remove(GTK_CONTAINER(list), item);
    }
}


static void list_select(GtkList *list,
			GtkWidget *list_item,
			gpointer user_data)
{
  printf("list_select list @%08X list_item @%08X\n", list, list_item);
}

static void list_setup()
{
  GtkWidget *list_item;
  GList *items;
  int i;

  scrolled_win = gtk_scrolled_window_new (NULL, NULL);
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
				  GTK_POLICY_AUTOMATIC,
				  GTK_POLICY_AUTOMATIC);    
  list = gtk_list_new();
  gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_BROWSE);
  gtk_signal_connect(GTK_OBJECT(list), 
		     "select-child",
		     GTK_SIGNAL_FUNC(list_select), 
		     list);
  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW (scrolled_win), 
					list);
  gtk_container_set_focus_vadjustment(GTK_CONTAINER (list),
				      gtk_scrolled_window_get_vadjustment
				      (GTK_SCROLLED_WINDOW (scrolled_win)));
  gtk_container_set_focus_hadjustment (GTK_CONTAINER (list),
				       gtk_scrolled_window_get_hadjustment
				       (GTK_SCROLLED_WINDOW (scrolled_win)));
  gtk_widget_show(scrolled_win);
  gtk_widget_show(list);

  items = NULL;
  for (i=0; list_items[i] != NULL; i++)
    {
      list_item = gtk_list_item_new_with_label(list_items[i]);
      gtk_widget_show(list_item);  
      /*  gtk_container_add(GTK_CONTAINER(list), list_item); */
      items = g_list_append(items, list_item);
    }

  gtk_list_prepend_items(GTK_LIST(list), items);
  gtk_list_select_child(GTK_LIST(list), GTK_WIDGET(items->data));
}

static gint delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
{
  gtk_main_quit();
  return FALSE;
}

int main(int argc, char *argv[])
{
  GtkWidget *w;
  GtkWidget *table;
  GtkWidget *button;

  gtk_init (&argc, &argv); 
  
  w = gtk_window_new(GTK_WINDOW_TOPLEVEL);

  gtk_window_set_title(GTK_WINDOW(w), "otest");
  gtk_window_set_policy(GTK_WINDOW(w), TRUE, TRUE, TRUE);
  gtk_window_set_wmclass(GTK_WINDOW(w), "otest", "otest");

  gtk_signal_connect (GTK_OBJECT (w), "delete_event",
		      GTK_SIGNAL_FUNC (delete_event),
		      NULL);

  table = gtk_table_new(5,2,TRUE);

  button = gtk_button_new_with_label("Click me");
  gtk_signal_connect (GTK_OBJECT (button), "clicked",
		      GTK_SIGNAL_FUNC (on_click),
		      NULL);

  gtk_table_attach_defaults(GTK_TABLE(table), 
			    button, 0,1, 1,2);

  list_setup();
  gtk_table_attach_defaults(GTK_TABLE(table), 
			    scrolled_win, 1,2, 1,4);

  gtk_container_add(GTK_CONTAINER(w),table);
  gtk_widget_show_all(w);
  gtk_main();
  return 0;
}
