View Issue Details

IDProjectCategoryView StatusLast Update
0015628LazarusDebuggerpublic2010-03-30 10:15
ReporterFlávio Etrusco Assigned ToMarc Weustink  
PrioritynormalSeverityfeatureReproducibilityN/A
Status closedResolutionfixed 
Product Version0.9.28.3 (SVN) 
Fixed in Version0.9.29 (SVN) 
Summary0015628: Debbuger/Evaluate window doesn't allow modification of variable
DescriptionNot yet implemented in TGDBMIDebugger.
Tagsgettext, has_patch, patch
Fixed in Revision23866
LazTarget-
WidgetsetGTK, GTK 2, Win32/Win64, WinCE, Carbon, QT, fpGUI
Attached Files

Activities

Flávio Etrusco

2010-02-09 03:54

developer   ~0034306

Marc, have you really started working on this? I started the work but decided to switch priorities... I can come back to this if you think it deserves priority. Of course you'd it faster; I don't promise anything in less than a week since I'm a newbie to gdb and even more to IM...

Flávio Etrusco

2010-02-09 03:59

developer   ~0034307

And later there'd be several questions regarding the interface and other stuff... when to enable the button, whether we need to evaluate the expression previously to confirm it's valid, whether we need to evaluate the final value to display some error if the operation fails...
(BTW, I didn't receive a message regarding your changes to this issue. Where should I look at in my Mantis Preferences?)

2010-02-24 06:45

 

GdbModifyValue_r23772.patch (8,690 bytes)   
# HG changeset patch
# User etrusco <flavio.etrusco@gmail.com>
# Date 1266987530 10800
# Branch trunk
# Node ID bea7d0279db6a579f752c7934da78474431ad1f5
# Parent  59e4d0720eb0a1a841bb6afdfcf158edbbe686dc
imported patch GdbModifyValue

diff --git a/debugger/debugger.pp b/debugger/debugger.pp
--- a/debugger/debugger.pp
+++ b/debugger/debugger.pp
@@ -1783,7 +1783,7 @@ end;
 
 function TDebugger.Modify(const AExpression, AValue: String): Boolean;
 begin
-  Result := False;
+  Result := ReqCmd(dcModify, [AExpression, AValue]);
 end;
 
 procedure TDebugger.Pause;
diff --git a/debugger/evaluatedlg.lfm b/debugger/evaluatedlg.lfm
--- a/debugger/evaluatedlg.lfm
+++ b/debugger/evaluatedlg.lfm
@@ -3,6 +3,7 @@ inherited EvaluateDlg: TEvaluateDlg
   Height = 290
   Top = 393
   Width = 400
+  ActiveControl = cmbExpression
   BorderStyle = bsSizeToolWin
   Caption = 'Evaluate/Modify'
   ClientHeight = 290
@@ -17,9 +18,9 @@ inherited EvaluateDlg: TEvaluateDlg
     AnchorSideTop.Control = ToolBar1
     AnchorSideTop.Side = asrBottom
     Left = 6
-    Height = 14
+    Height = 18
     Top = 47
-    Width = 57
+    Width = 86
     BorderSpacing.Left = 6
     BorderSpacing.Top = 3
     Caption = '&Expression:'
@@ -31,9 +32,9 @@ inherited EvaluateDlg: TEvaluateDlg
     AnchorSideTop.Control = cmbExpression
     AnchorSideTop.Side = asrBottom
     Left = 6
-    Height = 14
-    Top = 91
-    Width = 35
+    Height = 18
+    Top = 103
+    Width = 55
     BorderSpacing.Left = 6
     BorderSpacing.Top = 6
     Caption = '&Result:'
@@ -44,9 +45,9 @@ inherited EvaluateDlg: TEvaluateDlg
     AnchorSideLeft.Control = Owner
     AnchorSideBottom.Control = cmbNewValue
     Left = 6
-    Height = 14
-    Top = 246
-    Width = 55
+    Height = 18
+    Top = 234
+    Width = 84
     Anchors = [akLeft, akBottom]
     BorderSpacing.Left = 6
     BorderSpacing.Bottom = 3
@@ -69,7 +70,7 @@ inherited EvaluateDlg: TEvaluateDlg
     TabOrder = 0
     TabStop = True
     object tbInspect: TToolButton
-      Left = 152
+      Left = 170
       Top = 2
       Caption = '&Inspect'
       Enabled = False
@@ -77,7 +78,7 @@ inherited EvaluateDlg: TEvaluateDlg
       OnClick = tbInspectClick
     end
     object tbWatch: TToolButton
-      Left = 102
+      Left = 120
       Top = 2
       AllowAllUp = True
       Caption = '&Watch'
@@ -86,11 +87,12 @@ inherited EvaluateDlg: TEvaluateDlg
       OnClick = tbWatchClick
     end
     object tbModify: TToolButton
-      Left = 52
+      Left = 67
       Top = 2
       Caption = '&Modify'
       Enabled = False
       ImageIndex = 1
+      OnClick = tbModifyClick
     end
     object tbEvaluate: TToolButton
       Left = 2
@@ -108,14 +110,14 @@ inherited EvaluateDlg: TEvaluateDlg
     AnchorSideRight.Control = Owner
     AnchorSideRight.Side = asrBottom
     Left = 6
-    Height = 21
-    Top = 64
+    Height = 29
+    Top = 68
     Width = 388
     Anchors = [akTop, akLeft, akRight]
     BorderSpacing.Left = 6
     BorderSpacing.Top = 3
     BorderSpacing.Right = 6
-    ItemHeight = 13
+    ItemHeight = 0
     OnChange = cmbExpressionChange
     OnKeyDown = cmbExpressionKeyDown
     TabOrder = 2
@@ -128,8 +130,8 @@ inherited EvaluateDlg: TEvaluateDlg
     AnchorSideRight.Side = asrBottom
     AnchorSideBottom.Control = lblNewValue
     Left = 6
-    Height = 132
-    Top = 108
+    Height = 104
+    Top = 124
     Width = 388
     Anchors = [akTop, akLeft, akRight, akBottom]
     BorderSpacing.Left = 6
@@ -146,14 +148,14 @@ inherited EvaluateDlg: TEvaluateDlg
     AnchorSideBottom.Control = Owner
     AnchorSideBottom.Side = asrBottom
     Left = 6
-    Height = 21
-    Top = 263
+    Height = 29
+    Top = 255
     Width = 388
     Anchors = [akLeft, akRight, akBottom]
     BorderSpacing.Left = 6
     BorderSpacing.Right = 6
     BorderSpacing.Bottom = 6
-    ItemHeight = 13
+    ItemHeight = 0
     TabOrder = 3
   end
 end
diff --git a/debugger/evaluatedlg.pp b/debugger/evaluatedlg.pp
--- a/debugger/evaluatedlg.pp
+++ b/debugger/evaluatedlg.pp
@@ -64,6 +64,7 @@ type
       Shift: TShiftState);
     procedure tbEvaluateClick(Sender: TObject);
     procedure tbInspectClick(Sender: TObject);
