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:
blikblum 2010-08-10 17:02:07 +00:00
parent 0d8fe57965
commit 1aa796b724
4 changed files with 17 additions and 66 deletions

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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