in reply to Detect perl/Tk Button double-clicks vs. single-clicks
++ Works great, I could have used this on some past projects. It's surprising the doubleclick bug has never been fixed. Here's my rough cut at a module version of your code, called in more of a Perl Tk style.
package Tk::Doubleclick; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(bindClicks); sub bindClicks { my %arg = @_; my $btn = delete $arg{-widget}; my $delay = delete $arg{-delay} || 300; my $args1 = delete $arg{-single}; my $args2 = delete $arg{-double}; my $clicked = delete $arg{-button} || 'left'; my %btnTable = ( left => 1, center => 2, right => 3 ); my $mousenum = $btnTable{$clicked} || $clicked; $mousenum = 1 unless ($mousenum =~ /^[123]$/); my $single = $args1; if (ref $args1 eq 'ARRAY'){ $single = shift @$args1; }else{ $args1 = []; } my $double = $args2; if (ref $args2 eq 'ARRAY'){ $double = shift @$args2; }else{ $args2 = []; } my $nclicks = 0; my $c_cmd = sub { ++$nclicks; $btn->after($delay => sub { my $count = $nclicks; $nclicks = 0; if ($count > 1) { $double->(@$args2); } elsif ($count == 1) { $single->(@$args1); } }); }; my $button_name = "<Button-$mousenum>"; $btn->bind($button_name => $c_cmd); } 1; =head1 NAME Tk::Doubleclick - Correct handling of single vs double click callback +bindings =head1 SYNOPSIS use Tk::Doubleclick; bindClicks( -delay => 500, -widget => $button_widget, -button => 'left', -single => [ \&callback, @args ], # with arguments -double => \&callback, # without arguments ); =head1 OPTIONS =over 5 =item -delay Maximum delay time detween clicks in milliseconds. Default = 300. =item -widget Widget to bind to mousebuttons. =item -button Mouse button to bind. Options are left, center, right, 1, 2, 3. Defaul +t = left. =item -single Single click callback. To include arguments, use array reference. =item -double Double click callback. To include arguments, use array reference. =back =cut
Update: fixed typo
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Detect perl/Tk Button double-clicks vs. single-clicks
by wol (Hermit) on Jul 28, 2009 at 11:52 UTC | |
|
Re^2: Detect perl/Tk Button double-clicks vs. single-clicks
by Anonymous Monk on Jul 26, 2009 at 01:41 UTC | |
by hangon (Deacon) on Jul 26, 2009 at 13:55 UTC | |
by Anonymous Monk on Jul 26, 2009 at 17:35 UTC |