Freeing the cutbuffer after use.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5055 35c25a1d-7b9e-4130-9fde-d3aeb78583b8master
parent
92213f9de8
commit
637b76b582
|
@ -1,8 +1,10 @@
|
||||||
2014-07-02 Mark Majeres <mark@engine12.com>
|
2014-07-02 Mark Majeres <mark@engine12.com>
|
||||||
* src/text.c (undo_cut, redo_cut, update_undo): Handle the
|
* src/text.c (undo_cut, redo_cut, update_undo): Handle the
|
||||||
cases of cutting-from-cursor-to-end-of-line properly.
|
cases of cutting-from-cursor-to-end-of-line correctly.
|
||||||
* src/nano.c (do_input): Don't preserve the cutbuffer when
|
* src/nano.c (do_input): Don't preserve the cutbuffer when
|
||||||
CUT_TO_END is toggled -- it would intermix two cut types.
|
CUT_TO_END is toggled -- it would intermix two cut types.
|
||||||
|
* src/text.c (redo_cut, do_undo, do_redo): Don't forget to
|
||||||
|
free the cutbuffer after use.
|
||||||
|
|
||||||
2014-07-02 Benno Schulenberg <bensberg@justemail.net>
|
2014-07-02 Benno Schulenberg <bensberg@justemail.net>
|
||||||
* src/proto.h: Add a typedef for a pointer to a function.
|
* src/proto.h: Add a typedef for a pointer to a function.
|
||||||
|
|
14
src/text.c
14
src/text.c
|
@ -399,6 +399,10 @@ void redo_cut(undo *u)
|
||||||
if (!u->cutbuffer)
|
if (!u->cutbuffer)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
filestruct *oldcutbuffer = cutbuffer, *oldcutbottom = cutbottom;
|
||||||
|
cutbuffer = NULL;
|
||||||
|
cutbottom = NULL;
|
||||||
|
|
||||||
goto_line_posx(u->lineno, u->begin);
|
goto_line_posx(u->lineno, u->begin);
|
||||||
|
|
||||||
if (ISSET(NO_NEWLINES) && openfile->current->lineno != u->lineno) {
|
if (ISSET(NO_NEWLINES) && openfile->current->lineno != u->lineno) {
|
||||||
|
@ -416,6 +420,11 @@ void redo_cut(undo *u)
|
||||||
openfile->mark_begin = NULL;
|
openfile->mark_begin = NULL;
|
||||||
openfile->mark_begin_x = 0;
|
openfile->mark_begin_x = 0;
|
||||||
edit_refresh_needed = TRUE;
|
edit_refresh_needed = TRUE;
|
||||||
|
|
||||||
|
if (cutbuffer != NULL)
|
||||||
|
free_filestruct(cutbuffer);
|
||||||
|
cutbuffer = oldcutbuffer;
|
||||||
|
cutbottom = oldcutbottom;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Undo the last thing(s) we did. */
|
/* Undo the last thing(s) we did. */
|
||||||
|
@ -525,6 +534,8 @@ void do_undo(void)
|
||||||
openfile->mark_set = TRUE;
|
openfile->mark_set = TRUE;
|
||||||
goto_line_posx(u->lineno, u->begin);
|
goto_line_posx(u->lineno, u->begin);
|
||||||
cut_marked();
|
cut_marked();
|
||||||
|
if (u->cutbuffer != NULL)
|
||||||
|
free_filestruct(u->cutbuffer);
|
||||||
u->cutbuffer = cutbuffer;
|
u->cutbuffer = cutbuffer;
|
||||||
u->cutbottom = cutbottom;
|
u->cutbottom = cutbottom;
|
||||||
cutbuffer = oldcutbuffer;
|
cutbuffer = oldcutbuffer;
|
||||||
|
@ -656,6 +667,8 @@ void do_redo(void)
|
||||||
redidmsg = _("text insert");
|
redidmsg = _("text insert");
|
||||||
goto_line_posx(u->lineno, u->begin);
|
goto_line_posx(u->lineno, u->begin);
|
||||||
copy_from_filestruct(u->cutbuffer);
|
copy_from_filestruct(u->cutbuffer);
|
||||||
|
free_filestruct(u->cutbuffer);
|
||||||
|
u->cutbuffer = NULL;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
redidmsg = _("Internal error: unknown type. Please save your work.");
|
redidmsg = _("Internal error: unknown type. Please save your work.");
|
||||||
|
@ -924,6 +937,7 @@ void add_undo(undo_type current_action)
|
||||||
break;
|
break;
|
||||||
#endif /* !DISABLE_WRAPPING */
|
#endif /* !DISABLE_WRAPPING */
|
||||||
case INSERT:
|
case INSERT:
|
||||||
|
break;
|
||||||
case REPLACE:
|
case REPLACE:
|
||||||
data = mallocstrcpy(NULL, fs->current->data);
|
data = mallocstrcpy(NULL, fs->current->data);
|
||||||
u->strdata = data;
|
u->strdata = data;
|
||||||
|
|
Loading…
Reference in New Issue