@ -1390,11 +1390,13 @@ static bool HandleViewportScroll()
WindowEvent e ;
WindowEvent e ;
Window * w ;
Window * w ;
bool scrollwheel_scrolling = _patches . scrollwheel_scrolling = = 1 & & ( _cursor . v_wheel ! = 0 | | _cursor . h_wheel ! = 0 ) ;
if ( ! _scrolling_viewport ) return true ;
if ( ! _scrolling_viewport ) return true ;
w = FindWindowFromPt ( _cursor . pos . x , _cursor . pos . y ) ;
w = FindWindowFromPt ( _cursor . pos . x , _cursor . pos . y ) ;
if ( ! _right_button_down | | w = = NULL ) {
if ( ! ( _right_button_down | | scrollwheel_scrolling ) | | w = = NULL ) {
_cursor . fix_at = false ;
_cursor . fix_at = false ;
_scrolling_viewport = false ;
_scrolling_viewport = false ;
return true ;
return true ;
@ -1408,6 +1410,14 @@ static bool HandleViewportScroll()
e . we . scroll . delta . y = _cursor . delta . y ;
e . we . scroll . delta . y = _cursor . delta . y ;
}
}
if ( scrollwheel_scrolling ) {
/* We are using scrollwheels for scrolling */
e . we . scroll . delta . x = _cursor . h_wheel ;
e . we . scroll . delta . y = _cursor . v_wheel ;
_cursor . v_wheel = 0 ;
_cursor . h_wheel = 0 ;
}
/* Create a scroll-event and send it to the window */
/* Create a scroll-event and send it to the window */
e . event = WE_SCROLL ;
e . event = WE_SCROLL ;
w - > wndproc ( w , & e ) ;
w - > wndproc ( w , & e ) ;
@ -1628,6 +1638,7 @@ void MouseLoop(int click, int mousewheel)
int x , y ;
int x , y ;
Window * w ;
Window * w ;
ViewPort * vp ;
ViewPort * vp ;
bool scrollwheel_scrolling = _patches . scrollwheel_scrolling = = 1 & & ( _cursor . v_wheel ! = 0 | | _cursor . h_wheel ! = 0 ) ;
DecreaseWindowCounters ( ) ;
DecreaseWindowCounters ( ) ;
HandlePlacePresize ( ) ;
HandlePlacePresize ( ) ;
@ -1643,7 +1654,7 @@ void MouseLoop(int click, int mousewheel)
x = _cursor . pos . x ;
x = _cursor . pos . x ;
y = _cursor . pos . y ;
y = _cursor . pos . y ;
if ( click = = 0 & & mousewheel = = 0 ) return ;
if ( click = = 0 & & mousewheel = = 0 & & ! scrollwheel_scrolling ) return ;
w = FindWindowFromPt ( x , y ) ;
w = FindWindowFromPt ( x , y ) ;
if ( w = = NULL ) return ;
if ( w = = NULL ) return ;
@ -1659,13 +1670,14 @@ void MouseLoop(int click, int mousewheel)
/* Send WE_MOUSEWHEEL event to window */
/* Send WE_MOUSEWHEEL event to window */
e . event = WE_MOUSEWHEEL ;
e . event = WE_MOUSEWHEEL ;
e . we . wheel . wheel = mousewheel ;
e . we . wheel . wheel = mousewheel ;
w - > wndproc ( w , & e ) ;
if ( ! scrollwheel_scrolling ) w - > wndproc ( w , & e ) ;
/* Dispatch a MouseWheelEvent for widgets if it is not a viewport */
/* Dispatch a MouseWheelEvent for widgets if it is not a viewport */
if ( vp = = NULL ) DispatchMouseWheelEvent ( w , GetWidgetFromPos ( w , x - w - > left , y - w - > top ) , mousewheel ) ;
if ( vp = = NULL ) DispatchMouseWheelEvent ( w , GetWidgetFromPos ( w , x - w - > left , y - w - > top ) , mousewheel ) ;
}
}
if ( vp ! = NULL ) {
if ( vp ! = NULL ) {
if ( scrollwheel_scrolling ) click = 2 ; // we are using the scrollwheel in a viewport, so we emulate right mouse button
switch ( click ) {
switch ( click ) {
case 1 :
case 1 :
DEBUG ( misc , 2 , " Cursor: 0x%X (%d) " , _cursor . sprite , _cursor . sprite ) ;
DEBUG ( misc , 2 , " Cursor: 0x%X (%d) " , _cursor . sprite , _cursor . sprite ) ;