mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-21 11:59:28 +02:00
Qt5,Qt6: do not send LM_CLICKED if button lost focus after mouse down. issue #41237
This commit is contained in:
parent
dfb7c2bd04
commit
c97c2774da
@ -549,10 +549,12 @@ type
|
||||
private
|
||||
FClickedHook: QAbstractButton_hookH;
|
||||
FToggledHook: QAbstractButton_hookH;
|
||||
procedure PushButtonUnblock(Data: PtrInt);
|
||||
protected
|
||||
function CreateWidget(const AParams: TCreateParams): QWidgetH; override;
|
||||
public
|
||||
procedure preferredSize(var PreferredWidth, PreferredHeight: integer; {%H-}WithThemeSpace: Boolean); override;
|
||||
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
|
||||
public
|
||||
procedure SetDefault(const ADefault: Boolean);
|
||||
procedure AttachEvents; override;
|
||||
@ -6184,6 +6186,30 @@ begin
|
||||
PreferredHeight := Size.cy;
|
||||
end;
|
||||
|
||||
procedure TQtPushButton.PushButtonUnblock(Data: PtrInt);
|
||||
begin
|
||||
QObject_blockSignals(QObjectH(Data), False);
|
||||
end;
|
||||
|
||||
function TQtPushButton.EventFilter(Sender: QObjectH; Event: QEventH): Boolean;
|
||||
cdecl;
|
||||
begin
|
||||
Result := False;
|
||||
case QEvent_type(Event) of
|
||||
QEventMouseButtonRelease:
|
||||
begin
|
||||
Result := SlotMouse(Sender, Event);
|
||||
if not QWidget_hasFocus(Widget) and (QMouseEvent_button(QMouseEventH(Event)) = QtLeftButton) then
|
||||
begin
|
||||
QObject_blockSignals(Sender, True);
|
||||
Application.QueueAsyncCall(@PushButtonUnblock, PtrInt(Sender));
|
||||
end;
|
||||
end;
|
||||
else
|
||||
Result := inherited EventFilter(Sender, Event);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TQtPushButton.SetDefault(const ADefault: Boolean);
|
||||
begin
|
||||
QPushButton_setDefault(QPushButtonH(Widget), ADefault);
|
||||
|
@ -551,10 +551,12 @@ type
|
||||
private
|
||||
FClickedHook: QAbstractButton_hookH;
|
||||
FToggledHook: QAbstractButton_hookH;
|
||||
procedure PushButtonUnblock(Data: PtrInt);
|
||||
protected
|
||||
function CreateWidget(const AParams: TCreateParams): QWidgetH; override;
|
||||
public
|
||||
procedure preferredSize(var PreferredWidth, PreferredHeight: integer; {%H-}WithThemeSpace: Boolean); override;
|
||||
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
|
||||
public
|
||||
procedure SetDefault(const ADefault: Boolean);
|
||||
procedure AttachEvents; override;
|
||||
@ -6199,6 +6201,30 @@ begin
|
||||
PreferredHeight := Size.cy;
|
||||
end;
|
||||
|
||||
procedure TQtPushButton.PushButtonUnblock(Data: PtrInt);
|
||||
begin
|
||||
QObject_blockSignals(QObjectH(Data), False);
|
||||
end;
|
||||
|
||||
function TQtPushButton.EventFilter(Sender: QObjectH; Event: QEventH): Boolean;
|
||||
cdecl;
|
||||
begin
|
||||
Result := False;
|
||||
case QEvent_type(Event) of
|
||||
QEventMouseButtonRelease:
|
||||
begin
|
||||
Result := SlotMouse(Sender, Event);
|
||||
if not QWidget_hasFocus(Widget) and (QMouseEvent_button(QMouseEventH(Event)) = QtLeftButton) then
|
||||
begin
|
||||
QObject_blockSignals(Sender, True);
|
||||
Application.QueueAsyncCall(@PushButtonUnblock, PtrInt(Sender));
|
||||
end;
|
||||
end;
|
||||
else
|
||||
Result := inherited EventFilter(Sender, Event);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TQtPushButton.SetDefault(const ADefault: Boolean);
|
||||
begin
|
||||
QPushButton_setDefault(QPushButtonH(Widget), ADefault);
|
||||
|
Loading…
Reference in New Issue
Block a user