View Issue Details

IDProjectCategoryView StatusLast Update
0023219LazarusWidgetsetpublic2012-12-27 09:58
ReporterFabrizio Fellini Assigned ToZeljan Rikalo  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Product Version1.0.3 (SVN) 
Summary0023219: TEdit component loses SelStart and SelLength values
DescriptionA TEdit, with AutoSelect=False and text partially or totally selected, loses sometimes SelStart and always SelLength values when I change focus using the keyboard (Tab key or other methods).
In the test application, when Edit1 loses the focus, I save Edit1.SelStart in Label1.Caption, and Edit1.SelLength in Label2.Caption. Pressing the Tab key 3 times, SelStart value becomes from 1 to 4, and SelLength from 3 to 0.
Under Windows widgetset, changing the focus repeatedly, values remain always 1 and 3.
Additional InformationIf I select text using "Shift + Left Arrow", only SelLength is reset, while SelStart retains its value.
TagsNo tags attached.
Fixed in Revision39217,39652
LazTarget-
WidgetsetGTK 2
Attached Files

Relationships

related to 0023182 closedZeljan Rikalo TEdit component loses cursor position 
related to 0018164 closedZeljan Rikalo TEdit selection 
related to 0020890 resolvedZeljan Rikalo Wrong usage of SelStart and SelLength in OnChange event 
related to 0023246 closedZeljan Rikalo IDE find dialog text not preselected, regression 

Activities

2012-10-26 21:38

 

test.zip (2,688 bytes)

Fabrizio Fellini

2012-10-26 21:43

reporter   ~0063483

This is an evolution of issue 0023182.

Fabrizio Fellini

2012-10-27 17:44

reporter   ~0063502

Last edited: 2012-10-27 19:25

Zeljko, don't hate me.

The solution of issue 0018164 also requires a new way of finding the values of SelStart and SelLenhgth, because, when a TEdit hasn't the focus, these values are both set to 0.
The right way should be:
1) when TEdit loses its focus, saving SelStart and Sellength values somewhere (WidgetInfo seems OK).
2) when the focus returns to TEdit, loading SelStart and Sellength values from where they were saved.
3) when TEdit has the focus, if a programming technique requires SelStart and Sellength values, getting them directly from GTK, as it's done now.
4) when TEdit is without the focus, if a programming technique requires SelStart and Sellength values, getting them from where they were saved (WidgetInfo).

And sorry for my bad english...

2012-11-01 01:25

 

mypatch.diff (3,893 bytes)   
Index: lcl/interfaces/gtk2/gtk2callback.inc
===================================================================
--- lcl/interfaces/gtk2/gtk2callback.inc	(revisione 39162)
+++ lcl/interfaces/gtk2/gtk2callback.inc	(copia locale)
@@ -967,13 +967,13 @@
     AInfo := GetWidgetInfo(Widget);
     if AInfo <> nil then
     begin
-      if AInfo^.CursorPos > 0 then
+      if (AInfo^.CursorPos > 0) or (AInfo^.SelLength > 0) then
       begin
         // gtk_entry_set_position(PGtkEntry(Widget), AInfo^.CursorPos);
         // gtk_editable_select_region(PGtkEditable(Widget), AInfo^.CursorPos, AInfo^.CursorPos);
         // do not trigger signals, only update pos for lcl
         PGtkEntry(Widget)^.current_pos := AInfo^.CursorPos;
-        PGtkEntry(Widget)^.selection_bound := AInfo^.CursorPos;
+        PGtkEntry(Widget)^.selection_bound := AInfo^.CursorPos + AInfo^.SelLength;
       end;
     end;
   end;
@@ -1037,7 +1037,7 @@
 function GtkEntryDelayClearCursorPos(AGtkWidget: Pointer): GBoolean; cdecl;
 var
   Info: PWidgetInfo;
-  AStart,AEnd: gint;
+  //AStart,AEnd: gint;
 begin
   Result := AGtkWidget <> nil;
   if AGtkWidget <> nil then
@@ -1046,8 +1046,8 @@
     Info := GetWidgetInfo(AGtkWidget);
     if Info <> nil then
     begin
