--- deliantra/Deliantra-Client/DC/MapWidget.pm 2006/06/08 01:51:32 1.51 +++ deliantra/Deliantra-Client/DC/MapWidget.pm 2006/06/11 17:30:53 1.53 @@ -72,7 +72,8 @@ my $fx = int +($ev->{x} - $::CFG->{map_shift_x}) / (32 * $::CFG->{map_scale}) - 0.5 * $sw + 0.99; my $fy = int +($ev->{y} - $::CFG->{map_shift_y}) / (32 * $::CFG->{map_scale}) - 0.5 * $sh + 0.99; - $::CONN->send (sprintf "lookat %d %d", $fx, $fy); + $::CONN->send (sprintf "lookat %d %d", $fx, $fy) + if $::CONN; } elsif ($ev->{button} == 2) { my ($ox, $oy) = ($ev->{x}, $ev->{y}); @@ -465,18 +466,41 @@ if (exists $self->{select}) { $self->{last_command} = $self->{select}; $::CONN->user_send ($self->{select}); + + unshift @{$self->{history}}, $self->{select}; + $self->{hist_ptr} = 0; + $self->hide; } } elsif ($ev->{sym} == 27) { + $self->{hist_ptr} = 0; $self->hide; return; } elsif ($ev->{sym} == CFClient::SDLK_DOWN) { - ++$self->{select_offset} - if $self->{select_offset} < $#{ $self->{last_match} || [] }; + if ($self->{hist_ptr} > 1) { + $self->{hist_ptr}--; + $self->{entry}->set_text ($self->{history}->[$self->{hist_ptr} - 1]); + } elsif ($self->{hist_ptr} > 0) { + $self->{hist_ptr}--; + $self->{entry}->set_text ($self->{hist_saveback}); + } else { + ++$self->{select_offset} + if $self->{select_offset} < $#{ $self->{last_match} || [] }; + } $self->update_labels; } elsif ($ev->{sym} == CFClient::SDLK_UP) { - --$self->{select_offset} - if $self->{select_offset}; + if ($self->{select_offset}) { + --$self->{select_offset} + } else { + unless ($self->{hist_ptr}) { + $self->{hist_saveback} = $self->{entry}->get_text; + } + if ($self->{hist_ptr} <= $#{$self->{history}}) { + $self->{hist_ptr}++; + } + $self->{entry}->set_text ($self->{history}->[$self->{hist_ptr} - 1]) + if exists $self->{history}->[$self->{hist_ptr} - 1]; + } $self->update_labels; } else { return 0;