Fixes for GPencil Copy and Paste

* Fix "Attempt to free NULL pointer" when copying strokes for the first time

* Fix poll callback on "paste" operator, so that it is possible to paste
  strokes when there are no editable strokes visible.
This commit is contained in:
Joshua Leung 2016-05-09 19:41:48 +12:00
parent d6555d936c
commit 3ce3163379
1 changed files with 13 additions and 4 deletions

View File

@ -296,12 +296,13 @@ void ED_gpencil_strokes_copybuf_free(void)
for (gps = gp_strokes_copypastebuf.first; gps; gps = gpsn) {
gpsn = gps->next;
MEM_freeN(gps->points);
MEM_freeN(gps->triangles);
if (gps->points) MEM_freeN(gps->points);
if (gps->triangles) MEM_freeN(gps->triangles);
BLI_freelinkN(&gp_strokes_copypastebuf, gps);
}
BLI_listbase_clear(&gp_strokes_copypastebuf);
gp_strokes_copypastebuf.first = gp_strokes_copypastebuf.last = NULL;
}
/* --------------------- */
@ -386,6 +387,14 @@ void GPENCIL_OT_copy(wmOperatorType *ot)
/* --------------------- */
/* Paste selected strokes */
static int gp_strokes_paste_poll(bContext *C)
{
/* 1) Must have GP layer to paste to...
* 2) Copy buffer must at least have something (though it may be the wrong sort...)
*/
return (CTX_data_active_gpencil_layer(C) != NULL) && (!BLI_listbase_is_empty(&gp_strokes_copypastebuf));
}
static int gp_strokes_paste_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
@ -490,7 +499,7 @@ void GPENCIL_OT_paste(wmOperatorType *ot)
/* callbacks */
ot->exec = gp_strokes_paste_exec;
ot->poll = gp_stroke_edit_poll;
ot->poll = gp_strokes_paste_poll;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;