Qt,Qt5,Qt6: fixed mouse capture for TEdit and TComboBox, see details in related issue. Issue #40379

(cherry picked from commit ddc2c4135b)
This commit is contained in:
Željan Rikalo 2023-12-05 16:32:37 +01:00 committed by Maxim Ganetsky
parent a13572de2b
commit 13c74b1dbd
3 changed files with 69 additions and 6 deletions

View File

@ -1083,7 +1083,7 @@ type
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
procedure preferredSize(var PreferredWidth, PreferredHeight: integer;
{%H-}WithThemeSpace: Boolean); override;
procedure grabMouse; override;
procedure SlotActivate(index: Integer); cdecl;
procedure SlotChange(p1: PWideString); cdecl;
procedure SlotSelect(index: Integer); cdecl;
@ -1129,6 +1129,7 @@ type
function getReadOnly: Boolean;
function getText: WideString; override;
function getTextStatic: Boolean; override;
procedure grabMouse; override;
procedure setAlignment(const AAlignment: QtAlignment);
procedure setBorder(const ABorder: Boolean);
procedure setDefaultColorRoles; override;
@ -11493,6 +11494,14 @@ begin
PreferredHeight := Size.cy;
end;
procedure TQtComboBox.grabMouse;
begin
if Assigned(LCLObject) and getEditable and not (csDesigning in LCLObject.ComponentState) then
LineEdit.grabMouse
else
inherited grabMouse;
end;
procedure TQtComboBox.SlotActivate(index: Integer); cdecl;
var
Msg: TLMessage;
@ -11585,7 +11594,10 @@ function TQtAbstractSpinBox.LineEditEventFilter(Sender: QObjectH; Event: QEventH
begin
Result := False;
QEvent_accept(Event);
if QEvent_type(Event) = QEventFontChange then
if (QEvent_type(Event) = QEventFontChange) then
Result := EventFilter(QWidgetH(Sender), Event)
else
if (QEvent_type(Event) >= QEventMouseButtonPress) and (QEvent_type(Event) <= QEventMouseMove) then
Result := EventFilter(QWidgetH(Sender), Event);
end;
@ -11758,6 +11770,15 @@ begin
Result := False;
end;
procedure TQtAbstractSpinBox.grabMouse;
begin
if Assigned(LCLObject) and not (csDesigning in LCLObject.ComponentState)
and Assigned(LineEdit) then
QWidget_grabMouse(LineEdit)
else
inherited grabMouse;
end;
procedure TQtAbstractSpinBox.setAlignment(const AAlignment: QtAlignment);
begin
QAbstractSpinBox_setAlignment(QSpinBoxH(Widget), AAlignment);

View File

@ -1100,7 +1100,7 @@ type
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
procedure preferredSize(var PreferredWidth, PreferredHeight: integer;
{%H-}WithThemeSpace: Boolean); override;
procedure grabMouse; override;
procedure SlotActivate(index: Integer); cdecl;
procedure SlotChange(p1: PWideString); cdecl;
procedure SlotSelect(index: Integer); cdecl;
@ -1147,6 +1147,7 @@ type
function getReadOnly: Boolean;
function getText: WideString; override;
function getTextStatic: Boolean; override;
procedure grabMouse; override;
procedure setAlignment(const AAlignment: QtAlignment);
procedure setBorder(const ABorder: Boolean);
procedure setDefaultColorRoles; override;
@ -11751,6 +11752,14 @@ begin
PreferredHeight := Size.cy;
end;
procedure TQtComboBox.grabMouse;
begin
if Assigned(LCLObject) and getEditable and not (csDesigning in LCLObject.ComponentState) then
LineEdit.grabMouse
else
inherited grabMouse;
end;
procedure TQtComboBox.SlotActivate(index: Integer); cdecl;
var
Msg: TLMessage;
@ -11843,7 +11852,10 @@ function TQtAbstractSpinBox.LineEditEventFilter(Sender: QObjectH; Event: QEventH
begin
Result := False;
QEvent_accept(Event);
if QEvent_type(Event) = QEventFontChange then
if (QEvent_type(Event) = QEventFontChange) then
Result := EventFilter(QWidgetH(Sender), Event)
else
if (QEvent_type(Event) >= QEventMouseButtonPress) and (QEvent_type(Event) <= QEventMouseMove) then
Result := EventFilter(QWidgetH(Sender), Event);
end;
@ -12027,6 +12039,15 @@ begin
Result := False;
end;
procedure TQtAbstractSpinBox.grabMouse;
begin
if Assigned(LCLObject) and not (csDesigning in LCLObject.ComponentState)
and Assigned(LineEdit) then
QWidget_grabMouse(LineEdit)
else
inherited grabMouse;
end;
procedure TQtAbstractSpinBox.setAlignment(const AAlignment: QtAlignment);
begin
QAbstractSpinBox_setAlignment(QSpinBoxH(Widget), AAlignment);

View File

@ -1101,7 +1101,7 @@ type
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
procedure preferredSize(var PreferredWidth, PreferredHeight: integer;
{%H-}WithThemeSpace: Boolean); override;
procedure grabMouse; override;
procedure SlotActivate(index: Integer); cdecl;
procedure SlotChange(p1: PWideString); cdecl;
procedure SlotSelect(index: Integer); cdecl;
@ -1148,6 +1148,7 @@ type
function getReadOnly: Boolean;
function getText: WideString; override;
function getTextStatic: Boolean; override;
procedure grabMouse; override;
procedure setAlignment(const AAlignment: QtAlignment);
procedure setBorder(const ABorder: Boolean);
procedure setDefaultColorRoles; override;
@ -11778,6 +11779,14 @@ begin
PreferredHeight := Size.cy;
end;
procedure TQtComboBox.grabMouse;
begin
if Assigned(LCLObject) and getEditable and not (csDesigning in LCLObject.ComponentState) then
LineEdit.grabMouse
else
inherited grabMouse;
end;
procedure TQtComboBox.SlotActivate(index: Integer); cdecl;
var
Msg: TLMessage;
@ -11870,7 +11879,10 @@ function TQtAbstractSpinBox.LineEditEventFilter(Sender: QObjectH; Event: QEventH
begin
Result := False;
QEvent_accept(Event);
if QEvent_type(Event) = QEventFontChange then
if (QEvent_type(Event) = QEventFontChange) then
Result := EventFilter(QWidgetH(Sender), Event)
else
if (QEvent_type(Event) >= QEventMouseButtonPress) and (QEvent_type(Event) <= QEventMouseMove) then
Result := EventFilter(QWidgetH(Sender), Event);
end;
@ -12054,6 +12066,15 @@ begin
Result := False;
end;
procedure TQtAbstractSpinBox.grabMouse;
begin
if Assigned(LCLObject) and not (csDesigning in LCLObject.ComponentState)
and Assigned(LineEdit) then
QWidget_grabMouse(LineEdit)
else
inherited grabMouse;
end;
procedure TQtAbstractSpinBox.setAlignment(const AAlignment: QtAlignment);
begin
QAbstractSpinBox_setAlignment(QSpinBoxH(Widget), AAlignment);