From 40e0792c3cae2cb95eef8d08d23364ca2e091eca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vil=C3=A9m=20Duha?= Date: Wed, 4 Nov 2020 23:48:26 +0100 Subject: BlenderKit: fix a border case with generating context for assetbar (opening a file with no 3d view) --- blenderkit/search.py | 1 - blenderkit/ui.py | 4 ++-- blenderkit/utils.py | 11 +++++++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/blenderkit/search.py b/blenderkit/search.py index f1230eb7..b681134c 100644 --- a/blenderkit/search.py +++ b/blenderkit/search.py @@ -140,7 +140,6 @@ def update_assets_data(): # updates assets data on scene load. for bkdict in dicts: d = s.get(bkdict) - print(d) if not d: continue; diff --git a/blenderkit/ui.py b/blenderkit/ui.py index 130e66ab..56dd1fee 100644 --- a/blenderkit/ui.py +++ b/blenderkit/ui.py @@ -1820,7 +1820,6 @@ class UndoWithContext(bpy.types.Operator): return {'FINISHED'} - class RunAssetBarWithContext(bpy.types.Operator): """Regenerate cobweb""" bl_idname = "object.run_assetbar_fix_context" @@ -1833,7 +1832,8 @@ class RunAssetBarWithContext(bpy.types.Operator): def execute(self, context): C_dict = utils.get_fake_context(context) - bpy.ops.view3d.blenderkit_asset_bar(C_dict, 'INVOKE_REGION_WIN', keep_running=True, do_search=False) + if C_dict.get('window'): # no 3d view, no asset bar. + bpy.ops.view3d.blenderkit_asset_bar(C_dict, 'INVOKE_REGION_WIN', keep_running=True, do_search=False) return {'FINISHED'} diff --git a/blenderkit/utils.py b/blenderkit/utils.py index 8ddd7e7d..d03140b7 100644 --- a/blenderkit/utils.py +++ b/blenderkit/utils.py @@ -656,14 +656,17 @@ def get_fake_context(context, area_type='VIEW_3D'): try: context = context.copy() - except: + except Exception as e: + print(e) + print('BlenderKit: context.copy() failed. probably a colliding addon.') context = {} if context.get('area') is None or context.get('area').type != area_type: w, a, r = get_largest_area(area_type=area_type) - - override = {'window': w, 'screen': w.screen, 'area': a, 'region': r} - C_dict.update(override) + if w: + #sometimes there is no area of the requested type. Let's face it, some people use Blender without 3d view. + override = {'window': w, 'screen': w.screen, 'area': a, 'region': r} + C_dict.update(override) # print(w,a,r) return C_dict -- cgit v1.2.3