Make it possible to use preview/viewport render job kill without context
This commit is contained in:
@@ -40,6 +40,7 @@ struct ScrArea;
|
|||||||
struct RegionView3D;
|
struct RegionView3D;
|
||||||
struct RenderEngine;
|
struct RenderEngine;
|
||||||
struct View3D;
|
struct View3D;
|
||||||
|
struct wmWindowManager;
|
||||||
|
|
||||||
/* render_ops.c */
|
/* render_ops.c */
|
||||||
|
|
||||||
@@ -52,7 +53,7 @@ void ED_render_engine_changed(struct Main *bmain);
|
|||||||
void ED_render_engine_area_exit(struct ScrArea *sa);
|
void ED_render_engine_area_exit(struct ScrArea *sa);
|
||||||
void ED_render_scene_update(struct Main *bmain, struct Scene *scene, int updated);
|
void ED_render_scene_update(struct Main *bmain, struct Scene *scene, int updated);
|
||||||
|
|
||||||
void ED_viewport_render_kill_jobs(const struct bContext *C, bool free_database);
|
void ED_viewport_render_kill_jobs(struct wmWindowManager *wm, struct Main *bmain, bool free_database);
|
||||||
struct Scene *ED_render_job_get_scene(const struct bContext *C);
|
struct Scene *ED_render_job_get_scene(const struct bContext *C);
|
||||||
|
|
||||||
/* Render the preview
|
/* Render the preview
|
||||||
@@ -72,7 +73,7 @@ void ED_preview_free_dbase(void);
|
|||||||
|
|
||||||
void ED_preview_shader_job(const struct bContext *C, void *owner, struct ID *id, struct ID *parent, struct MTex *slot, int sizex, int sizey, int method);
|
void ED_preview_shader_job(const struct bContext *C, void *owner, struct ID *id, struct ID *parent, struct MTex *slot, int sizex, int sizey, int method);
|
||||||
void ED_preview_icon_job(const struct bContext *C, void *owner, struct ID *id, unsigned int *rect, int sizex, int sizey);
|
void ED_preview_icon_job(const struct bContext *C, void *owner, struct ID *id, unsigned int *rect, int sizex, int sizey);
|
||||||
void ED_preview_kill_jobs(const struct bContext *C);
|
void ED_preview_kill_jobs(struct wmWindowManager *wm, struct Main *bmain);
|
||||||
|
|
||||||
void ED_preview_draw(const struct bContext *C, void *idp, void *parentp, void *slot, rcti *rect);
|
void ED_preview_draw(const struct bContext *C, void *idp, void *parentp, void *slot, rcti *rect);
|
||||||
|
|
||||||
|
@@ -1551,10 +1551,10 @@ void render_view3d_draw(RenderEngine *engine, const bContext *C)
|
|||||||
RE_ReleaseResultImage(re);
|
RE_ReleaseResultImage(re);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ED_viewport_render_kill_jobs(const bContext *C, bool free_database)
|
void ED_viewport_render_kill_jobs(wmWindowManager *wm,
|
||||||
|
Main *bmain,
|
||||||
|
bool free_database)
|
||||||
{
|
{
|
||||||
wmWindowManager *wm = CTX_wm_manager(C);
|
|
||||||
Main *bmain = CTX_data_main(C);
|
|
||||||
bScreen *sc;
|
bScreen *sc;
|
||||||
ScrArea *sa;
|
ScrArea *sa;
|
||||||
ARegion *ar;
|
ARegion *ar;
|
||||||
|
@@ -1180,12 +1180,11 @@ void ED_preview_shader_job(const bContext *C, void *owner, ID *id, ID *parent, M
|
|||||||
WM_jobs_start(CTX_wm_manager(C), wm_job);
|
WM_jobs_start(CTX_wm_manager(C), wm_job);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ED_preview_kill_jobs(const struct bContext *C)
|
void ED_preview_kill_jobs(wmWindowManager *wm, Main *bmain)
|
||||||
{
|
{
|
||||||
wmWindowManager *wm = CTX_wm_manager(C);
|
|
||||||
if (wm)
|
if (wm)
|
||||||
WM_jobs_kill(wm, NULL, common_preview_startjob);
|
WM_jobs_kill(wm, NULL, common_preview_startjob);
|
||||||
|
|
||||||
ED_viewport_render_kill_jobs(C, false);
|
ED_viewport_render_kill_jobs(wm, bmain, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1127,7 +1127,7 @@ static int image_open_exec(bContext *C, wmOperator *op)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* XXX unpackImage frees image buffers */
|
/* XXX unpackImage frees image buffers */
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), bmain);
|
||||||
|
|
||||||
BKE_image_signal(ima, iuser, IMA_SIGNAL_RELOAD);
|
BKE_image_signal(ima, iuser, IMA_SIGNAL_RELOAD);
|
||||||
WM_event_add_notifier(C, NC_IMAGE | NA_EDITED, ima);
|
WM_event_add_notifier(C, NC_IMAGE | NA_EDITED, ima);
|
||||||
@@ -1279,7 +1279,7 @@ static int image_replace_exec(bContext *C, wmOperator *op)
|
|||||||
sima->image->source = IMA_SRC_FILE;
|
sima->image->source = IMA_SRC_FILE;
|
||||||
|
|
||||||
/* XXX unpackImage frees image buffers */
|
/* XXX unpackImage frees image buffers */
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
BKE_icon_changed(BKE_icon_getid(&sima->image->id));
|
BKE_icon_changed(BKE_icon_getid(&sima->image->id));
|
||||||
BKE_image_signal(sima->image, &sima->iuser, IMA_SIGNAL_RELOAD);
|
BKE_image_signal(sima->image, &sima->iuser, IMA_SIGNAL_RELOAD);
|
||||||
@@ -1880,7 +1880,7 @@ static int image_reload_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
|
|
||||||
/* XXX unpackImage frees image buffers */
|
/* XXX unpackImage frees image buffers */
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
// XXX other users?
|
// XXX other users?
|
||||||
BKE_image_signal(ima, (sima) ? &sima->iuser : NULL, IMA_SIGNAL_RELOAD);
|
BKE_image_signal(ima, (sima) ? &sima->iuser : NULL, IMA_SIGNAL_RELOAD);
|
||||||
@@ -2309,7 +2309,7 @@ static int image_unpack_exec(bContext *C, wmOperator *op)
|
|||||||
BKE_report(op->reports, RPT_WARNING, "AutoPack is enabled, so image will be packed again on file save");
|
BKE_report(op->reports, RPT_WARNING, "AutoPack is enabled, so image will be packed again on file save");
|
||||||
|
|
||||||
/* XXX unpackImage frees image buffers */
|
/* XXX unpackImage frees image buffers */
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
unpackImage(op->reports, ima, method);
|
unpackImage(op->reports, ima, method);
|
||||||
|
|
||||||
|
@@ -227,7 +227,7 @@ static int add_reroute_exec(bContext *C, wmOperator *op)
|
|||||||
float insert_point[2];
|
float insert_point[2];
|
||||||
|
|
||||||
/* always first */
|
/* always first */
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
node_deselect_all(snode);
|
node_deselect_all(snode);
|
||||||
|
|
||||||
@@ -347,7 +347,7 @@ static int node_add_file_exec(bContext *C, wmOperator *op)
|
|||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
node = node_add_node(C, NULL, type, snode->cursor[0], snode->cursor[1]);
|
node = node_add_node(C, NULL, type, snode->cursor[0], snode->cursor[1]);
|
||||||
|
|
||||||
@@ -426,7 +426,7 @@ static int node_add_mask_exec(bContext *C, wmOperator *op)
|
|||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
node = node_add_node(C, NULL, CMP_NODE_MASK, snode->cursor[0], snode->cursor[1]);
|
node = node_add_node(C, NULL, CMP_NODE_MASK, snode->cursor[0], snode->cursor[1]);
|
||||||
|
|
||||||
|
@@ -1142,7 +1142,7 @@ static int node_duplicate_exec(bContext *C, wmOperator *op)
|
|||||||
bNodeLink *link, *newlink, *lastlink;
|
bNodeLink *link, *newlink, *lastlink;
|
||||||
const bool keep_inputs = RNA_boolean_get(op->ptr, "keep_inputs");
|
const bool keep_inputs = RNA_boolean_get(op->ptr, "keep_inputs");
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
lastnode = ntree->nodes.last;
|
lastnode = ntree->nodes.last;
|
||||||
for (node = ntree->nodes.first; node; node = node->next) {
|
for (node = ntree->nodes.first; node; node = node->next) {
|
||||||
@@ -1277,7 +1277,7 @@ static int node_read_renderlayers_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
Scene *curscene = CTX_data_scene(C), *scene;
|
Scene *curscene = CTX_data_scene(C), *scene;
|
||||||
bNode *node;
|
bNode *node;
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), bmain);
|
||||||
|
|
||||||
/* first tag scenes unread */
|
/* first tag scenes unread */
|
||||||
for (scene = bmain->scene.first; scene; scene = scene->id.next)
|
for (scene = bmain->scene.first; scene; scene = scene->id.next)
|
||||||
@@ -1476,7 +1476,7 @@ static int node_preview_toggle_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
if ((snode == NULL) || (snode->edittree == NULL))
|
if ((snode == NULL) || (snode->edittree == NULL))
|
||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
node_flag_toggle_exec(snode, NODE_PREVIEW);
|
node_flag_toggle_exec(snode, NODE_PREVIEW);
|
||||||
|
|
||||||
@@ -1540,7 +1540,7 @@ static int node_socket_toggle_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
if ((snode == NULL) || (snode->edittree == NULL))
|
if ((snode == NULL) || (snode->edittree == NULL))
|
||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
/* Toggle for all selected nodes */
|
/* Toggle for all selected nodes */
|
||||||
hidden = 0;
|
hidden = 0;
|
||||||
@@ -1588,7 +1588,7 @@ static int node_mute_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
SpaceNode *snode = CTX_wm_space_node(C);
|
SpaceNode *snode = CTX_wm_space_node(C);
|
||||||
bNode *node;
|
bNode *node;
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
for (node = snode->edittree->nodes.first; node; node = node->next) {
|
for (node = snode->edittree->nodes.first; node; node = node->next) {
|
||||||
/* Only allow muting of nodes having a mute func! */
|
/* Only allow muting of nodes having a mute func! */
|
||||||
@@ -1626,7 +1626,7 @@ static int node_delete_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
SpaceNode *snode = CTX_wm_space_node(C);
|
SpaceNode *snode = CTX_wm_space_node(C);
|
||||||
bNode *node, *next;
|
bNode *node, *next;
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
for (node = snode->edittree->nodes.first; node; node = next) {
|
for (node = snode->edittree->nodes.first; node; node = next) {
|
||||||
next = node->next;
|
next = node->next;
|
||||||
@@ -1667,7 +1667,7 @@ static int node_delete_reconnect_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
SpaceNode *snode = CTX_wm_space_node(C);
|
SpaceNode *snode = CTX_wm_space_node(C);
|
||||||
bNode *node, *next;
|
bNode *node, *next;
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
for (node = snode->edittree->nodes.first; node; node = next) {
|
for (node = snode->edittree->nodes.first; node; node = next) {
|
||||||
next = node->next;
|
next = node->next;
|
||||||
@@ -1924,7 +1924,7 @@ static int node_clipboard_copy_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
bNode *node;
|
bNode *node;
|
||||||
bNodeLink *link, *newlink;
|
bNodeLink *link, *newlink;
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
/* clear current clipboard */
|
/* clear current clipboard */
|
||||||
BKE_node_clipboard_clear();
|
BKE_node_clipboard_clear();
|
||||||
@@ -2037,7 +2037,7 @@ static int node_clipboard_paste_exec(bContext *C, wmOperator *op)
|
|||||||
if (!all_nodes_valid)
|
if (!all_nodes_valid)
|
||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
/* deselect old nodes */
|
/* deselect old nodes */
|
||||||
node_deselect_all(snode);
|
node_deselect_all(snode);
|
||||||
@@ -2445,7 +2445,7 @@ static int viewer_border_exec(bContext *C, wmOperator *op)
|
|||||||
void *lock;
|
void *lock;
|
||||||
ImBuf *ibuf;
|
ImBuf *ibuf;
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
ima = BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
|
ima = BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
|
||||||
ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
|
ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
|
||||||
|
@@ -144,7 +144,7 @@ static int node_group_edit_exec(bContext *C, wmOperator *op)
|
|||||||
bNode *gnode;
|
bNode *gnode;
|
||||||
const bool exit = RNA_boolean_get(op->ptr, "exit");
|
const bool exit = RNA_boolean_get(op->ptr, "exit");
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
gnode = node_group_get_active(C, node_idname);
|
gnode = node_group_get_active(C, node_idname);
|
||||||
|
|
||||||
@@ -352,7 +352,7 @@ static int node_group_ungroup_exec(bContext *C, wmOperator *op)
|
|||||||
const char *node_idname = group_node_idname(C);
|
const char *node_idname = group_node_idname(C);
|
||||||
bNode *gnode;
|
bNode *gnode;
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
gnode = node_group_get_active(C, node_idname);
|
gnode = node_group_get_active(C, node_idname);
|
||||||
if (!gnode)
|
if (!gnode)
|
||||||
@@ -522,7 +522,7 @@ static int node_group_separate_exec(bContext *C, wmOperator *op)
|
|||||||
int type = RNA_enum_get(op->ptr, "type");
|
int type = RNA_enum_get(op->ptr, "type");
|
||||||
float offx, offy;
|
float offx, offy;
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
/* are we inside of a group? */
|
/* are we inside of a group? */
|
||||||
ngroup = snode->edittree;
|
ngroup = snode->edittree;
|
||||||
@@ -915,7 +915,7 @@ static int node_group_make_exec(bContext *C, wmOperator *op)
|
|||||||
bNode *gnode;
|
bNode *gnode;
|
||||||
Main *bmain = CTX_data_main(C);
|
Main *bmain = CTX_data_main(C);
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
if (!node_group_make_test_selected(ntree, NULL, ntree_idname, op->reports))
|
if (!node_group_make_test_selected(ntree, NULL, ntree_idname, op->reports))
|
||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
@@ -966,7 +966,7 @@ static int node_group_insert_exec(bContext *C, wmOperator *op)
|
|||||||
bNode *gnode;
|
bNode *gnode;
|
||||||
Main *bmain = CTX_data_main(C);
|
Main *bmain = CTX_data_main(C);
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
gnode = node_group_get_active(C, node_idname);
|
gnode = node_group_get_active(C, node_idname);
|
||||||
|
|
||||||
|
@@ -368,7 +368,7 @@ static int node_active_link_viewer_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
if (!node)
|
if (!node)
|
||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
if (node_link_viewer(C, node) == OPERATOR_CANCELLED)
|
if (node_link_viewer(C, node) == OPERATOR_CANCELLED)
|
||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
@@ -747,7 +747,7 @@ static int node_link_invoke(bContext *C, wmOperator *op, const wmEvent *event)
|
|||||||
UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1],
|
UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1],
|
||||||
&cursor[0], &cursor[1]);
|
&cursor[0], &cursor[1]);
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
nldrag = node_link_init(snode, cursor, detach);
|
nldrag = node_link_init(snode, cursor, detach);
|
||||||
|
|
||||||
@@ -803,7 +803,7 @@ static int node_make_link_exec(bContext *C, wmOperator *op)
|
|||||||
SpaceNode *snode = CTX_wm_space_node(C);
|
SpaceNode *snode = CTX_wm_space_node(C);
|
||||||
const bool replace = RNA_boolean_get(op->ptr, "replace");
|
const bool replace = RNA_boolean_get(op->ptr, "replace");
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
snode_autoconnect(snode, 1, replace);
|
snode_autoconnect(snode, 1, replace);
|
||||||
|
|
||||||
@@ -874,7 +874,7 @@ static int cut_links_exec(bContext *C, wmOperator *op)
|
|||||||
bool found = false;
|
bool found = false;
|
||||||
bNodeLink *link, *next;
|
bNodeLink *link, *next;
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
for (link = snode->edittree->links.first; link; link = next) {
|
for (link = snode->edittree->links.first; link; link = next) {
|
||||||
next = link->next;
|
next = link->next;
|
||||||
@@ -884,7 +884,8 @@ static int cut_links_exec(bContext *C, wmOperator *op)
|
|||||||
if (cut_links_intersect(link, mcoords, i)) {
|
if (cut_links_intersect(link, mcoords, i)) {
|
||||||
|
|
||||||
if (found == false) {
|
if (found == false) {
|
||||||
ED_preview_kill_jobs(C);
|
/* TODO(sergey): Why did we kill jobs twice? */
|
||||||
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -941,7 +942,7 @@ static int detach_links_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
bNodeTree *ntree = snode->edittree;
|
bNodeTree *ntree = snode->edittree;
|
||||||
bNode *node;
|
bNode *node;
|
||||||
|
|
||||||
ED_preview_kill_jobs(C);
|
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||||
|
|
||||||
for (node = ntree->nodes.first; node; node = node->next) {
|
for (node = ntree->nodes.first; node; node = node->next) {
|
||||||
if (node->flag & SELECT) {
|
if (node->flag & SELECT) {
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
#include "BKE_blender.h"
|
#include "BKE_blender.h"
|
||||||
#include "BKE_context.h"
|
#include "BKE_context.h"
|
||||||
#include "BKE_global.h"
|
#include "BKE_global.h"
|
||||||
|
#include "BKE_main.h"
|
||||||
#include "BKE_screen.h"
|
#include "BKE_screen.h"
|
||||||
|
|
||||||
#include "ED_armature.h"
|
#include "ED_armature.h"
|
||||||
@@ -124,6 +125,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname)
|
|||||||
{
|
{
|
||||||
wmWindowManager *wm = CTX_wm_manager(C);
|
wmWindowManager *wm = CTX_wm_manager(C);
|
||||||
wmWindow *win = CTX_wm_window(C);
|
wmWindow *win = CTX_wm_window(C);
|
||||||
|
Main *bmain = CTX_data_main(C);
|
||||||
Scene *scene = CTX_data_scene(C);
|
Scene *scene = CTX_data_scene(C);
|
||||||
Object *obedit = CTX_data_edit_object(C);
|
Object *obedit = CTX_data_edit_object(C);
|
||||||
Object *obact = CTX_data_active_object(C);
|
Object *obact = CTX_data_active_object(C);
|
||||||
@@ -146,7 +148,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname)
|
|||||||
if ((obact && (obact->mode & OB_MODE_TEXTURE_PAINT)) || (sima->mode == SI_MODE_PAINT)) {
|
if ((obact && (obact->mode & OB_MODE_TEXTURE_PAINT)) || (sima->mode == SI_MODE_PAINT)) {
|
||||||
if (!ED_undo_paint_step(C, UNDO_PAINT_IMAGE, step, undoname) && undoname) {
|
if (!ED_undo_paint_step(C, UNDO_PAINT_IMAGE, step, undoname) && undoname) {
|
||||||
if (U.uiflag & USER_GLOBALUNDO) {
|
if (U.uiflag & USER_GLOBALUNDO) {
|
||||||
ED_viewport_render_kill_jobs(C, true);
|
ED_viewport_render_kill_jobs(wm, bmain, true);
|
||||||
BKE_undo_name(C, undoname);
|
BKE_undo_name(C, undoname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -199,7 +201,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname)
|
|||||||
/* for example, texface stores image pointers */
|
/* for example, texface stores image pointers */
|
||||||
undo_editmode_clear();
|
undo_editmode_clear();
|
||||||
|
|
||||||
ED_viewport_render_kill_jobs(C, true);
|
ED_viewport_render_kill_jobs(wm, bmain, true);
|
||||||
|
|
||||||
if (undoname)
|
if (undoname)
|
||||||
BKE_undo_name(C, undoname);
|
BKE_undo_name(C, undoname);
|
||||||
@@ -379,7 +381,7 @@ int ED_undo_operator_repeat(bContext *C, struct wmOperator *op)
|
|||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
ED_viewport_render_kill_jobs(C, true);
|
ED_viewport_render_kill_jobs(wm, CTX_data_main(C), true);
|
||||||
|
|
||||||
if (G.debug & G_DEBUG)
|
if (G.debug & G_DEBUG)
|
||||||
printf("redo_cb: operator redo %s\n", op->type->name);
|
printf("redo_cb: operator redo %s\n", op->type->name);
|
||||||
@@ -583,7 +585,7 @@ static int undo_history_exec(bContext *C, wmOperator *op)
|
|||||||
ED_undo_paint_step_num(C, UNDO_PAINT_IMAGE, item );
|
ED_undo_paint_step_num(C, UNDO_PAINT_IMAGE, item );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ED_viewport_render_kill_jobs(C, true);
|
ED_viewport_render_kill_jobs(CTX_wm_manager(C), CTX_data_main(C), true);
|
||||||
BKE_undo_number(C, item);
|
BKE_undo_number(C, item);
|
||||||
WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, CTX_data_scene(C));
|
WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, CTX_data_scene(C));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user