--- rxvt-unicode/src/perl/urxvt-popup 2006/01/07 21:43:17 1.5 +++ rxvt-unicode/src/perl/urxvt-popup 2006/01/08 00:48:14 1.10 @@ -3,8 +3,6 @@ # this extension implements popup-menu functionality for urxvt. it works # together with the urxvt::popup class. -use List::Util; - sub refresh { my ($self) = @_; @@ -31,8 +29,14 @@ sub on_motion_notify { my ($self, $event) = @_; - $self->{hover} = $event->{row} + 1; - refresh $self; + 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 } @@ -41,7 +45,7 @@ my ($self, $event) = @_; $self->{press}[$event->{button}] = 1; - refresh $self; + $self->refresh; 1 } @@ -49,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; @@ -59,18 +60,14 @@ $self->{press}[$event->{button}] = 0; - if ($event->{button} == 1) { - refresh $self; - - warn "$event->{row} $event->{col}\n";#d# - - if ($col >= 0 && $col < $self->ncol - && $row >= 0 && $row < @{ $self->{data}{item} }) { - $self->{data}{item}[$row]{activate}->($event); - print "ok\n"; - } + 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); } + $self->refresh; + 1 } @@ -78,7 +75,7 @@ my ($self) = @_; delete $self->{hover}; - refresh $self; + $self->refresh; () } @@ -114,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; - () }