[Bf-blender-cvs] [f13826a572f] blender-v3.0-release: Fix T92476: wrong context in spreadsheet when area is maximized

Jacques Lucke noreply at git.blender.org
Fri Oct 29 11:04:48 CEST 2021


Commit: f13826a572f76fe7a359e84f003c667d3b801725
Author: Jacques Lucke
Date:   Fri Oct 29 11:04:37 2021 +0200
Branches: blender-v3.0-release
https://developer.blender.org/rBf13826a572f76fe7a359e84f003c667d3b801725

Fix T92476: wrong context in spreadsheet when area is maximized

Now, if a spreadsheet editor is maximized, it looks for its context in
the unmaximized screen "below".

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

M	source/blender/editors/space_spreadsheet/spreadsheet_context.cc

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

diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_context.cc b/source/blender/editors/space_spreadsheet/spreadsheet_context.cc
index c38e765caee..e55a7cae6a6 100644
--- a/source/blender/editors/space_spreadsheet/spreadsheet_context.cc
+++ b/source/blender/editors/space_spreadsheet/spreadsheet_context.cc
@@ -373,6 +373,21 @@ void ED_spreadsheet_context_path_set_evaluated_object(SpaceSpreadsheet *sspreads
   BLI_addtail(&sspreadsheet->context_path, context);
 }
 
+static bScreen *find_screen_to_search_for_context(wmWindow *window,
+                                                  SpaceSpreadsheet *current_space)
+{
+  bScreen *screen = BKE_workspace_active_screen_get(window->workspace_hook);
+  if (ELEM(screen->state, SCREENMAXIMIZED, SCREENFULL)) {
+    /* If the spreadsheet is maximized, try to find the context in the unmaximized screen. */
+    ScrArea *main_area = (ScrArea *)screen->areabase.first;
+    SpaceLink *sl = (SpaceLink *)main_area->spacedata.first;
+    if (sl == (SpaceLink *)current_space) {
+      return main_area->full;
+    }
+  }
+  return screen;
+}
+
 void ED_spreadsheet_context_path_guess(const bContext *C, SpaceSpreadsheet *sspreadsheet)
 {
   ED_spreadsheet_context_path_clear(sspreadsheet);
@@ -385,9 +400,12 @@ void ED_spreadsheet_context_path_guess(const bContext *C, SpaceSpreadsheet *sspr
 
   if (sspreadsheet->object_eval_state == SPREADSHEET_OBJECT_EVAL_STATE_VIEWER_NODE) {
     LISTBASE_FOREACH (wmWindow *, window, &wm->windows) {
-      bScreen *screen = BKE_workspace_active_screen_get(window->workspace_hook);
+      bScreen *screen = find_screen_to_search_for_context(window, sspreadsheet);
       LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
         SpaceLink *sl = (SpaceLink *)area->spacedata.first;
+        if (sl == nullptr) {
+          continue;
+        }
         if (sl->spacetype == SPACE_NODE) {
           SpaceNode *snode = (SpaceNode *)sl;
           if (snode->edittree != nullptr) {
@@ -466,9 +484,12 @@ bool ED_spreadsheet_context_path_is_active(const bContext *C, SpaceSpreadsheet *
   }
 
   LISTBASE_FOREACH (wmWindow *, window, &wm->windows) {
-    bScreen *screen = BKE_workspace_active_screen_get(window->workspace_hook);
+    bScreen *screen = find_screen_to_search_for_context(window, sspreadsheet);
     LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
       SpaceLink *sl = (SpaceLink *)area->spacedata.first;
+      if (sl == nullptr) {
+        continue;
+      }
       if (sl->spacetype != SPACE_NODE) {
         continue;
       }



More information about the Bf-blender-cvs mailing list