-      gtk_editable_get_selection_bounds(PGtkEditable(AGtkWidget),@AStart, @AEnd);
-      Info^.CursorPos := AEnd;
+      //gtk_editable_get_selection_bounds(PGtkEditable(AGtkWidget),@AStart, @AEnd);
+      //Info^.CursorPos := AEnd;
       gtk_editable_select_region(PGtkEditable(AGtkWidget), 0, 0);
     end;
   end;
@@ -1057,6 +1057,8 @@
   data: gPointer) : GBoolean; cdecl;
 var
   Mess : TLMessage;
+  Info: PWidgetInfo;
+  AStart,AEnd: gint;
 {$IFDEF VerboseFocus}
   LCLObject: TObject;
   CurFocusWidget: PGtkWidget;
@@ -1111,8 +1113,20 @@
 
   // do not show selection when widget is unfocused
   // issues #18164,#21897,#23182
-  if GtkWidgetIsA(Widget, gtk_type_entry) then
+  if GtkWidgetIsA(Widget, gtk_type_entry) then begin
     g_idle_add(@GtkEntryDelayClearCursorPos, Widget);
+    //save now CursorPos and SelStart in WidgetInfo
+    if Widget <> nil then
+    begin
+      Info := GetWidgetInfo(Widget);
+      if Info <> nil then
+      begin
+        gtk_editable_get_selection_bounds(PGtkEditable(Widget),@AStart, @AEnd);
+        Info^.CursorPos := Min(AStart, AEnd);
+        Info^.SelLength := Abs(AEnd - AStart);
+      end;
+    end;
+  end;
 
   Result:=true;
 end;
Index: lcl/interfaces/gtk2/gtk2wsstdctrls.pp
===================================================================
--- lcl/interfaces/gtk2/gtk2wsstdctrls.pp	(revisione 39162)
+++ lcl/interfaces/gtk2/gtk2wsstdctrls.pp	(copia locale)
@@ -1155,24 +1155,38 @@
   ): integer;
 var
   Entry: PGtkEntry;
+  AInfo: PWidgetInfo;
 begin
   Result := 0;
   if not WSCheckHandleAllocated(ACustomEdit, 'GetSelStart') then
     Exit;
   Entry := {%H-}PGtkEntry(ACustomEdit.Handle);
-  Result := Min(Entry^.current_pos, Entry^.selection_bound)
+  if gtk_widget_has_focus(PGtkWidget(Entry)) then
+    Result := Min(Entry^.current_pos, Entry^.selection_bound)
+  else begin
+    AInfo := GetWidgetInfo(PGtkWidget(Entry));
+    if AInfo <> nil then
+      Result := AInfo^.CursorPos;
+  end;
 end;
 
 class function TGtk2WSCustomEdit.GetSelLength(const ACustomEdit: TCustomEdit
   ): integer;
 var
   Entry: PGtkEntry;
+  AInfo: PWidgetInfo;
 begin
   Result := 0;
   if not WSCheckHandleAllocated(ACustomEdit, 'GetSelLength') then
     Exit;
   Entry := {%H-}PGtkEntry(ACustomEdit.Handle);
-  Result := ABS(Entry^.current_pos - Entry^.selection_bound);
+  if gtk_widget_has_focus(PGtkWidget(Entry)) then
+    Result := ABS(Entry^.current_pos - Entry^.selection_bound)
+  else begin
+    AInfo := GetWidgetInfo(PGtkWidget(Entry));
+    if AInfo <> nil then
+      Result := AInfo^.SelLength;
+  end;
 end;
 
 function gtk2WSDelayedSelStart(Data: Pointer): gboolean; cdecl;
mypatch.diff (3,893 bytes)   

Fabrizio Fellini

2012-11-01 01:31

reporter   ~0063588

I have created a patch that seems OK.
Zeljan, please, test it and possibly fix it wherever you want.

Zeljan Rikalo

2012-11-01 09:28

developer   ~0063592

Please test and close if ok. Are you on contributors list ?

Fabrizio Fellini

