--- rxvt-unicode/src/perl/urxvt-popup 2006/01/08 00:34:57 1.8 +++ rxvt-unicode/src/perl/urxvt-popup 2006/01/08 01:16:10 1.11 @@ -10,13 +10,13 @@ my $row = 1; for my $item (@{ $self->{data}{item} }) { - my $rend = "\x1b[30;47m"; + my $rend = "normal"; if ($row == $self->{hover}) { - $rend = $self->{press} ? "\x1b[m" : "\x1b[30;46m"; + $rend = $self->{press} ? "active" : "hover"; } - $cmd .= "$rend\x1b[K"; + $cmd .= "$item->{rend}{$rend}\x1b[K"; $cmd .= $self->locale_encode ($item->{render}->($item)); $cmd .= "\015\012"; @@ -29,7 +29,13 @@ sub on_motion_notify { my ($self, $event) = @_; - $self->{hover} = $event->{row} + 1; + delete $self->{hover}; + + my ($row, $col) = ($event->{row}, $event->{col}); + if ($col >= 0 && $col < $self->ncol + && $row >= 0 && $row < @{ $self->{data}{item} }) { + $self->{hover} = $event->{row} + 1; + } $self->refresh; 1 @@ -47,9 +53,6 @@ sub on_button_release { my ($self, $event) = @_; - my $row = $event->{row}; - my $col = $event->{col}; - if ($event->{button} == $self->{data}{event}{button}) { $self->ungrab; $self->destroy; @@ -57,6 +60,7 @@ $self->{press}[$event->{button}] = 0; + my ($row, $col) = ($event->{row}, $event->{col}); if ($col >= 0 && $col < $self->ncol && $row >= 0 && $row < @{ $self->{data}{item} }) { $self->{data}{item}[$row]{activate}->($event); @@ -107,15 +111,15 @@ sub on_start { my ($self) = @_; + $self->cmd_parse ("\x1b[?25l\x1b[?7l"); + $self->refresh; + # might fail, but try anyways $self->grab ($self->{data}{event}{time}, 1) and $self->allow_events_async; on_button_press $self, $self->{data}{event} if $self->{data}{event}{button}; - $self->cmd_parse ("\x1b[?25l\x1b[?7l"); - refresh $self; - () }