diff --git a/lcl/interfaces/qt/qtwidgets.pas b/lcl/interfaces/qt/qtwidgets.pas index 4e09f49b20..464b609396 100644 --- a/lcl/interfaces/qt/qtwidgets.pas +++ b/lcl/interfaces/qt/qtwidgets.pas @@ -410,6 +410,7 @@ type FHScrollbar: TQtScrollBar; FVScrollbar: TQtScrollbar; public + function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override; procedure grabMouse; override; function GetContainerWidget: QWidgetH; override; function getClientOffset: TPoint; override; @@ -6549,8 +6550,8 @@ begin {$IFDEF QTSCROLLABLEFORMS} if Assigned(ScrollArea) and not IsMDIChild then begin - if QEvent_type(Event) in [QEventPaint, - QEventContextMenu] then + if QEvent_type(Event) in + [QEventPaint, QEventContextMenu, QEventWheel] then exit; end; {$ENDIF} @@ -8070,16 +8071,29 @@ begin else if (QEvent_type(Event) = QEventWheel) and Assigned(FOwner) and ( - {$IFDEF QTSCROLLABLEFORMS} - (FOwner is TQtWindowArea) or - {$ENDIF} - (FOwner is TQtCustomControl) + (FOwner is TQtAbstractScrollArea) ) then begin - Result := inherited EventFilter(Sender, Event); - // do not scroll when disabled + + // issue #25992 + if not getVisible then + Result := FOwner.SlotMouseWheel(FOwner.Widget, Event) + else + Result := inherited EventFilter(Sender, Event); + + // DebugLn('TQtScrollBar.EventFilter: QEventWheel ',dbgsName(LCLObject),' Result=',dbgs(Result)); + + // do not scroll when disabled or issue #25992 if not getEnabled then - Result := True; + Result := True + else + if not getVisible then + begin + if {$IFDEF QTSCROLLABLEFORMS}(FOwner is TQtWindowArea) or {$ENDIF} + (FOwner.ChildOfComplexWidget in + [ccwScrollingWinControl, ccwScrollingWindow]) then + Result := True; + end; end else Result := False; if (QEvent_type(Event) = QEventKeyRelease) and not @@ -15307,6 +15321,18 @@ begin end; end; +function TQtAbstractScrollArea.EventFilter(Sender: QObjectH; Event: QEventH + ): Boolean; cdecl; +begin + Result := False; + if (QEvent_type(Event) = QEventWheel) and + not (FChildOfComplexWidget in + [ccwCustomControl, ccwScrollingWinControl, ccwScrollingWindow]) then + // issue #25992.Do not propagate wheel event to lcl, it is done via TQtScrollBar.EventFilter. + else + Result:=inherited EventFilter(Sender, Event); +end; + procedure TQtAbstractScrollArea.grabMouse; var W: QWidgetH;