mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-22 20:19:27 +02:00
lcl: remove workarounds to recursive LM_CHANGE calls, since it was fixed fixed in rev 27050 #8d7d250608 and 27051:
- don't toggle TRadioButton siblings state since this is done by widgetset; - remove FLastCheckedOnChange; - call OnChange only if State was really changed by widgetset - Dont set Checked property in Click Part of 0017139 and 0017104 git-svn-id: trunk@27053 -
This commit is contained in:
parent
0d8fe57965
commit
1aa796b724
@ -47,19 +47,12 @@ end;
|
||||
|
||||
procedure TButtonControl.DoOnChange;
|
||||
begin
|
||||
if Checked = FLastCheckedOnChange then Exit;
|
||||
FLastCheckedOnChange := Checked;
|
||||
|
||||
if [csLoading, csDestroying, csDesigning] * ComponentState <> [] then Exit;
|
||||
EditingDone;
|
||||
if Assigned(OnChange) then OnChange(Self);
|
||||
end;
|
||||
|
||||
procedure TButtonControl.Loaded;
|
||||
begin
|
||||
inherited Loaded;
|
||||
fLastCheckedOnChange:=Checked;
|
||||
end;
|
||||
|
||||
procedure TButtonControl.CMWantSpecialKey(var Message: TLMessage);
|
||||
begin
|
||||
// button controls dont want any special keys
|
||||
|
@ -53,13 +53,8 @@ begin
|
||||
end;
|
||||
|
||||
procedure TCustomCheckBox.DoChange(var Msg);
|
||||
var
|
||||
NewState: TCheckBoxState;
|
||||
begin
|
||||
NewState := RetrieveState;
|
||||
if FState = NewState then exit;
|
||||
FState := NewState;
|
||||
// emulate delphi OnClick behaviour
|
||||
FState := RetrieveState;
|
||||
DoClickOnChange;
|
||||
end;
|
||||
|
||||
@ -154,8 +149,10 @@ begin
|
||||
if Assigned(Action) and (Action is TCustomAction) then
|
||||
TCustomAction(Action).Checked := FState = cbChecked;
|
||||
ApplyChanges;
|
||||
DoOnChange;
|
||||
if not ClicksDisabled then
|
||||
//some widgetsets (gtk*) does not allow to uncheck a radio button
|
||||
//only call OnChange if effectivelly changed
|
||||
FState := RetrieveState;
|
||||
if FState <> OldState then
|
||||
DoClickOnChange;
|
||||
end;
|
||||
end;
|
||||
@ -249,7 +246,11 @@ end;
|
||||
|
||||
procedure TCustomCheckBox.DoClickOnChange;
|
||||
begin
|
||||
inherited Click;
|
||||
// emulate delphi OnClick behaviour (click will call OnChange)
|
||||
if not ClicksDisabled then
|
||||
inherited Click
|
||||
else
|
||||
DoOnChange;
|
||||
end;
|
||||
|
||||
function TCustomCheckBox.DialogChar(var Message: TLMKey): boolean;
|
||||
|
@ -71,44 +71,14 @@ begin
|
||||
AdjustSize;
|
||||
end;
|
||||
|
||||
procedure TRadioButton.ApplyChanges;
|
||||
begin
|
||||
inherited ApplyChanges;
|
||||
DoApplyChanges;
|
||||
end;
|
||||
|
||||
procedure TRadioButton.SetChecked(Value: Boolean);
|
||||
begin
|
||||
inherited SetChecked(Value);
|
||||
TabStop := Value;
|
||||
end;
|
||||
|
||||
procedure TRadioButton.DoChange(var Msg);
|
||||
begin
|
||||
inherited DoChange(Msg);
|
||||
DoApplyChanges;
|
||||
end;
|
||||
|
||||
procedure TRadioButton.DoApplyChanges;
|
||||
var
|
||||
i: Integer;
|
||||
Sibling: TControl;
|
||||
begin
|
||||
if not (csLoading in ComponentState) and (Parent <> nil) and (FState = cbChecked) then
|
||||
begin
|
||||
for i := 0 to Parent.ControlCount - 1 do
|
||||
begin
|
||||
Sibling := Parent.Controls[i];
|
||||
if (Sibling is TRadioButton) and (Sibling <> Self) then
|
||||
TRadioButton(Sibling).Checked := False;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TRadioButton.DoClickOnChange;
|
||||
begin
|
||||
if State = cbChecked then
|
||||
inherited DoClickOnChange;
|
||||
TabStop := FState = cbChecked;
|
||||
//inherited calls DoOnChange
|
||||
if FState = cbChecked then
|
||||
inherited DoClickOnChange
|
||||
else
|
||||
DoOnChange;
|
||||
end;
|
||||
|
||||
procedure TRadioButton.CreateParams(var Params: TCreateParams);
|
||||
@ -125,12 +95,6 @@ begin
|
||||
RegisterRadioButton;
|
||||
end;
|
||||
|
||||
procedure TRadioButton.Click;
|
||||
begin
|
||||
Checked := True;
|
||||
inherited Click;
|
||||
end;
|
||||
|
||||
function TRadioButton.DialogChar(var Message: TLMKey): boolean;
|
||||
begin
|
||||
if IsAccel(Message.CharCode, Caption) and CanFocus then
|
||||
|
@ -1041,13 +1041,11 @@ type
|
||||
function IsCheckedStored: boolean;
|
||||
procedure WMDefaultClicked(var Message: TLMessage); message LM_CLICKED;
|
||||
protected
|
||||
FLastCheckedOnChange: boolean;
|
||||
class procedure WSRegisterClass; override;
|
||||
function GetChecked: Boolean; virtual;
|
||||
procedure SetChecked(Value: Boolean); virtual;
|
||||
procedure DoOnChange; virtual;
|
||||
procedure Click; override;
|
||||
procedure Loaded; override;
|
||||
procedure CMWantSpecialKey(var Message: TLMessage); message CM_WANTSPECIALKEY;
|
||||
protected
|
||||
property Checked: Boolean read GetChecked write SetChecked stored IsCheckedStored default False;
|
||||
@ -1317,13 +1315,8 @@ type
|
||||
TRadioButton = class(TCustomCheckBox)
|
||||
protected
|
||||
class procedure WSRegisterClass; override;
|
||||
procedure Click; override;
|
||||
function DialogChar(var Message: TLMKey): boolean; override;
|
||||
procedure RealSetText(const Value: TCaption); override;
|
||||
procedure ApplyChanges; override;
|
||||
procedure SetChecked(Value: Boolean); override;
|
||||
procedure DoChange(var Msg); message LM_CHANGED;
|
||||
procedure DoApplyChanges;
|
||||
procedure DoClickOnChange; override;
|
||||
procedure CreateParams(var Params: TCreateParams); override;
|
||||
public
|
||||
|
Loading…
Reference in New Issue
Block a user