prevent copy/paste from incompatible types (compo -> material for eg) - would crash instantly.
This commit is contained in:
parent
5bb97305a4
commit
df81b50bf2
@ -386,11 +386,13 @@ int nodeSocketIsHidden(struct bNodeSocket *sock);
|
||||
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 *************** */
|
||||
|
||||
|
@ -1428,10 +1428,16 @@ void nodeSocketSetType(bNodeSocket *sock, int type)
|
||||
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 @@ const ListBase *BKE_node_clipboard_get_links(void)
|
||||
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 */
|
||||
|
@ -46,9 +46,10 @@
|
||||
#include "BKE_image.h"
|
||||
#include "BKE_library.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_node.h"
|
||||
#include "BKE_material.h"
|
||||
#include "BKE_node.h"
|
||||
#include "BKE_paint.h"
|
||||
#include "BKE_report.h"
|
||||
#include "BKE_scene.h"
|
||||
#include "BKE_texture.h"
|
||||
|
||||
@ -1918,6 +1919,7 @@ static int node_clipboard_copy_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
|
||||
/* clear current clipboard */
|
||||
BKE_node_clipboard_clear();
|
||||
BKE_node_clipboard_init(ntree);
|
||||
|
||||
/* get group node offset */
|
||||
if (gnode)
|
||||
@ -1992,7 +1994,7 @@ void NODE_OT_clipboard_copy(wmOperatorType *ot)
|
||||
|
||||
/* ****************** 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 @@ static int node_clipboard_paste_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
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 */
|
||||
|
Loading…
Reference in New Issue
Block a user