+    procedure tbModifyClick(Sender: TObject);
     procedure tbWatchClick(Sender: TObject);
     
   private
@@ -173,8 +174,10 @@ begin
   then begin
     if cmbExpression.Items.IndexOf(S) = -1
     then cmbExpression.Items.Insert(0, S);
-//    tbModify.Enabled := True;
-  end;
+    tbModify.Enabled := DBGType.Kind in [skEnum, skSet, skSimple, skPointer, skVariant];
+  end
+  else
+    tbModify.Enabled := False;
   FreeAndNil(DBGType);
   txtResult.Lines.Text := R;
 end;
@@ -184,6 +187,11 @@ begin
   DebugBoss.Inspect(cmbExpression.Text);
 end;
 
+procedure TEvaluateDlg.tbModifyClick(Sender: TObject);
+begin
+  DebugBoss.Modify(cmbExpression.Text, cmbNewValue.Text);
+end;
+
 procedure TEvaluateDlg.tbWatchClick(Sender: TObject);
 var
   S: String;
diff --git a/debugger/gdbmidebugger.pp b/debugger/gdbmidebugger.pp
--- a/debugger/gdbmidebugger.pp
+++ b/debugger/gdbmidebugger.pp
@@ -63,7 +63,7 @@ type
   );
 
   TGDBMIResultFlags = set of (
-    rfNoMI         // flag is set if the output is not MI fomatted
+    rfNoMI         // flag is set if the output is not MI formatted
                    // some MI functions return normal output
                    // some normal functions return MI output
   );