2012-11-01 12:11

reporter   ~0063597

I noticed another small problem in my test application: when application starts, Edit1 is selected from 0 to 3 rather than 1 to 4.
The reason is, when TCustomEdit.InitializeWnd calls SetSelStart and SetSelLength the first time, WidgetInfo isn't initialized.
The file "mypatch2.diff" solves this bug.

2012-11-01 12:11

 

mypatch2.diff (1,433 bytes)   
Index: lcl/interfaces/gtk2/gtk2wsstdctrls.pp
===================================================================
--- lcl/interfaces/gtk2/gtk2wsstdctrls.pp	(revisione 39217)
+++ lcl/interfaces/gtk2/gtk2wsstdctrls.pp	(copia locale)
@@ -1294,10 +1294,10 @@
     NewPos := Min(NewStart, Entry^.text_max_length)
   else
     NewPos := Min(NewStart, Entry^.text_length);
+  WidgetInfo := GetWidgetInfo(Entry);
+  WidgetInfo^.CursorPos := NewPos;
   if LockOnChange(PgtkObject(Entry),0) > 0 then
   begin
-    WidgetInfo := GetWidgetInfo(Entry);
-    WidgetInfo^.CursorPos := NewPos;
     // postpone
     g_idle_add(@gtk2WSDelayedSelStart, WidgetInfo);
   end else
@@ -1316,15 +1316,14 @@
   Entry := {%H-}PGtkEntry(ACustomEdit.Handle);
   SelStart := GetSelStart(ACustomEdit);
 
+  WidgetInfo := GetWidgetInfo(Entry);
+  if WidgetInfo^.CursorPos = 0 then
+    WidgetInfo^.CursorPos := SelStart;
+  WidgetInfo^.SelLength := NewLength;
   if LockOnChange(PgtkObject(Entry),0) > 0 then
-  begin
     // delay setting of selection length. issue #20890
-    WidgetInfo := GetWidgetInfo(Entry);
-    if WidgetInfo^.CursorPos = 0 then
-      WidgetInfo^.CursorPos := SelStart;
-    WidgetInfo^.SelLength := SelStart + NewLength;
-    g_idle_add(@gtk2WSDelayedSetSelLength, WidgetInfo);
-  end else
+    g_idle_add(@gtk2WSDelayedSetSelLength, WidgetInfo)
+  else
     gtk_entry_select_region(Entry,
       SelStart,
       SelStart + NewLength);
mypatch2.diff (1,433 bytes)   

Fabrizio Fellini

2012-11-01 12:13

reporter   ~0063598

I'm already on contributors list.

2012-11-01 12:28

 

mypatch3.diff (1,727 bytes)   
Index: lcl/interfaces/gtk2/gtk2wsstdctrls.pp
===================================================================
--- lcl/interfaces/gtk2/gtk2wsstdctrls.pp	(revisione 39217)
+++ lcl/interfaces/gtk2/gtk2wsstdctrls.pp	(copia locale)
@@ -1207,7 +1207,7 @@
   Entry := PGtkEntry(PWidgetInfo(Data)^.CoreWidget);
   gtk_entry_select_region(Entry,
       PWidgetInfo(Data)^.CursorPos,
-      PWidgetInfo(Data)^.SelLength);
+      PWidgetInfo(Data)^.CursorPos + PWidgetInfo(Data)^.SelLength);
   g_idle_remove_by_data(Data);
 end;
 
@@ -1294,10 +1294,10 @@
     NewPos := Min(NewStart, Entry^.text_max_length)
   else
     NewPos := Min(NewStart, Entry^.text_length);
+  WidgetInfo := GetWidgetInfo(Entry);
+  WidgetInfo^.CursorPos := NewPos;
   if LockOnChange(PgtkObject(Entry),0) > 0 then
   begin
-    WidgetInfo := GetWidgetInfo(Entry);
-    WidgetInfo^.CursorPos := NewPos;
     // postpone
     g_idle_add(@gtk2WSDelayedSelStart, WidgetInfo);
   end else
