diff options
-rw-r--r-- | release/scripts/ui/space_node.py | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 8 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_buttons.c | 9 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_edit.c | 35 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_header.c | 128 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_intern.h | 9 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_ops.c | 27 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_select.c | 140 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_state.c | 2 |
9 files changed, 68 insertions, 293 deletions
diff --git a/release/scripts/ui/space_node.py b/release/scripts/ui/space_node.py index 4f61abef10f..e9c7772f3d7 100644 --- a/release/scripts/ui/space_node.py +++ b/release/scripts/ui/space_node.py @@ -76,9 +76,6 @@ class NODE_MT_view(bpy.types.Menu): layout.itemO("node.properties", icon='ICON_MENU_PANEL') layout.itemS() - # layout.itemO("grease_pencil..") - # layout.itemS() - layout.itemO("view2d.zoom_in") layout.itemO("view2d.zoom_out") diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 1b0f1f28d2c..4c378d25a8c 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -1072,6 +1072,11 @@ bNodeTree *ntreeAddTree(int type) return ntree; } +/* Warning: this function gets called during some rather unexpected times + * - internal_select is only 1 when used for duplicating selected nodes (i.e. Shift-D duplicate operator) + * - this gets called when executing compositing updates (for threaded previews) + * - when the nodetree datablock needs to be copied (i.e. when users get copied) + */ bNodeTree *ntreeCopyTree(bNodeTree *ntree, int internal_select) { bNodeTree *newtree; @@ -1103,10 +1108,9 @@ bNodeTree *ntreeCopyTree(bNodeTree *ntree, int internal_select) if(internal_select==0 || (node->flag & NODE_SELECT)) { nnode= nodeCopyNode(newtree, node, internal_select); /* sets node->new */ if(internal_select) { - node->flag &= ~NODE_SELECT; + node->flag &= ~(NODE_SELECT|NODE_ACTIVE); nnode->flag |= NODE_SELECT; } - node->flag &= ~NODE_ACTIVE; /* deselect original sockets */ for(sock= node->inputs.first; sock; sock= sock->next) { diff --git a/source/blender/editors/space_node/node_buttons.c b/source/blender/editors/space_node/node_buttons.c index 20650812d52..52d8fc48a1a 100644 --- a/source/blender/editors/space_node/node_buttons.c +++ b/source/blender/editors/space_node/node_buttons.c @@ -103,8 +103,8 @@ static int active_node_poll(const bContext *C, PanelType *pt) static void active_node_panel(const bContext *C, Panel *pa) { SpaceNode *snode= CTX_wm_space_node(C); - bNodeTree *ntree= (snode) ? snode->nodetree : NULL; // XXX what's up with edittree then? - bNode *node = (ntree) ? nodeGetActive(ntree) : NULL; + bNodeTree *ntree= (snode) ? snode->edittree : NULL; + bNode *node = (ntree) ? nodeGetActive(ntree) : NULL; // xxx... for editing group nodes uiLayout *layout= pa->layout; uiBlock *block; PointerRNA ptr; @@ -112,7 +112,10 @@ static void active_node_panel(const bContext *C, Panel *pa) /* verify pointers, and create RNA pointer for the node */ if ELEM(NULL, ntree, node) return; - RNA_pointer_create(&ntree->id, &RNA_Node, node, &ptr); + //if (node->id) /* for group nodes */ + // RNA_pointer_create(node->id, &RNA_Node, node, &ptr); + //else + RNA_pointer_create(&ntree->id, &RNA_Node, node, &ptr); /* set update callback */ // xxx is this really needed diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index b76f5d7ee22..d0692f1511f 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -712,7 +712,7 @@ void node_set_active(SpaceNode *snode, bNode *node) /* make active viewer, currently only 1 supported... */ if( ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) { bNode *tnode; - int was_output= node->flag & NODE_DO_OUTPUT; + int was_output= (node->flag & NODE_DO_OUTPUT); for(tnode= snode->edittree->nodes.first; tnode; tnode= tnode->next) if( ELEM(tnode->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) @@ -1206,8 +1206,11 @@ static int node_resize_invoke(bContext *C, wmOperator *op, wmEvent *event) if(node) { rctf totr; + /* convert mouse coordinates to v2d space */ UI_view2d_region_to_view(&ar->v2d, event->x - ar->winrct.xmin, event->y - ar->winrct.ymin, &snode->mx, &snode->my); + + /* rect we're interested in is just the bottom right corner */ totr= node->totr; totr.xmin= totr.xmax-10.0f; totr.ymax= totr.ymin+10.0f; @@ -1230,7 +1233,7 @@ static int node_resize_invoke(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_RUNNING_MODAL; } } - return OPERATOR_PASS_THROUGH; + return OPERATOR_CANCELLED|OPERATOR_PASS_THROUGH; } void NODE_OT_resize(wmOperatorType *ot) @@ -2096,30 +2099,6 @@ void node_hide(SpaceNode *snode) #if 0 -void node_insert_key(SpaceNode *snode) -{ - bNode *node= editnode_get_active(snode->edittree); - - if(node == NULL) - return; - - if(node->type==CMP_NODE_TIME) { - if(node->custom1<node->custom2) { - - CurveMapping *cumap= node->storage; - float fval, curval; - - curval= (float)(CFRA - node->custom1)/(float)(node->custom2-node->custom1); - fval= curvemapping_evaluateF(cumap, 0, curval); - - if(fbutton(&fval, 0.0f, 1.0f, 10, 10, "Insert Value")) { - curvemap_insert(cumap->cm, curval, fval); - - } - } - } -} - /* makes a link between selected output and input sockets */ void node_make_link(SpaceNode *snode) { @@ -2201,7 +2180,7 @@ static int cut_links_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } - return OPERATOR_PASS_THROUGH;; + return OPERATOR_CANCELLED|OPERATOR_PASS_THROUGH; } void NODE_OT_links_cut(wmOperatorType *ot) @@ -2330,6 +2309,8 @@ static int node_group_make_exec(bContext *C, wmOperator *op) nodeSetActive(snode->nodetree, gnode); ntreeSolveOrder(snode->nodetree); } + + snode_handle_recalc(C, snode); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_node/node_header.c b/source/blender/editors/space_node/node_header.c index a0eae40f579..4cedbe3f666 100644 --- a/source/blender/editors/space_node/node_header.c +++ b/source/blender/editors/space_node/node_header.c @@ -202,131 +202,3 @@ void node_menus_register(ARegionType *art) WM_menutype_add(mt); } -#if 0 -static void do_node_nodemenu(bContext *C, void *arg, int event) -{ - ScrArea *curarea= CTX_wm_area(C); - SpaceNode *snode= CTX_wm_space_node(C); - int fromlib=0; - - /* functions in editnode.c assume there's a tree */ - if(snode->nodetree==NULL) - return; - fromlib= (snode->id && snode->id->lib); - - switch(event) { - case 1: /* grab/move */ - // XXX node_transform_ext(0,0); - break; - case 2: /* duplicate */ - if(fromlib) fromlib= -1; - else ; // XXX node_adduplicate(snode); - break; - case 3: /* delete */ - if(fromlib) fromlib= -1; - else ; // XXX node_delete(snode); - break; - case 4: /* make group */ - // XXX node_make_group(snode); - break; - case 5: /* ungroup */ - // XXX node_ungroup(snode); - break; - case 6: /* edit group */ - if(fromlib) fromlib= -1; - else ; // XXX snode_make_group_editable(snode, NULL); - break; - case 7: /* hide/unhide */ - // XXX node_hide(snode); - break; - case 8: /* read saved render layers */ - // XXX node_read_renderlayers(snode); - break; - case 9: /* show cyclic */ - // XXX ntreeSolveOrder(snode->edittree); - break; - case 10: /* execute */ - // XXXX addqueue(curarea->win, UI_BUT_EVENT, B_NODE_TREE_EXEC); - break; - case 11: /* make link */ - // XXX node_make_link(snode); - break; - case 12: /* rename */ - // XXX node_rename(snode); - break; - case 13: /* read saved full sample layers */ - // XXX node_read_fullsamplelayers(snode); - break; - case 14: /* connect viewer */ - // XXX node_active_link_viewer(snode); - break; - - } - - // XXX if(fromlib==-1) error_libdata(); - - ED_area_tag_redraw(curarea); -} - -static uiBlock *node_nodemenu(bContext *C, ARegion *ar, void *arg_unused) -{ - ScrArea *curarea= CTX_wm_area(C); - SpaceNode *snode= CTX_wm_space_node(C); - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiBeginBlock(C, ar, "node_nodemenu", UI_EMBOSSP); - uiBlockSetButmFunc(block, do_node_nodemenu, NULL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Link|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Group|Ctrl G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Ungroup|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edit Group|Tab", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide/Unhide|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rename|Ctrl R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - if(snode->treetype==NTREE_COMPOSIT) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Execute Composite|E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Read Saved Render Results|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Read Saved Full Sample Results|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Connect Node to Viewer|Ctrl RMB", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - } - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Cyclic Dependencies|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - uiEndBlock(C, block); - - return block; -} -#endif - diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h index 2d4d7035568..ea33662ecab 100644 --- a/source/blender/editors/space_node/node_intern.h +++ b/source/blender/editors/space_node/node_intern.h @@ -36,14 +36,6 @@ struct View2D; struct bContext; struct wmWindowManager; -/* defines */ - -#define NODE_SELECT_MOUSE 1 - -/* border select defines XXX these seem to be hardcode values still in border select invoke, check */ -#define NODE_EXTEND 1 -#define NODE_EXCLUSIVE 3 - /* space_node.c */ ARegion *node_has_buttons_region(ScrArea *sa); @@ -64,7 +56,6 @@ void node_keymap(wmKeyConfig *keyconf); /* node_select.c */ void NODE_OT_select(struct wmOperatorType *ot); -void NODE_OT_select_extend(struct wmOperatorType *ot); void NODE_OT_select_all(wmOperatorType *ot); void NODE_OT_select_linked_to(wmOperatorType *ot); void NODE_OT_select_linked_from(wmOperatorType *ot); diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c index a77ba68dc24..ed199bd69d0 100644 --- a/source/blender/editors/space_node/node_ops.c +++ b/source/blender/editors/space_node/node_ops.c @@ -52,7 +52,6 @@ void node_operatortypes(void) WM_operatortype_append(NODE_OT_properties); WM_operatortype_append(NODE_OT_select); - WM_operatortype_append(NODE_OT_select_extend); WM_operatortype_append(NODE_OT_select_all); WM_operatortype_append(NODE_OT_select_linked_to); WM_operatortype_append(NODE_OT_select_linked_from); @@ -72,7 +71,7 @@ void node_operatortypes(void) void node_keymap(struct wmKeyConfig *keyconf) { wmKeyMap *keymap; -// wmKeyMapItem *kmi; + wmKeyMapItem *kmi; /* Entire Editor only ----------------- */ keymap= WM_keymap_find(keyconf, "Node Generic", SPACE_NODE, 0); @@ -82,18 +81,24 @@ void node_keymap(struct wmKeyConfig *keyconf) /* Main Area only ----------------- */ keymap= WM_keymap_find(keyconf, "Node", SPACE_NODE, 0); - /* mouse select in nodes used to be both keys, it's UI elements... */ - RNA_enum_set(WM_keymap_add_item(keymap, "NODE_OT_select", ACTIONMOUSE, KM_PRESS, 0, 0)->ptr, "select_type", NODE_SELECT_MOUSE); - RNA_enum_set(WM_keymap_add_item(keymap, "NODE_OT_select", SELECTMOUSE, KM_PRESS, 0, 0)->ptr, "select_type", NODE_SELECT_MOUSE); - RNA_enum_set(WM_keymap_add_item(keymap, "NODE_OT_select_extend", ACTIONMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "select_type", NODE_SELECT_MOUSE); - RNA_enum_set(WM_keymap_add_item(keymap, "NODE_OT_select_extend", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "select_type", NODE_SELECT_MOUSE); - - WM_keymap_add_item(keymap, "NODE_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); + /* mouse select in nodes used to be both keys, but perhaps this should be reduced? + * NOTE: mouse-clicks on left-mouse will fall through to allow transform-tweak, but also link/resize + */ + WM_keymap_add_item(keymap, "NODE_OT_select", ACTIONMOUSE, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "NODE_OT_select", SELECTMOUSE, KM_PRESS, 0, 0); + kmi= WM_keymap_add_item(keymap, "NODE_OT_select", ACTIONMOUSE, KM_PRESS, KM_SHIFT, 0); + RNA_boolean_set(kmi->ptr, "extend", 1); + kmi= WM_keymap_add_item(keymap, "NODE_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0); + RNA_boolean_set(kmi->ptr, "extend", 1); + /* each of these falls through if not handled... */ WM_keymap_add_item(keymap, "NODE_OT_link", LEFTMOUSE, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "NODE_OT_resize", LEFTMOUSE, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "NODE_OT_resize", LEFTMOUSE, KM_PRESS, 0, 0); // XXX not working.. WM_keymap_add_item(keymap, "NODE_OT_visibility_toggle", LEFTMOUSE, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "NODE_OT_links_cut", LEFTMOUSE, KM_PRESS, KM_ALT, 0); + + WM_keymap_add_item(keymap, "NODE_OT_links_cut", RIGHTMOUSE, KM_PRESS, KM_CTRL|KM_ALT, 0); + + WM_keymap_add_item(keymap, "NODE_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "NODE_OT_view_all", HOMEKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "NODE_OT_select_border", BKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c index 67c7915694d..87bd6075ec5 100644 --- a/source/blender/editors/space_node/node_select.c +++ b/source/blender/editors/space_node/node_select.c @@ -61,48 +61,28 @@ static bNode *node_mouse_select(SpaceNode *snode, ARegion *ar, short *mval, shor bNode *node; float mx, my; + /* get mouse coordinates in view2d space */ mx= (float)mval[0]; my= (float)mval[1]; UI_view2d_region_to_view(&ar->v2d, mval[0], mval[1], &mx, &my); + /* find the closest visible node */ for(next_node(snode->edittree); (node=next_node(NULL));) { - - /* first check for the headers or scaling widget */ - /* XXX if(node->flag & NODE_HIDDEN) { - if(do_header_hidden_node(snode, node, mx, my)) - return 1; - } - else { - if(do_header_node(snode, node, mx, my)) - return 1; - }*/ - - /* node body */ - if(BLI_in_rctf(&node->totr, mx, my)) + /* node body (header and scale are in other operators) */ + if (BLI_in_rctf(&node->totr, mx, my)) break; } - if(node) { - if((extend & KM_SHIFT)==0) + + if (node) { + if (extend == 0) { node_deselectall(snode); - - if(extend & KM_SHIFT) { - if(node->flag & SELECT) - node->flag &= ~SELECT; - else - node->flag |= SELECT; + node->flag |= SELECT; } else - node->flag |= SELECT; - + node->flag ^= SELECT; + node_set_active(snode, node); - - /* viewer linking */ - if(extend & KM_CTRL) - ;// node_link_viewer(snode, node); - - //std_rmouse_transform(node_transform_ext); /* does undo push for select */ - } return node; @@ -110,27 +90,23 @@ static bNode *node_mouse_select(SpaceNode *snode, ARegion *ar, short *mval, shor static int node_select_exec(bContext *C, wmOperator *op) { - // XXX wmWindow *window= CTX_wm_window(C); SpaceNode *snode= CTX_wm_space_node(C); ARegion *ar= CTX_wm_region(C); - int select_type; short mval[2]; short extend; bNode *node= NULL; - - select_type = RNA_enum_get(op->ptr, "select_type"); - switch (select_type) { - case NODE_SELECT_MOUSE: - mval[0] = RNA_int_get(op->ptr, "mouse_x"); - mval[1] = RNA_int_get(op->ptr, "mouse_y"); - extend = RNA_boolean_get(op->ptr, "extend"); - node= node_mouse_select(snode, ar, mval, extend); - break; - } + /* get settings from RNA properties for operator */ + mval[0] = RNA_int_get(op->ptr, "mouse_x"); + mval[1] = RNA_int_get(op->ptr, "mouse_y"); + + extend = RNA_boolean_get(op->ptr, "extend"); + + /* perform the select */ + node= node_mouse_select(snode, ar, mval, extend); /* need refresh/a notifier vs compo notifier */ - // XXX WM_event_add_notifier(C, NC_SCENE|ND_NODES, NULL); /* Do we need to pass the scene? */ + WM_event_add_notifier(C, NC_SCENE|ND_NODES, NULL); /* Do we need to pass the scene? */ /* WATCH THIS, there are a few other ways to change the active material */ if(node) { @@ -138,9 +114,7 @@ static int node_select_exec(bContext *C, wmOperator *op) WM_event_add_notifier(C, NC_MATERIAL|ND_SHADING_DRAW, node->id); } } - - ED_region_tag_redraw(ar); - + /* send notifiers */ WM_event_add_notifier(C, NC_NODE|ND_NODE_SELECT, NULL); @@ -148,27 +122,6 @@ static int node_select_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; } -static int node_select_modal(bContext *C, wmOperator *op, wmEvent *event) -{ - /* execute the events */ - switch (event->type) { - case MOUSEMOVE: - printf("%d %d\n", event->x, event->y); - break; - case SELECTMOUSE: - //if (event->val==KM_RELEASE) { - /* calculate overall delta mouse-movement for redo */ - printf("done translating\n"); - //WM_cursor_restore(CTX_wm_window(C)); - - return OPERATOR_FINISHED; - //} - break; - } - - return OPERATOR_RUNNING_MODAL; -} - static int node_select_invoke(bContext *C, wmOperator *op, wmEvent *event) { ARegion *ar= CTX_wm_region(C); @@ -183,56 +136,21 @@ static int node_select_invoke(bContext *C, wmOperator *op, wmEvent *event) return node_select_exec(C,op); } -static int node_extend_select_invoke(bContext *C, wmOperator *op, wmEvent *event) -{ - RNA_boolean_set(op->ptr, "extend", KM_SHIFT); - - return node_select_invoke(C, op, event); -} - -/* operators */ - -static EnumPropertyItem prop_select_items[] = { - {NODE_SELECT_MOUSE, "NORMAL", 0, "Normal Select", "Select using the mouse"}, - {0, NULL, 0, NULL, NULL}}; - -void NODE_OT_select_extend(wmOperatorType *ot) -{ - // XXX - Todo - This should just be a toggle option for NODE_OT_select not its own op - /* identifiers */ - ot->name= "Activate/Select (Shift)"; - ot->idname= "NODE_OT_select_extend"; - - /* api callbacks */ - ot->invoke= node_extend_select_invoke; - ot->poll= ED_operator_node_active; - - /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - - RNA_def_enum(ot->srna, "select_type", prop_select_items, 0, "Select Type", ""); - - RNA_def_int(ot->srna, "mouse_x", 0, INT_MIN, INT_MAX, "Mouse X", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "mouse_y", 0, INT_MIN, INT_MAX, "Mouse Y", "", INT_MIN, INT_MAX); - RNA_def_boolean(ot->srna, "extend", 0, "Extend", ""); -} void NODE_OT_select(wmOperatorType *ot) { /* identifiers */ - ot->name= "Activate/Select"; + ot->name= "Select"; ot->idname= "NODE_OT_select"; /* api callbacks */ ot->invoke= node_select_invoke; ot->poll= ED_operator_node_active; - ot->modal= node_select_modal; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; - - RNA_def_enum(ot->srna, "select_type", prop_select_items, 0, "Select Type", ""); + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + /* properties */ RNA_def_int(ot->srna, "mouse_x", 0, INT_MIN, INT_MAX, "Mouse X", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "mouse_y", 0, INT_MIN, INT_MAX, "Mouse Y", "", INT_MIN, INT_MAX); RNA_def_boolean(ot->srna, "extend", 0, "Extend", ""); @@ -346,13 +264,15 @@ static int node_select_linked_to_exec(bContext *C, wmOperator *op) for (node=snode->edittree->nodes.first; node; node=node->next) node->flag &= ~NODE_TEST; - for (link=snode->edittree->links.first; link; link=link->next) + for (link=snode->edittree->links.first; link; link=link->next) { if (link->fromnode->flag & NODE_SELECT) link->tonode->flag |= NODE_TEST; + } - for (node=snode->edittree->nodes.first; node; node=node->next) + for (node=snode->edittree->nodes.first; node; node=node->next) { if (node->flag & NODE_TEST) node->flag |= NODE_SELECT; + } WM_event_add_notifier(C, NC_SCENE|ND_NODES, NULL); return OPERATOR_FINISHED; @@ -384,13 +304,15 @@ static int node_select_linked_from_exec(bContext *C, wmOperator *op) for(node=snode->edittree->nodes.first; node; node=node->next) node->flag &= ~NODE_TEST; - for(link=snode->edittree->links.first; link; link=link->next) + for(link=snode->edittree->links.first; link; link=link->next) { if(link->tonode->flag & NODE_SELECT) link->fromnode->flag |= NODE_TEST; + } - for(node=snode->edittree->nodes.first; node; node=node->next) + for(node=snode->edittree->nodes.first; node; node=node->next) { if(node->flag & NODE_TEST) node->flag |= NODE_SELECT; + } WM_event_add_notifier(C, NC_SCENE|ND_NODES, NULL); return OPERATOR_FINISHED; diff --git a/source/blender/editors/space_node/node_state.c b/source/blender/editors/space_node/node_state.c index dcab3dc0895..5214d2ef516 100644 --- a/source/blender/editors/space_node/node_state.c +++ b/source/blender/editors/space_node/node_state.c @@ -149,7 +149,7 @@ static int node_toggle_visibility_exec(bContext *C, wmOperator *op) if(node_toggle_visibility(snode, ar, mval)) return OPERATOR_FINISHED; else - return OPERATOR_PASS_THROUGH; + return OPERATOR_CANCELLED|OPERATOR_PASS_THROUGH; } static int node_toggle_visibility_invoke(bContext *C, wmOperator *op, wmEvent *event) |