[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49599] trunk/blender/source/blender: prevent copy/paste from incompatible types (compo -> material for eg) - would crash instantly.

Campbell Barton ideasman42 at gmail.com
Mon Aug 6 10:41:45 CEST 2012


Revision: 49599
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49599
Author:   campbellbarton
Date:     2012-08-06 08:41:45 +0000 (Mon, 06 Aug 2012)
Log Message:
-----------
prevent copy/paste from incompatible types (compo -> material for eg) - would crash instantly.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/editors/space_node/node_edit.c

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h	2012-08-06 08:25:24 UTC (rev 49598)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h	2012-08-06 08:41:45 UTC (rev 49599)
@@ -386,11 +386,13 @@
 void            nodeSocketSetType(struct bNodeSocket *sock, int type);
 
 /* Node Clipboard */
-void BKE_node_clipboard_clear(void);
-void BKE_node_clipboard_add_node(struct bNode *node);
-void BKE_node_clipboard_add_link(struct bNodeLink *link);
+void                   BKE_node_clipboard_init(struct bNodeTree *ntree);
+void                   BKE_node_clipboard_clear(void);
+void                   BKE_node_clipboard_add_node(struct bNode *node);
+void                   BKE_node_clipboard_add_link(struct bNodeLink *link);
 const struct ListBase *BKE_node_clipboard_get_nodes(void);
 const struct ListBase *BKE_node_clipboard_get_links(void);
+int                    BKE_node_clipboard_get_type(void);
 
 /* ************** NODE TYPE ACCESS *************** */
 

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2012-08-06 08:25:24 UTC (rev 49598)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2012-08-06 08:41:45 UTC (rev 49599)
@@ -1428,10 +1428,16 @@
 typedef struct bNodeClipboard {
 	ListBase nodes;
 	ListBase links;
+	int type;
 } bNodeClipboard;
 
 bNodeClipboard node_clipboard;
 
+void BKE_node_clipboard_init(struct bNodeTree *ntree)
+{
+	node_clipboard.type = ntree->type;
+}
+
 void BKE_node_clipboard_clear(void)
 {
 	bNode *node, *node_next;
@@ -1470,6 +1476,11 @@
 	return &node_clipboard.links;
 }
 
+int BKE_node_clipboard_get_type(void)
+{
+	return node_clipboard.type;
+}
+
 /* ************** dependency stuff *********** */
 
 /* node is guaranteed to be not checked before */

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c	2012-08-06 08:25:24 UTC (rev 49598)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c	2012-08-06 08:41:45 UTC (rev 49599)
@@ -46,9 +46,10 @@
 #include "BKE_image.h"
 #include "BKE_library.h"
 #include "BKE_main.h"
+#include "BKE_material.h"
 #include "BKE_node.h"
-#include "BKE_material.h"
 #include "BKE_paint.h"
+#include "BKE_report.h"
 #include "BKE_scene.h"
 #include "BKE_texture.h"
 
@@ -1918,6 +1919,7 @@
 
 	/* clear current clipboard */
 	BKE_node_clipboard_clear();
+	BKE_node_clipboard_init(ntree);
 
 	/* get group node offset */
 	if (gnode)
@@ -1992,7 +1994,7 @@
 
 /* ****************** Paste from clipboard ******************* */
 
-static int node_clipboard_paste_exec(bContext *C, wmOperator *UNUSED(op))
+static int node_clipboard_paste_exec(bContext *C, wmOperator *op)
 {
 	SpaceNode *snode = CTX_wm_space_node(C);
 	bNodeTree *ntree = snode->edittree;
@@ -2003,6 +2005,11 @@
 	int num_nodes;
 	float centerx, centery;
 
+	if (BKE_node_clipboard_get_type() != ntree->type) {
+		BKE_report(op->reports, RPT_ERROR, "Clipboard nodes are an incompatible type");
+		return OPERATOR_CANCELLED;
+	}
+
 	ED_preview_kill_jobs(C);
 
 	/* deselect old nodes */




More information about the Bf-blender-cvs mailing list