+ // first check for scrollbars in case of mouse scroll wheel button events
+ if (IS_WHEEL_BUTTON(button))
+ {
+ // real horizontal wheel or vertical wheel with modifier key pressed
+ boolean check_horizontal = (IS_WHEEL_BUTTON_HORIZONTAL(button) ||
+ GetKeyModState() & KMOD_Shift);
+
+ // check for the first active scrollbar directly under the mouse pointer
+ for (gi = gadget_list_first_entry; gi != NULL; gi = gi->next)
+ {
+ if (gi->mapped && gi->active &&
+ (gi->type & GD_TYPE_SCROLLBAR) &&
+ mx >= gi->x && mx < gi->x + gi->width &&
+ my >= gi->y && my < gi->y + gi->height)
+ return gi;
+ }
+
+ // check for the first active scrollbar with matching mouse wheel area
+ for (gi = gadget_list_first_entry; gi != NULL; gi = gi->next)
+ {
+ if (gi->mapped && gi->active &&
+ ((gi->type & GD_TYPE_SCROLLBAR_HORIZONTAL && check_horizontal) ||
+ (gi->type & GD_TYPE_SCROLLBAR_VERTICAL && !check_horizontal)) &&
+ mx >= gi->wheelarea.x && mx < gi->wheelarea.x + gi->wheelarea.width &&
+ my >= gi->wheelarea.y && my < gi->wheelarea.y + gi->wheelarea.height)
+ return gi;
+ }
+
+ // no active scrollbar found -- ignore this scroll wheel button event
+ return NULL;
+ }
+
+ // open selectboxes may overlap other active gadgets, so check them first