@@ -139,6 +139,7 @@ type
     // Implementation of external functions
     function  GDBEnvironment(const AVariable: String; const ASet: Boolean): Boolean;
     function  GDBEvaluate(const AExpression: String; var AResult: String; out ATypeInfo: TGDBType): Boolean;
+    function  GDBModify(const AExpression, ANewValue: String): Boolean;
     function  GDBRun: Boolean;
     function  GDBPause(const AInternal: Boolean): Boolean;
     function  GDBStop: Boolean;
@@ -2656,6 +2657,11 @@ begin
   AResult := FormatResult(AResult);
 end;
 
+function TGDBMIDebugger.GDBModify(const AExpression, ANewValue: String): Boolean;
+begin
+  Result := ExecuteCommand('set var %s := %s', [AExpression, ANewValue], [cfIgnoreError, cfExternal, cfNoMiCommand]);
+end;
+
 function TGDBMIDebugger.GDBJumpTo(const ASource: String; const ALine: Integer): Boolean;
 begin
   Result := False;
@@ -3804,6 +3810,7 @@ begin
     dcRunTo:       Result := GDBRunTo(String(AParams[0].VAnsiString), AParams[1].VInteger);
     dcJumpto:      Result := GDBJumpTo(String(AParams[0].VAnsiString), AParams[1].VInteger);
     dcEvaluate:    Result := GDBEvaluate(String(AParams[0].VAnsiString), String(AParams[1].VPointer^),TGDBType(AParams[2].VPointer^));
