02.04.2014, 19:29, "aullidolu...@gmail.com" <aullidolu...@gmail.com>: > my problem is if the current cell is "1", when hit up key doesn't go to "5" > as expected, it goes to "4"....any ideas, please?
Hi! I guess, you need to preserve your handler window1_key_press_event_cb from propagating the signal, when the focus is at the top or at the bottom of your treeview. Otherwise, set_cursor is called twice. Note, that returning TRUE stops a signal: sub window1_key_press_event_cb { my ($widget, $event, $data) = @_; my $tv = $data->{'treeview'}; if ($event->keyval == $Gtk2::Gdk::Keysyms{Up}) { return moveUP($tv); } elsif ($event->keyval == $Gtk2::Gdk::Keysyms{Down}) { return moveDown($tv); } } You also need to fix moveUP and moveDown subroutines to return TRUE or FALSE: sub moveUP { my $treeview = shift; my ($path, $focus_column) = $treeview->get_cursor; my $modelSort = $treeview->get_model(); if (!$path->prev) { $path = undef; my $totalItems = $modelSort->iter_n_children(); my $iter = $modelSort->iter_nth_child(undef, $totalItems-1); $path = $modelSort->get_path($iter); $treeview->set_cursor($path, $focus_column); return TRUE; } $path = undef; return FALSE; } sub moveDown { my $treeview = shift; my ($path, $focus_column) = $treeview->get_cursor; my $modelSort = $treeview->get_model(); my $iter = $modelSort->get_iter($path); if (!defined $modelSort->iter_next($iter)) { $path = undef; $path = Gtk2::TreePath->new_first(); $treeview->set_cursor($path, $focus_column); return TRUE; } $path = undef; return FALSE; } Try once again with these fixes. _______________________________________________ gtk-perl-list mailing list gtk-perl-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-perl-list