Hi, I’ve just run into a change in behavior between GTK+ 2 and GTK+ 3 that confuses me quite a bit; as I’m not sure whether the change is intentional or the result of a bug, I’m asking here on the list. The attached program clearly shows how CellRendererText behaves differently in GTK+ 3 than it did in GTK+ 2: when using the latter, the "edited" signal is emitted whenever the user moves the focus from one cell to another, giving the program a chance to save the contents of the cell; when using the former, the signal is not emitted, so the cell behaves as if editing had been canceled, minus the emission of the "editing-canceled" signal. The new behavior feels completely unnatural to me, and I’m convinced many people will lose the changes they’ve just made to a cell because of it. Is this intended? Is there some other signal I can connect to in order to save changes made to a cell when the focus moves to another one? -- Andrea Bolognani <eof kiyuko org> Resistance is futile, you will be garbage collected.
/* Compile with:
*
* valac --pkg gtk+-2.0 treeviewtest.vala
*
* or
*
* valac --pkg gtk+-3.0 treeviewtest.vala
*/
private static const int COL_WHATEVER = 0;
private static const int COL_LAST = 1;
public static int main (string[] args) {
Gtk.Window window;
Gtk.ListStore store;
Gtk.TreeIter iter;
Gtk.TreeView treeview;
Gtk.TreeViewColumn column;
Gtk.CellRendererText renderer;
Gtk.init (ref args);
store = new Gtk.ListStore (COL_LAST,
typeof (string));
store.append (out iter);
store.set (iter,
COL_WHATEVER, "");
store.append (out iter);
store.set (iter,
COL_WHATEVER, "");
window = new Gtk.Window (Gtk.WindowType.TOPLEVEL);
window.delete_event.connect ((ev) => {
Gtk.main_quit ();
return true;
});
treeview = new Gtk.TreeView ();
renderer = new Gtk.CellRendererText ();
renderer.set ("editable", true);
renderer.edited.connect ((row, val) => {
Gtk.TreePath path;
path = new Gtk.TreePath.from_string (row);
store.get_iter (out iter,
path);
store.set (iter,
COL_WHATEVER, val);
});
column = new Gtk.TreeViewColumn.with_attributes ("Whatever",
renderer,
"text", COL_WHATEVER);
treeview.append_column (column);
treeview.model = store;
window.add (treeview);
window.show_all ();
Gtk.main ();
return 0;
}
Attachment:
signature.asc
Description: Digital signature