From 22c2c19030b156032cff485b93bdf6b289b13d8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=BDeljan=20Rikalo?= <zeljko@holobit.hr> Date: Thu, 3 Apr 2025 22:07:53 +0200 Subject: [PATCH] Qt5,Qt6: Fixed QLineEdit behaviour and automatic selectAll() by Qt when control is focused.Related issue #10155 and issue #41562 (cherry picked from commit 91fbaca370f9147613df98d1463268183fac843d) Co-authored-by: zeljan1 <zeljko@holobit.hr> --- lcl/interfaces/qt5/qtwidgets.pas | 7 ++++++- lcl/interfaces/qt6/qtwidgets.pas | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lcl/interfaces/qt5/qtwidgets.pas b/lcl/interfaces/qt5/qtwidgets.pas index 8affca5193..0d655e6c84 100644 --- a/lcl/interfaces/qt5/qtwidgets.pas +++ b/lcl/interfaces/qt5/qtwidgets.pas @@ -107,6 +107,7 @@ type TQtWidget = class(TQtObject, IUnknown) private + FDefaultFocusReason: QtFocusReason; FInResizeEvent: boolean; FWidgetState: TQtWidgetStates; FWidgetDefaultFont: TQtFont; @@ -319,6 +320,7 @@ type nil): QPixmapH; property ChildOfComplexWidget: TChildOfComplexWidget read FChildOfComplexWidget write FChildOfComplexWidget; property Context: HDC read GetContext; + property DefaultFocusReason: QtFocusReason read FDefaultFocusReason write FDefaultFocusReason; property HasCaret: Boolean read FHasCaret write SetHasCaret; property HasPaint: Boolean read FHasPaint write FHasPaint; property InResizeEvent: boolean read FInResizeEvent write FInResizeEvent; @@ -2161,6 +2163,7 @@ end; procedure TQtWidget.InitializeWidget; begin + FDefaultFocusReason := QtTabFocusReason; FInResizeEvent := False; // default states FWidgetState := []; @@ -5164,7 +5167,7 @@ end; procedure TQtWidget.setFocus; begin if getFocusPolicy <> QtNoFocus then - QWidget_setFocus(Widget, QtTabFocusReason) {issue #10155} + QWidget_setFocus(Widget, FDefaultFocusReason) {issue #10155} else QWidget_setFocus(Widget); end; @@ -9768,6 +9771,7 @@ begin FCachedSelectionLen := -1; FIntValidator := nil; FNumbersOnly := False; + FDefaultFocusReason := QtOtherFocusReason; if AParams.WndParent <> 0 then Parent := TQtWidget(AParams.WndParent).GetContainerWidget else @@ -16484,6 +16488,7 @@ end; procedure TQtMenu.InitializeWidget; begin + FDefaultFocusReason := QtTabFocusReason; FWidgetState := []; ChildOfComplexWidget := ccwNone; WidgetColorRole := QPaletteWindow; diff --git a/lcl/interfaces/qt6/qtwidgets.pas b/lcl/interfaces/qt6/qtwidgets.pas index 5aa1405c06..490a603445 100644 --- a/lcl/interfaces/qt6/qtwidgets.pas +++ b/lcl/interfaces/qt6/qtwidgets.pas @@ -107,6 +107,7 @@ type TQtWidget = class(TQtObject, IUnknown) private + FDefaultFocusReason: QtFocusReason; FInResizeEvent: boolean; FWidgetState: TQtWidgetStates; FWidgetDefaultFont: TQtFont; @@ -316,6 +317,7 @@ type nil): QPixmapH; property ChildOfComplexWidget: TChildOfComplexWidget read FChildOfComplexWidget write FChildOfComplexWidget; property Context: HDC read GetContext; + property DefaultFocusReason: QtFocusReason read FDefaultFocusReason write FDefaultFocusReason; property HasCaret: Boolean read FHasCaret write SetHasCaret; property HasPaint: Boolean read FHasPaint write FHasPaint; property InResizeEvent: boolean read FInResizeEvent write FInResizeEvent; @@ -2158,6 +2160,7 @@ end; procedure TQtWidget.InitializeWidget; begin + FDefaultFocusReason := QtTabFocusReason; FInResizeEvent := False; // default states FWidgetState := []; @@ -5168,7 +5171,7 @@ end; procedure TQtWidget.setFocus; begin if getFocusPolicy <> QtNoFocus then - QWidget_setFocus(Widget, QtTabFocusReason) {issue #10155} + QWidget_setFocus(Widget, FDefaultFocusReason) {issue #10155} else QWidget_setFocus(Widget); end; @@ -9724,6 +9727,7 @@ begin FCachedSelectionLen := -1; FIntValidator := nil; FNumbersOnly := False; + FDefaultFocusReason := QtOtherFocusReason; if AParams.WndParent <> 0 then Parent := TQtWidget(AParams.WndParent).GetContainerWidget else @@ -16394,6 +16398,7 @@ end; procedure TQtMenu.InitializeWidget; begin + FDefaultFocusReason := QtTabFocusReason; FWidgetState := []; ChildOfComplexWidget := ccwNone; WidgetColorRole := QPaletteWindow;