mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 13:39:11 +02:00
Qt: QtSizeFix - completely reduced overhead, InvalidateClientRectCache() isn't called by TQtPage on each QEvent::Resize anymore.
git-svn-id: trunk@25034 -
This commit is contained in:
parent
7937d63b39
commit
756b181ef3
@ -707,6 +707,9 @@ type
|
|||||||
private
|
private
|
||||||
FCurrentChangedHook: QTabWidget_hookH;
|
FCurrentChangedHook: QTabWidget_hookH;
|
||||||
FCloseRequestedHook: QTabWidget_hookH;
|
FCloseRequestedHook: QTabWidget_hookH;
|
||||||
|
{$IFDEF QTSizeFix}
|
||||||
|
FStackedWidgetHook: QObject_hookH;
|
||||||
|
{$ENDIF}
|
||||||
FTabBar: TQtTabBar;
|
FTabBar: TQtTabBar;
|
||||||
FStackWidget: QWidgetH;
|
FStackWidget: QWidgetH;
|
||||||
function getShowTabs: Boolean;
|
function getShowTabs: Boolean;
|
||||||
@ -6486,10 +6489,21 @@ begin
|
|||||||
|
|
||||||
FCloseRequestedHook := QTabWidget_hook_create(Widget);
|
FCloseRequestedHook := QTabWidget_hook_create(Widget);
|
||||||
QTabWidget_hook_hook_tabCloseRequested(FCloseRequestedHook, @SignalCloseRequested);
|
QTabWidget_hook_hook_tabCloseRequested(FCloseRequestedHook, @SignalCloseRequested);
|
||||||
|
{$IFDEF QTSizeFix}
|
||||||
|
FStackedWidgetHook := QObject_hook_create(StackWidget);
|
||||||
|
QObject_hook_hook_events(FStackedWidgetHook, @EventFilter);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TQtTabWidget.DetachEvents;
|
procedure TQtTabWidget.DetachEvents;
|
||||||
begin
|
begin
|
||||||
|
{$IFDEF QTSizeFix}
|
||||||
|
if FStackedWidgetHook <> nil then
|
||||||
|
begin
|
||||||
|
QObject_hook_destroy(FStackedWidgetHook);
|
||||||
|
FStackedWidgetHook := nil;
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
QTabWidget_hook_destroy(FCurrentChangedHook);
|
QTabWidget_hook_destroy(FCurrentChangedHook);
|
||||||
QTabWidget_hook_destroy(FCloseRequestedHook);
|
QTabWidget_hook_destroy(FCloseRequestedHook);
|
||||||
inherited DetachEvents;
|
inherited DetachEvents;
|
||||||
@ -6503,7 +6517,19 @@ begin
|
|||||||
QEvent_accept(Event);
|
QEvent_accept(Event);
|
||||||
if LCLObject = nil then
|
if LCLObject = nil then
|
||||||
exit;
|
exit;
|
||||||
|
{$IFDEF QTSizeFix}
|
||||||
|
if (Sender = FStackWidget) then
|
||||||
|
begin
|
||||||
|
case QEvent_type(Event) of
|
||||||
|
QEventResize:
|
||||||
|
if LCLObject.ClientRectNeedsInterfaceUpdate then
|
||||||
|
LCLObject.InvalidateClientRectCache(False);
|
||||||
|
// layoutRequest from stacked widget is very important !
|
||||||
|
QEventLayoutRequest: LCLObject.DoAdjustClientRectChange(False);
|
||||||
|
end;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
BeginEventProcessing;
|
BeginEventProcessing;
|
||||||
case QEvent_type(Event) of
|
case QEvent_type(Event) of
|
||||||
QEventKeyPress,
|
QEventKeyPress,
|
||||||
@ -6522,7 +6548,7 @@ end;
|
|||||||
------------------------------------------------------------------------------}
|
------------------------------------------------------------------------------}
|
||||||
function TQtTabWidget.insertTab(index: Integer; page: QWidgetH; p2: WideString): Integer; overload;
|
function TQtTabWidget.insertTab(index: Integer; page: QWidgetH; p2: WideString): Integer; overload;
|
||||||
begin
|
begin
|
||||||
Result := QTabWidget_insertTab(QTabWidgetH(Widget), index, page, @p2);
|
Result := insertTab(index, page, nil, p2);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------
|
{------------------------------------------------------------------------------
|
||||||
@ -11039,8 +11065,14 @@ end;
|
|||||||
|
|
||||||
function TQtPage.EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl;
|
function TQtPage.EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl;
|
||||||
begin
|
begin
|
||||||
|
{$IFDEF QTSizeFix}
|
||||||
|
if (QEvent_type(Event) = QEventResize) and
|
||||||
|
LCLObject.Parent.ClientRectNeedsInterfaceUpdate then
|
||||||
|
LCLObject.Parent.InvalidateClientRectCache(False);
|
||||||
|
{$ELSE}
|
||||||
if (QEvent_type(Event) = QEventResize) and not InUpdate then
|
if (QEvent_type(Event) = QEventResize) and not InUpdate then
|
||||||
LCLObject.Parent.InvalidateClientRectCache(False);
|
LCLObject.Parent.InvalidateClientRectCache(False);
|
||||||
|
{$ENDIF}
|
||||||
Result:=inherited EventFilter(Sender, Event);
|
Result:=inherited EventFilter(Sender, Event);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user