@@ -1316,15 +1316,14 @@
   Entry := {%H-}PGtkEntry(ACustomEdit.Handle);
   SelStart := GetSelStart(ACustomEdit);
 
+  WidgetInfo := GetWidgetInfo(Entry);
+  if WidgetInfo^.CursorPos = 0 then
+    WidgetInfo^.CursorPos := SelStart;
+  WidgetInfo^.SelLength := NewLength;
   if LockOnChange(PgtkObject(Entry),0) > 0 then
-  begin
     // delay setting of selection length. issue #20890
-    WidgetInfo := GetWidgetInfo(Entry);
-    if WidgetInfo^.CursorPos = 0 then
-      WidgetInfo^.CursorPos := SelStart;
-    WidgetInfo^.SelLength := SelStart + NewLength;
-    g_idle_add(@gtk2WSDelayedSetSelLength, WidgetInfo);
-  end else
+    g_idle_add(@gtk2WSDelayedSetSelLength, WidgetInfo)
+  else
     gtk_entry_select_region(Entry,
       SelStart,
       SelStart + NewLength);
mypatch3.diff (1,727 bytes)   

Fabrizio Fellini

2012-11-01 12:33

reporter   ~0063602

Sorry, I forgot to modify gtk2WSDelayedSetSelLength: mypatch3.diff should be OK, but Zeljan, you'd better check it.

Zeljan Rikalo

2012-11-01 14:13

developer   ~0063608

Can you test against 0020890 example (with patch 3 applied) ? I'm afraid of regression.

Fabrizio Fellini

2012-11-01 17:20

reporter   ~0063612

Last edited: 2012-11-01 17:23

I inserted this code in Edit2Change:

  Edit2.Text := 'ABCDEF';
  Edit2.SelStart := 1;
  Edit2.SelLength := Length (Edit2.Text);

The result: when I press any key and focus is on Edit2, Text become "ABCDEF" (before text was "Edit2"), SelStart is is position 2 and SelLength is 0.
I didn't verify SelStart and SelLength values: this is what I see, that is cursor is blinking between "B" and "C".
If I press a key a second time, SelStart is in position 1 and SelLength is 5 (text is selected from "B" to the end).

If I put a breakpoint on the first line of gtk2WSDelayedSetSelLength, then:
first time: breakpoint doesn't stop program;
second time: breakpoint stops program.

2012-11-02 01:01

 

mypatch4.diff (2,648 bytes)   
Index: lcl/interfaces/gtk2/gtk2callback.inc
===================================================================
--- lcl/interfaces/gtk2/gtk2callback.inc	(revisione 39217)
+++ lcl/interfaces/gtk2/gtk2callback.inc	(copia locale)
@@ -428,6 +428,7 @@
   NeedCursorCheck := False;
   if GTK_IS_ENTRY(Widget) then
   begin
+    NeedCursorCheck := True;
     // lcl-do-not-change-selection comes from gtkKeyPress.
     // Only floatspinedit sets that data, so default is nil. issue #18679
     if g_object_get_data(PGObject(Widget),'lcl-do-not-change-selection') = nil then
@@ -463,7 +464,7 @@
             gtk_editable_set_position(PGtkEditable(Widget), GStart);
           end else
           begin
-            NeedCursorCheck := True;
+            //NeedCursorCheck := True;
             if gtk_minor_version < 17 then
             begin
               g_object_set_data(PGObject(Widget),'lcl-gtkentry-pasted-data',Widget);
Index: lcl/interfaces/gtk2/gtk2wsstdctrls.pp
===================================================================
--- lcl/interfaces/gtk2/gtk2wsstdctrls.pp	(revisione 39217)
+++ lcl/interfaces/gtk2/gtk2wsstdctrls.pp	(copia locale)
@@ -1207,7 +1207,7 @@
   Entry := PGtkEntry(PWidgetInfo(Data)^.CoreWidget);
   gtk_entry_select_region(Entry,
       PWidgetInfo(Data)^.CursorPos,
-      PWidgetInfo(Data)^.SelLength);
+      PWidgetInfo(Data)^.CursorPos + PWidgetInfo(Data)^.SelLength);
   g_idle_remove_by_data(Data);
 end;
 
