--- deliantra/Deliantra-Client/DC.pm 2006/05/25 16:24:43 1.62 +++ deliantra/Deliantra-Client/DC.pm 2006/05/25 16:35:42 1.63 @@ -258,6 +258,44 @@ sub update_widgets { my ($self) = @_; + my $button_cb = sub { + my (undef, $ev, $x, $y) = @_; + + if (($ev->{mod} & CFClient::KMOD_SHIFT) && $ev->{button} == 1) { + my $targ = $::CONN->{player}{tag}; + + if ($self->{container} == $::CONN->{player}{tag}) { + $targ = $main::OPENCONT; + } + + $::CONN->send ("move $targ $self->{tag} 0"); + } elsif ($ev->{button} == 1) { + $::CONN->send ("examine $self->{tag}"); + } elsif ($ev->{button} == 2) { + $::CONN->send ("apply $self->{tag}"); + } elsif ($ev->{button} == 3) { + my @menu_items = ( + ["examine", sub { $::CONN->send ("examine $self->{tag}") }], + ["mark", sub { $::CONN->send ("mark ". pack "N", $self->{tag}) }], + ["apply", sub { $::CONN->send ("apply $self->{tag}") }], + ( + $self->{flags} & Crossfire::Protocol::F_LOCKED + ? ( + ["unlock", sub { $::CONN->send ("lock " . pack "CN", 0, $self->{tag}) }], + ) + : ( + ["lock", sub { $::CONN->send ("lock " . pack "CN", 1, $self->{tag}) }], + ["drop", sub { $::CONN->send ("move $main::OPENCONT $self->{tag} 0") }], + ) + ), + ); + + CFClient::UI::Menu->new (items => \@menu_items)->popup ($ev); + } + + 1 + }; + my $tooltip_std = "" . "Left click - examine item\n" . "Shift-Left click - " . ($self->{container} ? "move or drop" : "take") . " item\n" @@ -265,7 +303,11 @@ . "Right click - further options" . "\n"; - $self->{face_widget} ||= new CFClient::UI::Face can_events => 1, can_hover => 1; + $self->{face_widget} ||= new CFClient::UI::Face + can_events => 1, + can_hover => 1, + connect_button_down => $button_cb, + ; $self->{face_widget}{face} = $self->{face}; $self->{face_widget}{anim} = $self->{anim}; $self->{face_widget}{animspeed} = $self->{animespeed}; @@ -276,10 +318,24 @@ . "\n\n$tooltip_std" ); - $self->{desc_widget} ||= new CFClient::UI::Label ellipsise => 2, can_events => 1, can_hover => 1; - $self->{desc_widget}->set_text (CFClient::Item::desc_string $self); + $self->{desc_widget} ||= new CFClient::UI::Label + can_events => 1, + can_hover => 1, + ellipsise => 2, + xalign => 0, + connect_button_down => $button_cb, + ; + my $desc = CFClient::Item::desc_string $self; + $self->{desc_widget}->set_text ($desc); + $self->{desc_widget}->set_tooltip ("$desc.\n$tooltip_std"); - $self->{weight_widget} ||= new CFClient::UI::Label ellipsise => 0, can_events => 1, can_hover => 1, align => 0.5; + $self->{weight_widget} ||= new CFClient::UI::Label + can_events => 1, + can_hover => 1, + ellipsise => 0, + xalign => 0.5, + connect_button_down => $button_cb, + ; $self->{weight_widget}->set_text (CFClient::Item::weight_string $self); $self->{weight_widget}->set_tooltip (