Index: work/gtk/gtk_conf_list.c =================================================================== --- work/gtk/gtk_conf_list.c (revision 1995) +++ work/gtk/gtk_conf_list.c (revision 1996) @@ -126,11 +126,28 @@ GtkTreeIter iter; int idx = get_sel(cl, &iter); + cl->editing = 0; + printf("edit %d to %s!\n", idx, new_text); gtk_list_store_set(cl->l, &iter, cl->col_data, new_text, -1); #warning TODO: replace list item idx } +static void cell_edit_started_cb(GtkCellRendererText *cell, GtkCellEditable *e,gchar *path, gtk_conf_list_t *cl) +{ + cl->editing = 1; +} + +static void cell_edit_canceled_cb(GtkCellRendererText *cell, gtk_conf_list_t *cl) +{ + cl->editing = 0; +} + +gboolean key_release_cb(GtkWidget *widget, GdkEvent *event, gtk_conf_list_t *cl) +{ + printf("REL! %d\n", cl->editing); +} + GtkWidget *gtk_conf_list_widget(gtk_conf_list_t *cl) { GtkWidget *vbox, *hbox, *bins, *bdel, *bsel, *vfill; @@ -138,6 +155,8 @@ int n; GType *ty; + cl->editing = 0; + vbox = gtk_vbox_new(FALSE, 0); cl->t = gtk_tree_view_new(); @@ -166,6 +185,8 @@ if (n == cl->col_data) { g_object_set(renderer, "editable", TRUE, NULL); g_signal_connect(renderer, "edited", G_CALLBACK(cell_edited_cb), cl); + g_signal_connect(renderer, "editing-started", G_CALLBACK(cell_edit_started_cb), cl); + g_signal_connect(renderer, "editing-canceled", G_CALLBACK(cell_edit_canceled_cb), cl); } } @@ -173,6 +194,7 @@ g_signal_connect(G_OBJECT(cl->l), "row_deleted", G_CALLBACK(row_delete_cb), cl); g_signal_connect(G_OBJECT(cl->l), "row_inserted", G_CALLBACK(row_insert_cb), cl); + g_signal_connect(G_OBJECT(cl->t), "key-release-event", G_CALLBACK(key_release_cb), cl); gtk_tree_view_set_model(GTK_TREE_VIEW(cl->t), GTK_TREE_MODEL(cl->l)); Index: work/gtk/gtk_conf_list.h =================================================================== --- work/gtk/gtk_conf_list.h (revision 1995) +++ work/gtk/gtk_conf_list.h (revision 1996) @@ -18,6 +18,7 @@ /* -- internal -- */ GtkListStore *l; GtkWidget *t; + int editing; } gtk_conf_list_t; GtkWidget *gtk_conf_list_widget(gtk_conf_list_t *cl);