Thanks for the reply again. I've almost made it work. My problem now is that the y-coordinate returned gets interpreted by nearest() in a way that I don't expect: nearest() seems to expect a y-coordinate relative to the top of the listbox widget, but the y-coordinate given is actually the absolute, screen, coordinate.
Here's my code snippet:
$list->g_bind("<Motion>", [sub {
my($x,$y) = @_;
my @sel_list = $list->curselection();
my $on_target = 0;
my $current_index = $list->nearest($y);
print "y = " . $y . "current_index = " . $current_index . "\n"; #
+test
if (length($sel_list[0]) > 0) {
my @sel_list_items = split(/ /,$sel_list[0]);
if (scalar(@sel_list_items) > 1) {
foreach my $sel_list_item (@sel_list_items) {
print "sel_list_item = " . $sel_list_item . "\n"; # te
+st
if ($sel_list_item eq $current_index) {
$on_target = 1;
}
}
}
}
print "on_target = " . $on_target . "\n"; # test
if ($on_target == 1) {
$listmenu->g_tk___popup($x,$y)
}
}, Tkx::Ev("%X", "%Y")]);
I can see that the current_index is always larger than I would expect it to be. Apologies if I am missing something simple!
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|