+    dcModify:      Result := GDBModify(String(AParams[0].VAnsiString), String(AParams[1].VAnsiString));
     dcEnvironment: Result := GDBEnvironment(String(AParams[0].VAnsiString), AParams[1].VBoolean);
     dcDisassemble: Result := GDBDisassemble(AParams[0].VQWord^, AParams[1].VBoolean, TDbgPtr(AParams[2].VPointer^),
                                             String(AParams[3].VPointer^), String(AParams[4].VPointer^),
diff --git a/ide/basedebugmanager.pas b/ide/basedebugmanager.pas
--- a/ide/basedebugmanager.pas
+++ b/ide/basedebugmanager.pas
@@ -117,6 +117,7 @@ type
 
     function Evaluate(const AExpression: String; var AResult: String;
                      var ATypeInfo: TDBGType): Boolean; virtual; abstract; // Evaluates the given expression, returns true if valid
+    function Modify(const AExpression: String; const ANewValue: String): Boolean; virtual; abstract; // Modify the given expression, returns true if valid
 
     function GetFullFilename(var Filename: string; AskUserIfNotFound: Boolean): Boolean; virtual; abstract;
     procedure Inspect(const AExpression: String); virtual; abstract;
diff --git a/ide/debugmanager.pas b/ide/debugmanager.pas
--- a/ide/debugmanager.pas
+++ b/ide/debugmanager.pas
@@ -174,6 +174,7 @@ type
     procedure EndDebugging; override;
     function Evaluate(const AExpression: String; var AResult: String;
                      var ATypeInfo: TDBGType): Boolean; override;
+    function Modify(const AExpression, ANewValue: String): Boolean; override;
 
     procedure Inspect(const AExpression: String); override;
 
@@ -2485,6 +2486,15 @@ begin
         and FDebugger.Evaluate(AExpression, AResult, ATypeInfo)
 end;
 
+function TDebugManager.Modify(const AExpression, ANewValue: String): Boolean;
+begin
+  Result := (not Destroying)
+        and (MainIDE.ToolStatus = itDebugger)
+        and (FDebugger <> nil)
+        and (dcModify in FDebugger.Commands)
+        and FDebugger.Modify(AExpression, ANewValue)
+end;
+
 procedure TDebugManager.Inspect(const AExpression: String);
 begin
   if Destroying then Exit;
GdbModifyValue_r23772.patch (8,690 bytes)   

Flávio Etrusco

2010-02-24 06:50

developer   ~0034719

Last edited: 2010-02-24 06:51

Silly me. Had this patch for a couple of weeks already and all I needed for it to work was to change gdb assignment operator (from "=" to ":=")...
BTW, properties are working nicely with FPC 2.5.1 and dwarf, thanks for the hint Mark!

2010-02-24 07:05

 

GdbModifyValue_r23772_v2.patch (9,708 bytes)   
# HG changeset patch
# User etrusco <flavio.etrusco@gmail.com>
# Date 1266991239 10800
# Branch trunk
# Node ID ea8ab9f344c3893c74e5b99ad913bad206d417b5
# Parent  59e4d0720eb0a1a841bb6afdfcf158edbbe686dc
imported patch GdbModifyValue

diff --git a/debugger/debugger.pp b/debugger/debugger.pp
--- a/debugger/debugger.pp
+++ b/debugger/debugger.pp
@@ -1783,7 +1783,7 @@ end;
 
 function TDebugger.Modify(const AExpression, AValue: String): Boolean;
 begin
-  Result := False;
+  Result := ReqCmd(dcModify, [AExpression, AValue]);
 end;
 
 procedure TDebugger.Pause;
diff --git a/debugger/evaluatedlg.lfm b/debugger/evaluatedlg.lfm
--- a/debugger/evaluatedlg.lfm
+++ b/debugger/evaluatedlg.lfm
@@ -3,6 +3,7 @@ inherited EvaluateDlg: TEvaluateDlg
   Height = 290
   Top = 393
   Width = 400
+  ActiveControl = cmbExpression
   BorderStyle = bsSizeToolWin
   Caption = 'Evaluate/Modify'
   ClientHeight = 290
@@ -19,7 +20,7 @@ inherited EvaluateDlg: TEvaluateDlg
     Left = 6
     Height = 14
     Top = 47
-    Width = 57
+    Width = 72
     BorderSpacing.Left = 6
     BorderSpacing.Top = 3
     Caption = '&Expression:'
@@ -32,8 +33,8 @@ inherited EvaluateDlg: TEvaluateDlg
     AnchorSideTop.Side = asrBottom
     Left = 6
     Height = 14
-    Top = 91
-    Width = 35
+    Top = 93
+    Width = 47
     BorderSpacing.Left = 6
     BorderSpacing.Top = 6
     Caption = '&Result:'
@@ -45,8 +46,8 @@ inherited EvaluateDlg: TEvaluateDlg
     AnchorSideBottom.Control = cmbNewValue
     Left = 6
     Height = 14
-    Top = 246
-    Width = 55
+    Top = 244
+    Width = 69
     Anchors = [akLeft, akBottom]
     BorderSpacing.Left = 6
     BorderSpacing.Bottom = 3
@@ -69,7 +70,7 @@ inherited EvaluateDlg: TEvaluateDlg
     TabOrder = 0
     TabStop = True
     object tbInspect: TToolButton
-      Left = 152
+      Left = 156
       Top = 2
       Caption = '&Inspect'
       Enabled = False
@@ -77,7 +78,7 @@ inherited EvaluateDlg: TEvaluateDlg
       OnClick = tbInspectClick
     end
     object tbWatch: TToolButton
-      Left = 102
+      Left = 106
       Top = 2
       AllowAllUp = True
       Caption = '&Watch'
@@ -86,11 +87,12 @@ inherited EvaluateDlg: TEvaluateDlg
       OnClick = tbWatchClick
     end
     object tbModify: TToolButton
-      Left = 52
+      Left = 56
       Top = 2
       Caption = '&Modify'
       Enabled = False
       ImageIndex = 1
+      OnClick = tbModifyClick
     end
     object tbEvaluate: TToolButton
       Left = 2
@@ -108,14 +110,14 @@ inherited EvaluateDlg: TEvaluateDlg
     AnchorSideRight.Control = Owner
     AnchorSideRight.Side = asrBottom
     Left = 6
-    Height = 21
+    Height = 23
     Top = 64
     Width = 388
     Anchors = [akTop, akLeft, akRight]
     BorderSpacing.Left = 6
     BorderSpacing.Top = 3
     BorderSpacing.Right = 6
-    ItemHeight = 13
+    ItemHeight = 0
     OnChange = cmbExpressionChange
     OnKeyDown = cmbExpressionKeyDown
     TabOrder = 2
@@ -128,8 +130,8 @@ inherited EvaluateDlg: TEvaluateDlg
     AnchorSideRight.Side = asrBottom
     AnchorSideBottom.Control = lblNewValue
     Left = 6
-    Height = 132
-    Top = 108
+    Height = 128
+    Top = 110
     Width = 388
     Anchors = [akTop, akLeft, akRight, akBottom]
     BorderSpacing.Left = 6
@@ -146,14 +148,15 @@ inherited EvaluateDlg: TEvaluateDlg
     AnchorSideBottom.Control = Owner
     AnchorSideBottom.Side = asrBottom
     Left = 6
-    Height = 21
-    Top = 263
+    Height = 23
+    Top = 261
     Width = 388
     Anchors = [akLeft, akRight, akBottom]
     BorderSpacing.Left = 6
     BorderSpacing.Right = 6
     BorderSpacing.Bottom = 6
-    ItemHeight = 13
+    ItemHeight = 0
+    OnKeyDown = cmbNewValueKeyDown
     TabOrder = 3
   end
 end
diff --git a/debugger/evaluatedlg.pp b/debugger/evaluatedlg.pp
--- a/debugger/evaluatedlg.pp
+++ b/debugger/evaluatedlg.pp
@@ -56,6 +56,8 @@ type
     tbWatch: TToolButton;
     tbModify: TToolButton;
     tbEvaluate: TToolButton;
+    procedure cmbNewValueKeyDown(Sender: TObject; var Key: Word;
+      Shift: TShiftState);
     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
     procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
     procedure FormShow(Sender: TObject);
@@ -64,6 +66,7 @@ type
       Shift: TShiftState);
     procedure tbEvaluateClick(Sender: TObject);
     procedure tbInspectClick(Sender: TObject);
