Re: Autoupdating EntryCompletion (was Selectively trapping keypresses)
- From: "muppet" <scott asofyet org>
- To: gtk-perl-list gnome org
- Subject: Re: Autoupdating EntryCompletion (was Selectively trapping keypresses)
- Date: Tue, 17 Apr 2007 09:59:41 -0400 (EDT)
Jeffrey Ratcliffe wrote:
On 16/04/07, muppet <scott asofyet org> wrote:
Everything's good right up until the end. ;-)
I've added a couple of callbacks to get new entries into the ListModel
to which the EntryCompletion is bound. Selecting entries several times
from the EntryCompletion is giving me:
Gtk-CRITICAL **: gtk_list_store_get_value: assertion `VALID_ITER
(iter, list_store)' failed at ./EntryCompletion3.pl line 105.
GLib-GObject-CRITICAL **: g_object_set_property: assertion `G_IS_VALUE
(value)' failed at ./EntryCompletion3.pl line 105.
I've attached the code.
I couldn't reproduce that after tinkering for just a few moments, but i think
i see it in the code...
What am I doing wrong?
Any change to a TreeModel invalidates existing TreeIters.
$cmp_model -> signal_connect('row-inserted' => sub {
my ($model, $path, $iter) = @_;
my ($val) = $cmp_model->get($iter, 0);
warn "inserted $val\n";
# Weed out duplicates
my $iter2 = $cmp_model->iter_next($iter);
while ($iter2) {
my ($val2) = $cmp_model->get($iter2, 0);
warn "list $val2\n";
if ($val eq $val2) {
warn "removing $val2\n";
$cmp_model->remove ($iter2);
warn "removed $val2\n";
}
else {
$iter = $iter2;
}
$iter2 = $cmp_model->iter_next($iter);
$iter has potential to be invalid here, as the model may have been changed by
the preceding statements.
}
});
Try using a TreePath to point to the current row while modifying the model, or
at the very least restarting the iteration after modifications.
--
muppet <scott at asofyet dot org>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]