mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-02 18:00:26 +02:00
Qt: Changed TQtScrollBar focus behaviour. Fixes #11601
git-svn-id: trunk@15859 -
This commit is contained in:
parent
a15799bceb
commit
e98bf43728
@ -271,6 +271,8 @@ type
|
||||
{ TQtScrollBar }
|
||||
|
||||
TQtScrollBar = class(TQtAbstractSlider)
|
||||
private
|
||||
FRealParentCtl: TWinControl;
|
||||
protected
|
||||
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
|
||||
public
|
||||
@ -4492,19 +4494,62 @@ begin
|
||||
{$ifdef VerboseQt}
|
||||
WriteLn('TQtScrollBar.Create');
|
||||
{$endif}
|
||||
FRealParentCtl := nil;
|
||||
Result := QScrollBar_create();
|
||||
FHasPaint := True;
|
||||
end;
|
||||
|
||||
function TQtScrollBar.EventFilter(Sender: QObjectH; Event: QEventH): Boolean;
|
||||
cdecl;
|
||||
var
|
||||
QtWidget: TQtWidget;
|
||||
AParent: TWinControl;
|
||||
w: QWidgetH;
|
||||
begin
|
||||
beginEventProcessing;
|
||||
|
||||
{fixes #11601 -
|
||||
TODO: Real qt apps behaviour: when we click onto scrollbar
|
||||
it focuses control eg. treeview (if it isn't focused yet)
|
||||
but seem that we cannot get it via LCL.
|
||||
For now we use FRealParentCtl variable to get around this !
|
||||
}
|
||||
if QWidget_focusProxy(QWidgetH(Sender)) = nil then
|
||||
begin
|
||||
if not (csDesigning in LCLObject.ComponentState) then
|
||||
begin
|
||||
AParent := LCLObject.Parent;
|
||||
if Assigned(AParent) then
|
||||
begin
|
||||
if AParent.HandleAllocated then
|
||||
begin
|
||||
QtWidget := TQtWidget(AParent.Handle);
|
||||
if Assigned(QtWidget) and (QtWidget.Widget <> nil) then
|
||||
begin
|
||||
while Assigned(AParent.Parent) do
|
||||
begin
|
||||
AParent := AParent.Parent;
|
||||
QtWidget := TQtWidget(AParent.Handle);
|
||||
end;
|
||||
if (QtWidget <> nil) and Assigned(AParent) then
|
||||
QWidget_setFocusProxy(QWidgetH(Sender), QtWidget.Widget);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
case QEvent_type(Event) of
|
||||
{if any of those events returs TRUE our scrollbar becomes invisible.}
|
||||
QEventMouseButtonPress,
|
||||
QEventMouseButtonRelease,
|
||||
QEventMouseButtonDblClick,
|
||||
QEventMouseButtonDblClick:
|
||||
begin
|
||||
if (FRealParentCtl <> nil)
|
||||
and not FRealParentCtl.Focused then
|
||||
FRealParentCtl.SetFocus;
|
||||
Result := False;
|
||||
end;
|
||||
QEventMouseMove,
|
||||
QEventWheel,
|
||||
QEventPaint,
|
||||
@ -7445,6 +7490,7 @@ begin
|
||||
begin
|
||||
FHScrollBar := TQtScrollBar.CreateFrom(LCLObject, QAbstractScrollArea_horizontalScrollBar(QAbstractScrollAreaH(Widget)));
|
||||
FHScrollBar.AttachEvents;
|
||||
FHScrollBar.FRealParentCtl := LCLObject;
|
||||
end;
|
||||
Result := FHScrollBar;
|
||||
end;
|
||||
@ -7463,6 +7509,7 @@ begin
|
||||
begin
|
||||
FVScrollbar := TQtScrollBar.CreateFrom(LCLObject, QAbstractScrollArea_verticalScrollBar(QAbstractScrollAreaH(Widget)));;
|
||||
FVScrollbar.AttachEvents;
|
||||
FVScrollBar.FRealParentCtl := LCLObject;
|
||||
end;
|
||||
Result := FVScrollBar;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user