@@ -1294,10 +1294,10 @@
     NewPos := Min(NewStart, Entry^.text_max_length)
   else
     NewPos := Min(NewStart, Entry^.text_length);
+  WidgetInfo := GetWidgetInfo(Entry);
+  WidgetInfo^.CursorPos := NewPos;
   if LockOnChange(PgtkObject(Entry),0) > 0 then
   begin
-    WidgetInfo := GetWidgetInfo(Entry);
-    WidgetInfo^.CursorPos := NewPos;
     // postpone
     g_idle_add(@gtk2WSDelayedSelStart, WidgetInfo);
   end else
@@ -1316,15 +1316,14 @@
   Entry := {%H-}PGtkEntry(ACustomEdit.Handle);
   SelStart := GetSelStart(ACustomEdit);
 
+  WidgetInfo := GetWidgetInfo(Entry);
+  if WidgetInfo^.CursorPos = 0 then
+    WidgetInfo^.CursorPos := SelStart;
+  WidgetInfo^.SelLength := NewLength;
   if LockOnChange(PgtkObject(Entry),0) > 0 then
-  begin
     // delay setting of selection length. issue #20890
-    WidgetInfo := GetWidgetInfo(Entry);
-    if WidgetInfo^.CursorPos = 0 then
-      WidgetInfo^.CursorPos := SelStart;
-    WidgetInfo^.SelLength := SelStart + NewLength;
-    g_idle_add(@gtk2WSDelayedSetSelLength, WidgetInfo);
-  end else
+    g_idle_add(@gtk2WSDelayedSetSelLength, WidgetInfo)
+  else
     gtk_entry_select_region(Entry,
       SelStart,
       SelStart + NewLength);
mypatch4.diff (2,648 bytes)   

Fabrizio Fellini

2012-11-02 01:12

reporter   ~0063625

Last edited: 2012-11-02 01:18

If in "gtkchanged_editbox" I change the position of "NeedCursorCheck := True;", as in my new patch, than the code from issue 0020890 seems OK, because so "LockOnChange" can be called in the final part of the function, and also "gtk2WSDelayedSetSelLength can be called.
But Zeljan, I don't understand why "NeedCursorCheck := True;" was there rather than where I put it...

Zeljan Rikalo

2012-11-02 15:02

developer   ~0063636

@Fabrizio, why do you moved NeededCursorCheck up ? is it really needed ?
It's there so we don't call extra LM_TEXTCHANGED. See code. NeedCursorCheck := True is only when we use gtk_editable_set_position() directly (so we are using locking in that case). If we pass lcl message from delayed message it's not necessary.
So, my question is: Does your patch really needs moving of NeedCursorCheck from current position ?

Fabrizio Fellini

2012-11-02 17:05

reporter   ~0063638

Last edited: 2012-11-03 00:51

Gtk2WSDelayedSetSelLength can be called only when we are using locking.
If you read the final part of my note 63612, where I wrote about breakpoints in gtk2WSDelayedSetSelLength, you'll note that the first time, in which the breakpoint should have to work, it does not. Later, instead, it works always well.
So I moved the position of "NeedCursorCheck := True;" to ensure that gtk2WSDelayedSetSelLength was called the first time I raised the OnChange event.
If you find an alternative way to do this, so it be!

2012-11-03 00:44

 

mypatch5.diff (2,685 bytes)   
Index: lcl/interfaces/gtk2/gtk2callback.inc
===================================================================
--- lcl/interfaces/gtk2/gtk2callback.inc	(revisione 39217)
+++ lcl/interfaces/gtk2/gtk2callback.inc	(copia locale)
@@ -457,13 +457,14 @@
         begin
           // if we change selstart in OnChange event new cursor pos need to
           // be postponed in TGtk2WSCustomEdit.SetSelStart
+          NeedCursorCheck := True;
           if g_object_get_data(PGObject(Widget),'lcl-gtkentry-pasted-data') <> nil then
           begin
             g_object_set_data(PGObject(Widget),'lcl-gtkentry-pasted-data',nil);
             gtk_editable_set_position(PGtkEditable(Widget), GStart);
           end else
           begin
