Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Leung <aligorith@gmail.com>2016-05-09 10:41:48 +0300
committerJoshua Leung <aligorith@gmail.com>2016-05-09 10:42:34 +0300
commit3ce31633796cd1139cff96eaa4697d6d6f8ba10e (patch)
tree864dc4c3930c01460ee25faa3ee02b532d1693c8 /source/blender
parentd6555d936cb15c3d64836ca1446bfc7b065b4aa0 (diff)
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.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/gpencil/gpencil_edit.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c
index 8e0a83d4f29..bd1697b9a54 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -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;