--- deliantra/Deliantra-Client/DC/UI.pm 2007/07/20 16:32:17 1.385 +++ deliantra/Deliantra-Client/DC/UI.pm 2007/07/20 18:30:03 1.388 @@ -115,8 +115,12 @@ if ($GRAB) { if ($ev->{button} == 4 || $ev->{button} == 5) { # mousewheel - $ev->{dx} = 0; - $ev->{dy} = $ev->{button} * 2 - 9; + my $delta = $ev->{button} * 2 - 9; + my $shift = $ev->{mod} & CFPlus::KMOD_SHIFT; + + $ev->{dx} = $shift ? $delta : 0; + $ev->{dy} = $shift ? 0 : $delta; + $GRAB->emit (mouse_wheel => $ev); } else { $GRAB->emit (button_down => $ev) @@ -549,17 +553,8 @@ $self->{parent} && $self->{parent}->emit ($signal, @args) } -sub find_widget { - my ($self, $x, $y) = @_; - - return () unless $self->{can_events}; - - return $self - if $x >= $self->{x} && $x < $self->{x} + $self->{w} - && $y >= $self->{y} && $y < $self->{y} + $self->{h}; - - () -} +#sub find_widget { +# in .xs sub set_parent { my ($self, $parent) = @_; @@ -1022,7 +1017,7 @@ if ( $x >= $self->{x} && $x < $self->{x} + $self->{w} && $y >= $self->{y} && $y < $self->{y} + $self->{h} ) { - $self->child->find_widget ($x + $self->{view_x}, $y + $self->{view_y}) + $self->child->find_widget ($x + $self->{view_x}, $y + $self->{view_y}) } else { $self->CFPlus::UI::Base::find_widget ($x, $y) } @@ -1137,16 +1132,18 @@ sub update { my ($self) = @_; - $self->SUPER::update; $self->update_slider; + $self->SUPER::update; } sub invoke_mouse_wheel { my ($self, $ev) = @_; - return 0 unless $ev->{dy}; # only vertical movements for now + $self->{vslider}->emit (mouse_wheel => $ev) + if $ev->{dy}; - $self->{vslider}->emit (mouse_wheel => $ev); + $self->{hslider}->emit (mouse_wheel => $ev) + if $ev->{dx}; 1 }