-            NeedCursorCheck := True;
+            //NeedCursorCheck := True;
             if gtk_minor_version < 17 then
             begin
               g_object_set_data(PGObject(Widget),'lcl-gtkentry-pasted-data',Widget);
Index: lcl/interfaces/gtk2/gtk2wsstdctrls.pp
===================================================================
--- lcl/interfaces/gtk2/gtk2wsstdctrls.pp	(revisione 39217)
+++ lcl/interfaces/gtk2/gtk2wsstdctrls.pp	(copia locale)
@@ -1207,7 +1207,7 @@
   Entry := PGtkEntry(PWidgetInfo(Data)^.CoreWidget);
   gtk_entry_select_region(Entry,
       PWidgetInfo(Data)^.CursorPos,
-      PWidgetInfo(Data)^.SelLength);
+      PWidgetInfo(Data)^.CursorPos + PWidgetInfo(Data)^.SelLength);
   g_idle_remove_by_data(Data);
 end;
 
@@ -1294,10 +1294,10 @@
     NewPos := Min(NewStart, Entry^.text_max_length)
   else
     NewPos := Min(NewStart, Entry^.text_length);
+  WidgetInfo := GetWidgetInfo(Entry);
+  WidgetInfo^.CursorPos := NewPos;
   if LockOnChange(PgtkObject(Entry),0) > 0 then
   begin
-    WidgetInfo := GetWidgetInfo(Entry);
-    WidgetInfo^.CursorPos := NewPos;
     // postpone
     g_idle_add(@gtk2WSDelayedSelStart, WidgetInfo);
   end else
@@ -1316,15 +1316,14 @@
   Entry := {%H-}PGtkEntry(ACustomEdit.Handle);
   SelStart := GetSelStart(ACustomEdit);
 
+  WidgetInfo := GetWidgetInfo(Entry);
+  if WidgetInfo^.CursorPos = 0 then
+    WidgetInfo^.CursorPos := SelStart;
+  WidgetInfo^.SelLength := NewLength;
   if LockOnChange(PgtkObject(Entry),0) > 0 then
-  begin
     // delay setting of selection length. issue #20890
-    WidgetInfo := GetWidgetInfo(Entry);
-    if WidgetInfo^.CursorPos = 0 then
-      WidgetInfo^.CursorPos := SelStart;
-    WidgetInfo^.SelLength := SelStart + NewLength;
-    g_idle_add(@gtk2WSDelayedSetSelLength, WidgetInfo);
-  end else
+    g_idle_add(@gtk2WSDelayedSetSelLength, WidgetInfo)
+  else
     gtk_entry_select_region(Entry,
       SelStart,
       SelStart + NewLength);
mypatch5.diff (2,685 bytes)   

Fabrizio Fellini

2012-11-03 00:48

reporter   ~0063647

Last edited: 2012-11-03 00:49

Maybe a better position for "NeedCursorCheck := True;" could be that one in mypatch5.diff: the test application seems OK.

Fabrizio Fellini

2012-12-23 15:10

reporter   ~0064420

Last edited: 2012-12-24 11:09

I'm testing the release 1.04 just now. I don't understand why the third patch wasn't applied. In this version, if I change SelStart value while TEdit isn't focused, the new SelStart value isn't saved in WidgetInfo, so, when focus returns to TEdit, an old value is restored rather than the new one...

Zeljan Rikalo

2012-12-25 11:25

developer   ~0064437

Please test and close if ok.

Fabrizio Fellini

2012-12-27 09:58

reporter   ~0064492

Thank you, Zeljan.

Issue History

