diff --git a/WINGs/ChangeLog b/WINGs/ChangeLog index ced38e61..1a9793d2 100644 --- a/WINGs/ChangeLog +++ b/WINGs/ChangeLog @@ -51,6 +51,7 @@ Changes since wmaker 0.64.0: - fixed a bug that made the scroller knob jump backwards when dragged (this bug had no relation with the behavior that #define STRICT_NEXT_BEHAVIOUR attempts to accomplish). +- fixed scrolling direction with mouse wheel for horizontal scroller. changes since wmaker 0.63.1: @@ -65,7 +66,7 @@ changes since wmaker 0.63.1: - Fixed a bug that caused sigsegv for a WMList with more than 32767 items. - Added an example of how to create a server type program with WMConnection. - added WMOpenScreen() - + changes since wmaker 0.62.1: ............................ diff --git a/WINGs/wscroller.c b/WINGs/wscroller.c index afe893c2..4ddbd38e 100644 --- a/WINGs/wscroller.c +++ b/WINGs/wscroller.c @@ -798,22 +798,22 @@ static void handleActionEvents(XEvent *event, void *data) { Scroller *sPtr = (Scroller*)data; + int wheelDecrement, wheelIncrement; int id, dd; - + /* check if we're really dealing with a scroller, as something * might have gone wrong in the event dispatching stuff */ CHECK_CLASS(sPtr, WC_Scroller); - + id = sPtr->flags.incrDown; dd = sPtr->flags.decrDown; - + switch (event->type) { - case EnterNotify: - - break; - - case LeaveNotify: + case EnterNotify: + break; + + case LeaveNotify: if (sPtr->timerID) { WMDeleteTimerHandler(sPtr->timerID); sPtr->timerID = NULL; @@ -821,12 +821,21 @@ handleActionEvents(XEvent *event, void *data) sPtr->flags.incrDown = 0; sPtr->flags.decrDown = 0; break; - - case ButtonPress: + + case ButtonPress: /* FIXME: change Mod1Mask with something else */ if (sPtr->flags.documentFullyVisible) break; - if (event->xbutton.button==WINGsConfiguration.mouseWheelUp) { + + if (sPtr->flags.horizontal) { + wheelDecrement = WINGsConfiguration.mouseWheelDown; + wheelIncrement = WINGsConfiguration.mouseWheelUp; + } else { + wheelDecrement = WINGsConfiguration.mouseWheelUp; + wheelIncrement = WINGsConfiguration.mouseWheelDown; + } + + if (event->xbutton.button == wheelDecrement) { if (event->xbutton.state & ControlMask) { sPtr->flags.hitPart = WSDecrementPage; } else if (event->xbutton.state & ShiftMask) { @@ -836,10 +845,10 @@ handleActionEvents(XEvent *event, void *data) } if (sPtr->action) { (*sPtr->action)(sPtr, sPtr->clientData); - WMPostNotificationName(WMScrollerDidScrollNotification, sPtr, + WMPostNotificationName(WMScrollerDidScrollNotification, sPtr, NULL); } - } else if (event->xbutton.button==WINGsConfiguration.mouseWheelDown) { + } else if (event->xbutton.button == wheelIncrement) { if (event->xbutton.state & ControlMask) { sPtr->flags.hitPart = WSIncrementPage; } else if (event->xbutton.state & ShiftMask) { @@ -865,7 +874,7 @@ handleActionEvents(XEvent *event, void *data) } break; - case ButtonRelease: + case ButtonRelease: if (sPtr->flags.draggingKnob) { if (sPtr->action) { (*sPtr->action)(sPtr, sPtr->clientData); @@ -882,7 +891,7 @@ handleActionEvents(XEvent *event, void *data) sPtr->flags.draggingKnob = 0; break; - case MotionNotify: + case MotionNotify: handleMotion(sPtr, event->xbutton.x, event->xbutton.y); if (sPtr->timerID && sPtr->flags.hitPart != WSIncrementLine && sPtr->flags.hitPart != WSDecrementLine) {