ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/perl/urxvt-popup
(Generate patch)

Comparing rxvt-unicode/src/perl/urxvt-popup (file contents):
Revision 1.1 by root, Sat Jan 7 20:23:53 2006 UTC vs.
Revision 1.10 by root, Sun Jan 8 00:48:14 2006 UTC

1#! perl 1#! perl
2 2
3use List::Util; 3# this extension implements popup-menu functionality for urxvt. it works
4# together with the urxvt::popup class.
4 5
5sub refresh { 6sub refresh {
6 my ($self) = @_; 7 my ($self) = @_;
7 8
8 my $cmd = "\x1b[H"; 9 my $cmd = "\x1b[H";
13 14
14 if ($row == $self->{hover}) { 15 if ($row == $self->{hover}) {
15 $rend = $self->{press} ? "\x1b[m" : "\x1b[30;46m"; 16 $rend = $self->{press} ? "\x1b[m" : "\x1b[30;46m";
16 } 17 }
17 18
18 $cmd .= "$rend\x1b[K" . $self->locale_encode ($item->{text}) . "\015\012"; 19 $cmd .= "$rend\x1b[K";
20 $cmd .= $self->locale_encode ($item->{render}->($item));
21 $cmd .= "\015\012";
19 22
20 $row++; 23 $row++;
21 } 24 }
22 25
23 $self->cmd_parse (substr $cmd, 0, -2); 26 $self->cmd_parse (substr $cmd, 0, -2);
24} 27}
25 28
26sub on_motion_notify { 29sub on_motion_notify {
27 my ($self, $event) = @_; 30 my ($self, $event) = @_;
28 31
32 delete $self->{hover};
33
34 my ($row, $col) = ($event->{row}, $event->{col});
35 if ($col >= 0 && $col < $self->ncol
36 && $row >= 0 && $row < @{ $self->{data}{item} }) {
29 $self->{hover} = $event->{row} + 1; 37 $self->{hover} = $event->{row} + 1;
30 refresh $self; 38 }
39 $self->refresh;
31 40
32 1 41 1
33} 42}
34 43
35sub on_button_press { 44sub on_button_press {
36 my ($self, $event) = @_; 45 my ($self, $event) = @_;
37 46
38 $self->{press}[$event->{button}] = 1; 47 $self->{press}[$event->{button}] = 1;
39 refresh $self; 48 $self->refresh;
40 49
41 1 50 1
42} 51}
43 52
44sub on_button_release { 53sub on_button_release {
45 my ($self, $event) = @_; 54 my ($self, $event) = @_;
46 55
47 my $row = $event->{row};
48 my $col = $event->{col};
49
50 if ($event->{button} == $self->{data}{event}{button}) { 56 if ($event->{button} == $self->{data}{event}{button}) {
51 $self->ungrab; 57 $self->ungrab;
52 $self->destroy; 58 $self->destroy;
53 } 59 }
54 60
55 if ($event->{button} == 1) {
56 $self->{press}[$event->{button}] = 0; 61 $self->{press}[$event->{button}] = 0;
57 refresh $self;
58 62
59 warn "$event->{row} $event->{col}\n";#d# 63 my ($row, $col) = ($event->{row}, $event->{col});
64 if ($col >= 0 && $col < $self->ncol
65 && $row >= 0 && $row < @{ $self->{data}{item} }) {
66 $self->{data}{item}[$row]{activate}->($event);
67 }
60 68
61 if ($col >= 0 && $col < $self->ncol 69 $self->refresh;
62 && $row >= 0 && $row < @{ $self->{data}{item} }) {
63 $self->{data}{item}[$row]{activate}->($event);
64 print "ok\n";
65 }
66 }
67 70
68 1 71 1
69} 72}
70 73
71sub on_focus_out { 74sub on_focus_out {
72 my ($self) = @_; 75 my ($self) = @_;
73 76
74 delete $self->{hover}; 77 delete $self->{hover};
75 refresh $self; 78 $self->refresh;
76 79
77 () 80 ()
78} 81}
79 82
80sub on_init { 83sub on_init {
106} 109}
107 110
108sub on_start { 111sub on_start {
109 my ($self) = @_; 112 my ($self) = @_;
110 113
114 $self->cmd_parse ("\x1b[?25l\x1b[?7l");
115 $self->refresh;
116
111 # might fail, but try anyways 117 # might fail, but try anyways
112 $self->grab ($self->{data}{event}{time}, 1) 118 $self->grab ($self->{data}{event}{time}, 1)
113 and $self->allow_events_sync; 119 and $self->allow_events_async;
114 120
115 on_button_press $self, $self->{data}{event} if $self->{data}{event}{button}; 121 on_button_press $self, $self->{data}{event} if $self->{data}{event}{button};
116
117 $self->cmd_parse ("\x1b[?25l\x1b[?7l");
118 refresh $self;
119 122
120 () 123 ()
121} 124}
122 125
123sub on_map_notify { 126sub on_map_notify {
124 my ($self, $event) = @_; 127 my ($self, $event) = @_;
125 128
126 # should definitely not fail 129 # should definitely not fail
127 $self->grab ($self->{data}{event}{time}, 1) 130 $self->grab ($self->{data}{event}{time}, 1)
128 and $self->allow_events_sync; 131 and $self->allow_events_async;
129}
130
131sub on_destroy {
132} 132}
133 133
134 134
135 135
136 136
137 137
138

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines