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 <[email protected]>
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

_______________________________________________
gtk-devel-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-devel-list

Reply via email to