Qt: Changed TQtScrollBar focus behaviour. Fixes #11601

git-svn-id: trunk@15859 -
This commit is contained in:
zeljko 2008-07-24 16:56:33 +00:00
parent a15799bceb
commit e98bf43728

View File

@ -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;