5.15.8 - fix for QTBUG-98093 (backport of 4bee9cdc0a)

This commit is contained in:
kleuter 2022-02-18 13:54:23 +01:00
parent 14cb2bbefd
commit 2fda989a0e

View File

@ -468,7 +468,11 @@ static bool setupSlider(NSSlider *slider, const QStyleOptionSlider *sl)
if (sl->minimum >= sl->maximum) if (sl->minimum >= sl->maximum)
return false; return false;
slider.frame = sl->rect.toCGRect(); // NSSlider seems to cache values based on tracking and the last layout of the
// NSView, resulting in incorrect knob rects that break the interaction with
// multiple sliders. So completely reinitialize the slider.
[slider initWithFrame:sl->rect.toCGRect()];
slider.minValue = sl->minimum; slider.minValue = sl->minimum;
slider.maxValue = sl->maximum; slider.maxValue = sl->maximum;
slider.intValue = sl->sliderPosition; slider.intValue = sl->sliderPosition;
@ -498,6 +502,14 @@ static bool setupSlider(NSSlider *slider, const QStyleOptionSlider *sl)
// the cell for its metrics and to draw itself. // the cell for its metrics and to draw itself.
[slider layoutSubtreeIfNeeded]; [slider layoutSubtreeIfNeeded];
if (sl->state & QStyle::State_Sunken) {
const CGRect knobRect = [slider.cell knobRectFlipped:slider.isFlipped];
CGPoint pressPoint;
pressPoint.x = CGRectGetMidX(knobRect);
pressPoint.y = CGRectGetMidY(knobRect);
[slider.cell startTrackingAt:pressPoint inView:slider];
}
return true; return true;
} }