Date Modified Username Field Change
2012-10-26 21:38 Fabrizio Fellini New Issue
2012-10-26 21:38 Fabrizio Fellini File Added: test.zip
2012-10-26 21:38 Fabrizio Fellini Widgetset => GTK 2
2012-10-26 21:43 Fabrizio Fellini Note Added: 0063483
2012-10-26 22:02 Zeljan Rikalo Status new => assigned
2012-10-26 22:02 Zeljan Rikalo Assigned To => Zeljan Rikalo
2012-10-27 17:44 Fabrizio Fellini Note Added: 0063502
2012-10-27 17:45 Fabrizio Fellini Note Edited: 0063502
2012-10-27 19:25 Fabrizio Fellini Note Edited: 0063502
2012-10-30 23:51 Juha Manninen Relationship added related to 0023182
2012-10-30 23:51 Juha Manninen Relationship added related to 0018164
2012-10-30 23:52 Juha Manninen Relationship added related to 0023246
2012-11-01 01:25 Fabrizio Fellini File Added: mypatch.diff
2012-11-01 01:31 Fabrizio Fellini Note Added: 0063588
2012-11-01 09:28 Zeljan Rikalo Fixed in Revision => 39217
2012-11-01 09:28 Zeljan Rikalo LazTarget => -
2012-11-01 09:28 Zeljan Rikalo Status assigned => resolved
2012-11-01 09:28 Zeljan Rikalo Resolution open => fixed
2012-11-01 09:28 Zeljan Rikalo Note Added: 0063592
2012-11-01 12:11 Fabrizio Fellini Status resolved => assigned
2012-11-01 12:11 Fabrizio Fellini Resolution fixed => reopened
2012-11-01 12:11 Fabrizio Fellini Note Added: 0063597
2012-11-01 12:11 Fabrizio Fellini File Added: mypatch2.diff
2012-11-01 12:13 Fabrizio Fellini Note Added: 0063598
2012-11-01 12:28 Fabrizio Fellini File Added: mypatch3.diff
2012-11-01 12:33 Fabrizio Fellini Note Added: 0063602
2012-11-01 14:12 Zeljan Rikalo Relationship added related to 0020890
2012-11-01 14:13 Zeljan Rikalo Note Added: 0063608
2012-11-01 14:13 Zeljan Rikalo Status assigned => feedback
2012-11-01 17:20 Fabrizio Fellini Note Added: 0063612
2012-11-01 17:23 Fabrizio Fellini Note Edited: 0063612
2012-11-02 01:01 Fabrizio Fellini File Added: mypatch4.diff
2012-11-02 01:12 Fabrizio Fellini Note Added: 0063625
2012-11-02 01:15 Fabrizio Fellini Note Edited: 0063625
2012-11-02 01:18 Fabrizio Fellini Note Edited: 0063625
2012-11-02 15:02 Zeljan Rikalo Note Added: 0063636
2012-11-02 15:02 Zeljan Rikalo Status feedback => acknowledged
2012-11-02 17:05 Fabrizio Fellini Note Added: 0063638
2012-11-02 17:08 Fabrizio Fellini Note Edited: 0063638
2012-11-02 17:08 Fabrizio Fellini Note Edited: 0063638
2012-11-02 17:09 Fabrizio Fellini Note Edited: 0063638
2012-11-03 00:44 Fabrizio Fellini File Added: mypatch5.diff
2012-11-03 00:48 Fabrizio Fellini Note Added: 0063647
2012-11-03 00:49 Fabrizio Fellini Note Edited: 0063647
2012-11-03 00:51 Fabrizio Fellini Note Edited: 0063638
2012-12-23 15:10 Fabrizio Fellini Note Added: 0064420
2012-12-23 15:22 Fabrizio Fellini Note Edited: 0064420
2012-12-23 17:54 Fabrizio Fellini Note Edited: 0064420
2012-12-24 11:09 Fabrizio Fellini Note Edited: 0064420
2012-12-25 11:25 Zeljan Rikalo Fixed in Revision 39217 => 39217,39652
2012-12-25 11:25 Zeljan Rikalo Status acknowledged => resolved
2012-12-25 11:25 Zeljan Rikalo Resolution reopened => fixed
2012-12-25 11:25 Zeljan Rikalo Note Added: 0064437
2012-12-27 09:58 Fabrizio Fellini Status resolved => closed
2012-12-27 09:58 Fabrizio Fellini Note Added: 0064492