fixed potential crash bug with empty (padding) element buttons in editor
[rocksndiamonds.git] / src / editor.c
index c993b6ea5803e052b90f3a1fb037dff3cf60e0e1..9396d5eff13053a7a27003c8b14be530745224c0 100644 (file)
@@ -7146,7 +7146,10 @@ void CreateLevelEditorGadgets(void)
   right_gadget_border =
     checked_calloc(num_editor_gadgets * sizeof(int));
 
-  editor_el_empty = checked_calloc(ED_NUM_ELEMENTLIST_BUTTONS * sizeof(int));
+  // set number of empty (padding) element buttons to maximum number of buttons
+  num_editor_el_empty = ED_NUM_ELEMENTLIST_BUTTONS;
+
+  editor_el_empty = checked_calloc(num_editor_el_empty * sizeof(int));
   editor_el_empty_ptr = editor_el_empty;
 
   use_permanent_palette = !editor.palette.show_as_separate_screen;
@@ -12376,6 +12379,8 @@ static int DrawLevelText(int sx, int sy, char letter, int mode)
     case TEXT_SETCURSOR:
       DrawEditorElement(last_sx, last_sy, Feld[lx][ly]);
       DrawAreaBorder(sx, sy, sx, sy);
+      StartTextInput(SX + sx * ed_tilesize, SY + sy * ed_tilesize,
+                    ed_tilesize, ed_tilesize);
       last_sx = sx;
       last_sy = sy;
       break;
@@ -12411,7 +12416,7 @@ static int DrawLevelText(int sx, int sy, char letter, int mode)
       break;
 
     case TEXT_NEWLINE:
-      if (sy + 1 < ed_fieldy - 1 && ly + 1 < lev_fieldy - 1)
+      if (sy + 1 < ed_fieldy && ly + 1 < lev_fieldy)
        DrawLevelText(start_sx, sy + 1, 0, TEXT_SETCURSOR);
       else
        DrawLevelText(0, 0, 0, TEXT_END);
@@ -12420,6 +12425,7 @@ static int DrawLevelText(int sx, int sy, char letter, int mode)
     case TEXT_END:
       CopyLevelToUndoBuffer(UNDO_IMMEDIATE);
       DrawEditorElement(sx, sy, Feld[lx][ly]);
+      StopTextInput();
       typing = FALSE;
       break;