in reply to Re: Gtk2 CellRendererText: how to save the edited value in the cell?
in thread Gtk2 CellRendererText: how to save the edited value in the cell?
Ehh, not perfect. If the user clicks out of the cell but in the listview, the edited signal will fire twice (once normally, once thanks to the hackery above).
Modified version:
package Gtk2::CellRendererTextThatIsNotCompletelyUseless; use Glib::Object::Subclass "Gtk2::CellRendererText"; sub START_EDITING { my ($self, $event, $view, $pathstr, $back_rect, $cell_rect, $flags +) = @_; my $entry = shift->SUPER::START_EDITING(@_); $self->signal_handler_disconnect($self->{bad_hack}) if exists $sel +f->{bad_hack}; $self->{bad_hack} = $self->signal_connect( 'editing-canceled' => sub { my ( $event_box, $event ) = @_; $self->signal_emit( edited => $pathstr, $entry->get_text() +); return 0; } ); return $entry; }
The appropriately named bad_hack abuse is needed to avoid connecting the signal handler again and again - but we can't just install it once and leave it be, because the anonymous sub closes over $entry, which refers to the Gtk2::Entry that is destroyed and recreated every time the user starts editing, so the need a new handler with a new closure of the newly created $entry every time.
I feel a slight sting that there is a better way to do this, I just don't see it.
|
|---|