[Bf-blender-cvs] [69d14c0ddbf] master: Fix T78959: Show current frame indicator when interface is locked
Hans Goudey
noreply at git.blender.org
Fri Jul 17 21:18:54 CEST 2020
Commit: 69d14c0ddbfb6ccbc0e321169967c46389bfdd32
Author: Hans Goudey
Date: Fri Jul 17 15:18:54 2020 -0400
Branches: master
https://developer.blender.org/rB69d14c0ddbfb6ccbc0e321169967c46389bfdd32
Fix T78959: Show current frame indicator when interface is locked
When the playhead drawing moved to an overlay, a check was added to keep
it from drawing with a locked interface. This is necessary for some overlays,
but not this one, so this removes the check, making it the responsibility of
the editor.
A context function is added to make that check easier in the future.
Differential Revision: https://developer.blender.org/D8313
===================================================================
M source/blender/blenkernel/BKE_context.h
M source/blender/blenkernel/BKE_screen.h
M source/blender/blenkernel/intern/context.c
M source/blender/windowmanager/intern/wm_draw.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h
index 70ca29d5795..7544789d864 100644
--- a/source/blender/blenkernel/BKE_context.h
+++ b/source/blender/blenkernel/BKE_context.h
@@ -312,6 +312,8 @@ int CTX_data_visible_gpencil_layers(const bContext *C, ListBase *list);
int CTX_data_editable_gpencil_layers(const bContext *C, ListBase *list);
int CTX_data_editable_gpencil_strokes(const bContext *C, ListBase *list);
+bool CTX_wm_interface_locked(const bContext *C);
+
/* Gets pointer to the dependency graph.
* If it doesn't exist yet, it will be allocated.
*
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index 91f241018ec..13716ddb5c6 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -142,7 +142,13 @@ typedef struct ARegionType {
void (*exit)(struct wmWindowManager *wm, struct ARegion *region);
/* draw entirely, view changes should be handled here */
void (*draw)(const struct bContext *C, struct ARegion *region);
- /* Handler to draw overlays. This handler is called every draw loop. */
+ /**
+ * Handler to draw overlays. This handler is called every draw loop.
+ *
+ * \note Some editors should return early if the interface is locked
+ * (check with #CTX_wm_interface_locked) to avoid accessing scene data
+ * that another thread may be modifying
+ */
void (*draw_overlay)(const struct bContext *C, struct ARegion *region);
/* optional, compute button layout before drawing for dynamic size */
void (*layout)(const struct bContext *C, struct ARegion *region);
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index 8de12139306..30f021b0e81 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -694,6 +694,11 @@ wmWindowManager *CTX_wm_manager(const bContext *C)
return C->wm.manager;
}
+bool CTX_wm_interface_locked(const bContext *C)
+{
+ return (bool)C->wm.manager->is_interface_locked;
+}
+
wmWindow *CTX_wm_window(const bContext *C)
{
return ctx_wm_python_context_get(C, "window", &RNA_Window, C->wm.window);
diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c
index 4cc30d65fdb..75580824d9c 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -138,12 +138,6 @@ static void wm_region_draw_overlay(bContext *C, ScrArea *area, ARegion *region)
wmWindowManager *wm = CTX_wm_manager(C);
wmWindow *win = CTX_wm_window(C);
- /* Don't draw overlay with locked interface. Drawing could access scene data that another thread
- * may be modifying. */
- if (wm->is_interface_locked) {
- return;
- }
-
wmViewport(®ion->winrct);
UI_SetTheme(area->spacetype, region->regiontype);
region->type->draw_overlay(C, region);
More information about the Bf-blender-cvs
mailing list