+    procedure tbModifyClick(Sender: TObject);
     procedure tbWatchClick(Sender: TObject);
     
   private
@@ -111,7 +114,7 @@ var
 begin
   HasExpression := Trim(cmbExpression.Text) <> '';
   tbEvaluate.Enabled := HasExpression;
-  tbModify.Enabled := False;
+  tbModify.Enabled := HasExpression;
   tbWatch.Enabled := HasExpression;
   tbInspect.Enabled := HasExpression;
 end;
@@ -149,6 +152,13 @@ begin
   IDEDialogLayoutList.SaveLayout(Self);
 end;
 
+procedure TEvaluateDlg.cmbNewValueKeyDown(Sender: TObject; var Key: Word;
+  Shift: TShiftState);
+begin
+  if (Key = VK_RETURN) and (tbModify.Enabled) then
+    tbModify.Click;
+end;
+
 procedure TEvaluateDlg.FormShow(Sender: TObject);
 begin
   cmbExpression.SetFocus;
@@ -173,8 +183,10 @@ begin
   then begin
     if cmbExpression.Items.IndexOf(S) = -1
     then cmbExpression.Items.Insert(0, S);
-//    tbModify.Enabled := True;
-  end;
+    tbModify.Enabled := True;
+  end
+  else
+    tbModify.Enabled := False;
   FreeAndNil(DBGType);
   txtResult.Lines.Text := R;
 end;
