Skip to content

Commit 648d31a

Browse files
FIX: Crash on renamedialog, if other files in folder where moved
1 parent 3ed61ba commit 648d31a

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

src/unit1.pas

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@
105105
(* ADD: REST Server *)
106106
(* FIX: did not refresh folder if subfolder was deleted *)
107107
(* FIX: copying empty subfolders did not work *)
108+
(* FIX: crash, when a file in folder is deleted while a *)
109+
(* file is renamed that is "later" in that folder *)
108110
(* *)
109111
(******************************************************************************)
110112
(* Silk icon set 1.3 used *)
@@ -1117,12 +1119,18 @@
11171119
End;
11181120
// F2 = Rename
11191121
If key = VK_F2 Then Begin
1122+
{$IFDEF Linux}
1123+
// Löscht man den Key nicht, dann kommt bei einer "Händischen" Eingabe der Dialog doppelt, da scheint wohl was mit der Key weiterleitung im Argen zu sein.
1124+
key := 0;
1125+
{$ENDIF}
11201126
w := '';
1121-
For i := 0 To aListview.Items.Count - 1 Do Begin
1127+
i := 0;
1128+
While i < aListview.Items.Count Do Begin
11221129
If aListview.Items[i].Selected Then Begin
11231130
aListview.Items[i].Selected := false;
11241131
If aListview.Items[i].Caption = '[..]' Then Continue;
11251132
s := aListview.Items[i].caption;
1133+
u := s;
11261134
If pos('(', aListview.Items[i].SubItems[SubItemIndexSize]) = 1 Then Begin
11271135
// Hier wird ein Verzeichnis umbenannt -> Muss nichts weiter gemacht werden.
11281136
End
@@ -1136,6 +1144,15 @@
11361144
* Anscheinend gibt es kein RenameDirectory das geht auch so ..
11371145
*)
11381146
If RenameFileUTF8(aView^.aDirectory + s, aView^.aDirectory + t) Then Begin
1147+
// Wir müssen den Eintrag erneut suchen, da die Inputbox "Zeit" verbraucht in der sich die Listview z.B. durch einen Löschjob ändern kann
1148+
i := aListview.Items.Count;
1149+
For j := 0 To aListview.Items.Count - 1 Do Begin
1150+
If aListview.Items[j].caption = u Then Begin
1151+
i := j;
1152+
break;
1153+
End;
1154+
End;
1155+
If i = aListview.Items.Count Then exit; // Der Eintag konnte nicht mehr gefunden werden -> Abbruch
11391156
If pos('(', aListview.Items[i].SubItems[SubItemIndexSize]) = 1 Then Begin
11401157
// Hier wird ein Verzeichnis umbenannt
11411158
aListview.Items[i].caption := t;
@@ -1151,6 +1168,7 @@
11511168
End;
11521169
End;
11531170
End;
1171+
inc(i);
11541172
End;
11551173
// Es wurde etwas umbenannt -> Die Verzeichnisse müssen neu geladen werden
11561174
If w <> '' Then Begin

0 commit comments

Comments
 (0)