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 */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to