@@ -184,6 +196,21 @@ begin
   DebugBoss.Inspect(cmbExpression.Text);
 end;
 
+procedure TEvaluateDlg.tbModifyClick(Sender: TObject);
+var
+  R: String;
+  DBGType: TDBGType;
+begin
+  DBGType:=nil;
+  if (Trim(cmbExpression.Text) <> '')
+    and DebugBoss.Modify(cmbExpression.Text, cmbNewValue.Text)
+    and DebugBoss.Evaluate(cmbExpression.Text, R, DBGType) then
+  begin
+    FreeAndNil(DBGType);
+    txtResult.Lines.Text := R;
+  end
+end;
+
 procedure TEvaluateDlg.tbWatchClick(Sender: TObject);
 var
   S: String;
diff --git a/debugger/gdbmidebugger.pp b/debugger/gdbmidebugger.pp
--- a/debugger/gdbmidebugger.pp
+++ b/debugger/gdbmidebugger.pp
@@ -63,7 +63,7 @@ type
   );
 
   TGDBMIResultFlags = set of (
-    rfNoMI         // flag is set if the output is not MI fomatted
+    rfNoMI         // flag is set if the output is not MI formatted
                    // some MI functions return normal output
                    // some normal functions return MI output
   );
@@ -139,6 +139,7 @@ type
     // Implementation of external functions
     function  GDBEnvironment(const AVariable: String; const ASet: Boolean): Boolean;
     function  GDBEvaluate(const AExpression: String; var AResult: String; out ATypeInfo: TGDBType): Boolean;
+    function  GDBModify(const AExpression, ANewValue: String): Boolean;
     function  GDBRun: Boolean;
     function  GDBPause(const AInternal: Boolean): Boolean;
     function  GDBStop: Boolean;
@@ -2656,6 +2657,11 @@ begin
   AResult := FormatResult(AResult);
 end;
 
+function TGDBMIDebugger.GDBModify(const AExpression, ANewValue: String): Boolean;
+begin
+  Result := ExecuteCommand('set var %s := %s', [AExpression, ANewValue], [cfIgnoreError, cfExternal, cfNoMiCommand]);
+end;
+
 function TGDBMIDebugger.GDBJumpTo(const ASource: String; const ALine: Integer): Boolean;
 begin
   Result := False;
@@ -3804,6 +3810,7 @@ begin
     dcRunTo:       Result := GDBRunTo(String(AParams[0].VAnsiString), AParams[1].VInteger);
     dcJumpto:      Result := GDBJumpTo(String(AParams[0].VAnsiString), AParams[1].VInteger);
     dcEvaluate:    Result := GDBEvaluate(String(AParams[0].VAnsiString), String(AParams[1].VPointer^),TGDBType(AParams[2].VPointer^));
