diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index b5cfbe19466..997ac8b78c6 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -444,6 +444,20 @@ int uiDefIDPoinButs(uiBlock *block, Main *bmain, ID *parid, ID *id, int id_code, uiBlockClearButLock(block); } + /* add button */ + if(events & UI_ID_ADD_NEW) { + uiBlockSetButLock(block, (events & UI_ID_PIN) && *pin_p, "Can't unlink pinned data"); + if(parid && parid->lib); + else { + dup_params= MEM_dupallocN(params); + but= uiDefIconBut(block, BUT, 0, ICON_ZOOMIN, x,y,DEF_ICON_BUT_WIDTH,DEF_BUT_HEIGHT, &dup_params->browsenr, params->browsenr, 32767.0, 0, 0, "Add new data block"); + uiButSetNFunc(but, idpoin_cb, MEM_dupallocN(params), SET_INT_IN_POINTER(UI_ID_ADD_NEW)); + x+= DEF_ICON_BUT_WIDTH; + } + + uiBlockClearButLock(block); + } + /* delete button */ if(events & UI_ID_DELETE) { uiBlockSetButLock(block, (events & UI_ID_PIN) && *pin_p, "Can't unlink pinned data"); diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c index 33a97b5a80a..e2a725164c9 100644 --- a/source/blender/editors/space_action/action_header.c +++ b/source/blender/editors/space_action/action_header.c @@ -43,6 +43,7 @@ #include "BLI_blenlib.h" #include "BKE_animsys.h" +#include "BKE_action.h" #include "BKE_context.h" #include "BKE_screen.h" @@ -272,6 +273,7 @@ static void saction_idpoin_handle(bContext *C, ID *id, int event) /* set action */ printf("\tset action \n"); adt->action= saction->action; + adt->action->id.us++; } ED_area_tag_redraw(CTX_wm_area(C)); @@ -282,7 +284,14 @@ static void saction_idpoin_handle(bContext *C, ID *id, int event) break; case UI_ID_ADD_NEW: printf("actedit addnew \n"); - /* XXX not implemented */ + if (saction->pin == 0) { + AnimData *adt= BKE_id_add_animdata(&obact->id); /* this only adds if non-existant */ + + /* set new action */ + // XXX need to restore behaviour to copy old actions... + printf("\tset new action \n"); + adt->action= saction->action= add_empty_action("Action"); + } break; case UI_ID_OPEN: printf("actedit open \n");