[Bf-blender-cvs] [1e948b2] master: Fix T41818: Missing refresh on Undo for nodes (mask example)

Sergey Sharybin noreply at git.blender.org
Tue Sep 16 10:45:34 CEST 2014


Commit: 1e948b251d63cb9141ff71d24fbcf343d38c7da4
Author: Sergey Sharybin
Date:   Tue Sep 16 14:28:58 2014 +0600
Branches: master
https://developer.blender.org/rB1e948b251d63cb9141ff71d24fbcf343d38c7da4

Fix T41818: Missing refresh on Undo for nodes (mask example)

Added a special notifier now NC_WM|ND_UNDO in order to deal with such cases
and now compositor/image will refresh when undo happens.

There are much more ways to fail compo to update the resul, like undoing
while it's not visible and so, but as mont29 said -- let's at least fix
obvious crap in the workflow.

===================================================================

M	source/blender/editors/space_image/space_image.c
M	source/blender/editors/space_node/space_node.c
M	source/blender/editors/util/undo.c
M	source/blender/windowmanager/WM_types.h

===================================================================

diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index 375a0dd..ffe9f13 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -539,6 +539,12 @@ static void image_listener(bScreen *sc, ScrArea *sa, wmNotifier *wmn)
 			}
 			break;
 		}
+		case NC_WM:
+			if(wmn->data == ND_UNDO) {
+				ED_area_tag_redraw(sa);
+				ED_area_tag_refresh(sa);
+			}
+			break;
 	}
 }
 
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 9eaee60..875639d 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -420,6 +420,9 @@ static void node_area_listener(bScreen *sc, ScrArea *sa, wmNotifier *wmn)
 						}
 					}
 					break;
+				case ND_LAYER_CONTENT:
+					ED_area_tag_refresh(sa);
+					break;
 			}
 			break;
 
@@ -507,6 +510,11 @@ static void node_area_listener(bScreen *sc, ScrArea *sa, wmNotifier *wmn)
 				ED_area_tag_refresh(sa);
 			}
 			break;
+		case NC_WM:
+			if(wmn->data == ND_UNDO) {
+				ED_area_tag_refresh(sa);
+			}
+			break;
 	}
 }
 
diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c
index 9461010..189a938 100644
--- a/source/blender/editors/util/undo.c
+++ b/source/blender/editors/util/undo.c
@@ -213,6 +213,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname)
 	}
 	
 	WM_event_add_notifier(C, NC_WINDOW, NULL);
+	WM_event_add_notifier(C, NC_WM | ND_UNDO, NULL);
 
 	if (win) {
 		win->addmousemove = true;
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index 090d951..ff252f0 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -249,6 +249,7 @@ typedef struct wmNotifier {
 #define ND_DATACHANGED		(3<<16)
 #define ND_HISTORY			(4<<16)
 #define ND_JOB				(5<<16)
+#define ND_UNDO				(6<<16)
 
 	/* NC_SCREEN screen */
 #define ND_SCREENBROWSE		(1<<16)




More information about the Bf-blender-cvs mailing list