From 2a019e809093ced65f061dde499a26f78f975424 Mon Sep 17 00:00:00 2001 From: Gorgious56 Date: Thu, 21 Jul 2022 17:50:43 +0200 Subject: [PATCH] Enum search popup now automatically closes on item selection + move close_operator_panel higher in hierarchy to access it --- src/blenderbim/blenderbim/bim/helper.py | 9 +++++++++ .../blenderbim/bim/module/search/operator.py | 14 ++------------ src/blenderbim/blenderbim/bim/operator.py | 10 ++++++++-- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/helper.py b/src/blenderbim/blenderbim/bim/helper.py index db2c706c2e..06508b50fa 100644 --- a/src/blenderbim/blenderbim/bim/helper.py +++ b/src/blenderbim/blenderbim/bim/helper.py @@ -132,6 +132,15 @@ def get_enum_items(data, prop_name, context): return items +# hack to close popup +# https://blender.stackexchange.com/a/202576/130742 +def close_operator_panel(event): + x, y = event.mouse_x, event.mouse_y + bpy.context.window.cursor_warp(10, 10) + move_back = lambda: bpy.context.window.cursor_warp(x, y) + bpy.app.timers.register(move_back, first_interval=0.01) + + class IfcHeaderExtractor: def __init__(self, filepath: str): self.filepath = filepath diff --git a/src/blenderbim/blenderbim/bim/module/search/operator.py b/src/blenderbim/blenderbim/bim/module/search/operator.py index 27504f0772..a01d6d597a 100644 --- a/src/blenderbim/blenderbim/bim/module/search/operator.py +++ b/src/blenderbim/blenderbim/bim/module/search/operator.py @@ -24,6 +24,7 @@ from ifcopenshell.api.group.data import Data from ifcopenshell.util.selector import Selector import blenderbim.tool as tool from blenderbim.bim.ifc import IfcStore +from blenderbim.bim.helper import close_operator_panel from itertools import cycle from bpy.types import PropertyGroup, Operator from bpy.props import ( @@ -66,14 +67,7 @@ def does_keyword_exist(pattern, string, context): elif string == pattern: return True -# hack to close popup -# https://blender.stackexchange.com/a/202576/130742 -def close_operator_panel(event): - x, y = event.mouse_x, event.mouse_y - bpy.context.window.cursor_warp(10, 10) - move_back = lambda: bpy.context.window.cursor_warp(x, y) - bpy.app.timers.register(move_back, first_interval=0.01) - + class EditBlenderCollection(Operator): bl_idname = "bim.edit_blender_collection" bl_label = "Add or Remove blender collection item" @@ -639,10 +633,6 @@ class LoadQuery(Operator): bl_idname = "bim.load_query" bl_label = "Load Query" index: IntProperty() - - def invoke(self, context, event): - close_operator_panel(event) - return self.execute(context) def execute(self, context): ifc_selector = context.scene.IfcSelectorProperties diff --git a/src/blenderbim/blenderbim/bim/operator.py b/src/blenderbim/blenderbim/bim/operator.py index ad1ab0553a..83859a2bc0 100644 --- a/src/blenderbim/blenderbim/bim/operator.py +++ b/src/blenderbim/blenderbim/bim/operator.py @@ -27,7 +27,7 @@ from . import schema from blenderbim.bim.ifc import IfcStore from blenderbim.bim.prop import StrProperty from blenderbim.bim.ui import IFCFileSelector -from blenderbim.bim.helper import get_enum_items +from blenderbim.bim.helper import get_enum_items, close_operator_panel from mathutils import Vector, Matrix, Euler from math import radians @@ -531,6 +531,7 @@ def update_enum_property_search_prop(self, context): for i, prop in enumerate(self.collection_names): if prop.name == self.dummy_name: setattr(context.data, self.prop_name, self.collection_identifiers[i].name) + close_operator_panel(self) break @@ -542,8 +543,11 @@ class BIM_OT_enum_property_search(bpy.types.Operator): collection_names: bpy.props.CollectionProperty(type=StrProperty) collection_identifiers: bpy.props.CollectionProperty(type=StrProperty) prop_name: bpy.props.StringProperty() + mouse_x: bpy.props.IntProperty() + mouse_y: bpy.props.IntProperty() def invoke(self, context, event): + self.mouse_x, self.mouse_y = event.mouse_x, event.mouse_y self.clear_collections() self.data = context.data items = get_enum_items(self.data, self.prop_name, context) @@ -551,7 +555,9 @@ class BIM_OT_enum_property_search(bpy.types.Operator): return {"FINISHED"} self.add_items_regular(items) self.add_items_suggestions() - return context.window_manager.invoke_props_dialog(self) + # Cursor is moved when we update dummy_name, set it back + context.window.cursor_warp(self.mouse_x, self.mouse_y) + return context.window_manager.invoke_props_popup(self, event) def draw(self, context): # Mandatory to access context.data in update :