+    dcModify:      Result := GDBModify(String(AParams[0].VAnsiString), String(AParams[1].VAnsiString));
     dcEnvironment: Result := GDBEnvironment(String(AParams[0].VAnsiString), AParams[1].VBoolean);
     dcDisassemble: Result := GDBDisassemble(AParams[0].VQWord^, AParams[1].VBoolean, TDbgPtr(AParams[2].VPointer^),
                                             String(AParams[3].VPointer^), String(AParams[4].VPointer^),
diff --git a/ide/basedebugmanager.pas b/ide/basedebugmanager.pas
--- a/ide/basedebugmanager.pas
+++ b/ide/basedebugmanager.pas
@@ -117,6 +117,7 @@ type
 
     function Evaluate(const AExpression: String; var AResult: String;
                      var ATypeInfo: TDBGType): Boolean; virtual; abstract; // Evaluates the given expression, returns true if valid
+    function Modify(const AExpression: String; const ANewValue: String): Boolean; virtual; abstract; // Modify the given expression, returns true if valid
 
     function GetFullFilename(var Filename: string; AskUserIfNotFound: Boolean): Boolean; virtual; abstract;
     procedure Inspect(const AExpression: String); virtual; abstract;
diff --git a/ide/debugmanager.pas b/ide/debugmanager.pas
--- a/ide/debugmanager.pas
+++ b/ide/debugmanager.pas
@@ -174,6 +174,7 @@ type
     procedure EndDebugging; override;
     function Evaluate(const AExpression: String; var AResult: String;
                      var ATypeInfo: TDBGType): Boolean; override;
+    function Modify(const AExpression, ANewValue: String): Boolean; override;
 
     procedure Inspect(const AExpression: String); override;
 
@@ -2485,6 +2486,15 @@ begin
         and FDebugger.Evaluate(AExpression, AResult, ATypeInfo)
 end;
 
+function TDebugManager.Modify(const AExpression, ANewValue: String): Boolean;
+begin
+  Result := (not Destroying)
+        and (MainIDE.ToolStatus = itDebugger)
+        and (FDebugger <> nil)
+        and (dcModify in FDebugger.Commands)
+        and FDebugger.Modify(AExpression, ANewValue)
+end;
+
 procedure TDebugManager.Inspect(const AExpression: String);
 begin
   if Destroying then Exit;
GdbModifyValue_r23772_v2.patch (9,708 bytes)   

Flávio Etrusco

2010-02-24 07:10

developer   ~0034720

Sorry, it seems I missed compilation of the original patch :-/ It had a type mismatch (char vs word).
1) BTW, is it common sense in Lazarus that to handle Return, Esc, BkSpc it's better to use OnKeyDown/Up rather than OnKeyPress?
2) Shouldn't TButton.OnClick imply an automatic check for Button.Enabled?

Marc Weustink

2010-03-07 19:38

administrator   ~0035017

Thanks

Issue History

Date Modified Username Field Change
2010-01-29 19:39 Flávio Etrusco New Issue
2010-01-29 19:39 Flávio Etrusco Status new => assigned
2010-01-29 19:39 Flávio Etrusco Assigned To => Marc Weustink
2010-01-29 19:39 Flávio Etrusco Widgetset => GTK, GTK 2, Win32/Win64, WinCE, Carbon, QT, fpGUI
2010-02-09 03:54 Flávio Etrusco Note Added: 0034306
2010-02-09 03:59 Flávio Etrusco Note Added: 0034307
2010-02-24 06:45 Flávio Etrusco File Added: GdbModifyValue_r23772.patch
2010-02-24 06:46 Flávio Etrusco Tag Attached: gettext
2010-02-24 06:46 Flávio Etrusco Tag Attached: has_patch
2010-02-24 06:46 Flávio Etrusco Tag Attached: patch
2010-02-24 06:50 Flávio Etrusco Note Added: 0034719
2010-02-24 06:50 Flávio Etrusco Note Edited: 0034719
2010-02-24 06:51 Flávio Etrusco Note Edited: 0034719
2010-02-24 07:05 Flávio Etrusco File Added: GdbModifyValue_r23772_v2.patch
2010-02-24 07:10 Flávio Etrusco Note Added: 0034720
2010-03-07 19:38 Marc Weustink Fixed in Revision => 23866
2010-03-07 19:38 Marc Weustink LazTarget => -
2010-03-07 19:38 Marc Weustink Status assigned => resolved
2010-03-07 19:38 Marc Weustink Fixed in Version => 0.9.29 (SVN)
2010-03-07 19:38 Marc Weustink Resolution open => fixed
2010-03-07 19:38 Marc Weustink Note Added: 0035017
2010-03-30 10:15 Flávio Etrusco Status resolved => closed