[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