From 9dd1315cc0ebb7c7a36da5fa2b84bd1d60fd16ca Mon Sep 17 00:00:00 2001 From: Philipp Oeser Date: Tue, 27 Aug 2024 16:54:32 +0200 Subject: [PATCH] Fix #126728: Movie Clip Editor "Sync Visible Range" option not working True for both `Graph` and `Dopesheet` views in the MCE. For all other time-based editors, the main region (`RGN_TYPE_WINDOW`) is of interest to be tagged for syncing `V2D_VIEWSYNC_SCREEN_TIME`. In the case of the Movie Clip Editor however, the `Graph` and `Dopesheet` regions in question are of type `RGN_TYPE_PREVIEW`. So to resolve, we have to take this into account in view2d_sync RNA code NOTE: this PR does not add versioning code, so any "falsely" tagged `Graph` and `Dopesheet` view will "loose" the setting (will have to be enabled again on the "right" region), this could be added though -- it would be impossible to tell **which** view exactly, so on each `RGN_TYPE_WINDOW` encountered, we'd have to then tag **both** `Graph` and `Dopesheet` afaict Pull Request: https://projects.blender.org/blender/blender/pulls/126785 --- .../blender/blenkernel/BKE_blender_version.h | 2 +- .../blenloader/intern/versioning_400.cc | 17 +++++++++++++++ source/blender/makesrna/intern/rna_space.cc | 21 ++++++++++++++++--- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index a4ed6b1bd1a..7f191822bf8 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -31,7 +31,7 @@ extern "C" { /* Blender file format version. */ #define BLENDER_FILE_VERSION BLENDER_VERSION -#define BLENDER_FILE_SUBVERSION 66 +#define BLENDER_FILE_SUBVERSION 67 /* Minimum Blender version that supports reading file written with the current * version. Older Blender versions will test this and cancel loading the file, showing a warning to diff --git a/source/blender/blenloader/intern/versioning_400.cc b/source/blender/blenloader/intern/versioning_400.cc index 1a037b72269..c2d33842b91 100644 --- a/source/blender/blenloader/intern/versioning_400.cc +++ b/source/blender/blenloader/intern/versioning_400.cc @@ -62,6 +62,7 @@ #include "BKE_nla.h" #include "BKE_node_runtime.hh" #include "BKE_scene.hh" +#include "BKE_screen.hh" #include "BKE_tracking.h" #include "IMB_imbuf_enums.h" @@ -4329,6 +4330,22 @@ void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain) fix_built_in_curve_attribute_defaults(bmain); } + if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 67)) { + LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) { + LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { + LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) { + if (sl->spacetype == SPACE_CLIP) { + ARegion *region = BKE_area_find_region_type(area, RGN_TYPE_WINDOW); + if (region != nullptr) { + View2D *v2d = ®ion->v2d; + v2d->flag &= ~V2D_VIEWSYNC_SCREEN_TIME; + } + } + } + } + } + } + /** * Always bump subversion in BKE_blender_version.h when adding versioning * code here, and wrap it inside a MAIN_VERSION_FILE_ATLEAST check. diff --git a/source/blender/makesrna/intern/rna_space.cc b/source/blender/makesrna/intern/rna_space.cc index 4c84abb0431..57f8bc15020 100644 --- a/source/blender/makesrna/intern/rna_space.cc +++ b/source/blender/makesrna/intern/rna_space.cc @@ -877,7 +877,12 @@ static bool rna_Space_view2d_sync_get(PointerRNA *ptr) ARegion *region; area = rna_area_from_space(ptr); /* can be nullptr */ - region = BKE_area_find_region_type(area, RGN_TYPE_WINDOW); + if (area->spacetype == SPACE_CLIP) { + region = BKE_area_find_region_type(area, RGN_TYPE_PREVIEW); + } + else { + region = BKE_area_find_region_type(area, RGN_TYPE_WINDOW); + } if (region) { View2D *v2d = ®ion->v2d; return (v2d->flag & V2D_VIEWSYNC_SCREEN_TIME) != 0; @@ -900,7 +905,12 @@ static void rna_Space_view2d_sync_set(PointerRNA *ptr, bool value) return; } - region = BKE_area_find_region_type(area, RGN_TYPE_WINDOW); + if (area->spacetype == SPACE_CLIP) { + region = BKE_area_find_region_type(area, RGN_TYPE_PREVIEW); + } + else { + region = BKE_area_find_region_type(area, RGN_TYPE_WINDOW); + } if (region) { View2D *v2d = ®ion->v2d; if (value) { @@ -918,7 +928,12 @@ static void rna_Space_view2d_sync_update(Main * /*bmain*/, Scene * /*scene*/, Po ARegion *region; area = rna_area_from_space(ptr); /* can be nullptr */ - region = BKE_area_find_region_type(area, RGN_TYPE_WINDOW); + if (area->spacetype == SPACE_CLIP) { + region = BKE_area_find_region_type(area, RGN_TYPE_PREVIEW); + } + else { + region = BKE_area_find_region_type(area, RGN_TYPE_WINDOW); + } if (region) { bScreen *screen = (bScreen *)ptr->owner_id;