@@ -136,11 +136,17 @@ template<typename T> ue_PySWidget *py_ue_new_swidget(TSharedRef<SWidget> s_widge
136136 return ret;
137137}
138138
139- #define ue_py_snew_base (T, required, arguments ) ((ue_PySWidget *)self)->Widget = TSharedRef<T>(MakeTDecl<T>(#T, __FILE__, __LINE__, required) <<= arguments);
139+ #define ue_py_snew_base (T, required, arguments ) ((ue_PySWidget *)self)->Widget = TSharedRef<T>(MakeTDecl<T>(#T, __FILE__, __LINE__, required) <<= arguments);\
140+ for (TSharedRef<FPythonSlateDelegate> Delegate : DeferredSlateDelegates)\
141+ {\
142+ FUnrealEnginePythonHouseKeeper::Get ()->TrackDeferredSlateDelegate (Delegate, ((ue_PySWidget *)self)->Widget );\
143+ }
140144
141- #define ue_py_snew_simple (T ) ue_py_snew_base(T, RequiredArgs::MakeRequiredArgs(), T::FArguments())
145+ #define ue_py_snew_simple (T ) TArray<TSharedRef<FPythonSlateDelegate>> DeferredSlateDelegates;\
146+ ue_py_snew_base (T, RequiredArgs::MakeRequiredArgs(), T::FArguments())
142147
143- #define ue_py_snew_simple_with_req_args (T, ... ) ue_py_snew_base(T, RequiredArgs::MakeRequiredArgs(__VA_ARGS__), T::FArguments())
148+ #define ue_py_snew_simple_with_req_args (T, ... ) TArray<TSharedRef<FPythonSlateDelegate>> DeferredSlateDelegates;\
149+ ue_py_snew_base (T, RequiredArgs::MakeRequiredArgs(__VA_ARGS__), T::FArguments())
144150
145151#define ue_py_snew (T ) ue_py_snew_base(T, RequiredArgs::MakeRequiredArgs(), arguments)
146152
@@ -155,9 +161,9 @@ ue_PySWidget *ue_py_get_swidget(TSharedRef<SWidget> s_widget);
155161 if (value) {\
156162 if (PyCalllable_Check_Extended (value)) {\
157163 _base handler;\
158- ue_PySWidget *py_swidget = (ue_PySWidget *)self;\
159- TSharedRef<FPythonSlateDelegate> py_delegate = FUnrealEnginePythonHouseKeeper::Get ()->NewSlateDelegate (py_swidget->Widget , value);\
164+ TSharedRef<FPythonSlateDelegate> py_delegate = FUnrealEnginePythonHouseKeeper::Get ()->NewDeferredSlateDelegate (value);\
160165 handler.Bind (py_delegate, &FPythonSlateDelegate::_func);\
166+ DeferredSlateDelegates.Add (py_delegate);\
161167 arguments._attribute (handler);\
162168 }
163169
@@ -167,9 +173,9 @@ ue_PySWidget *ue_py_get_swidget(TSharedRef<SWidget> s_widget);
167173 if (value) {\
168174 if (PyCalllable_Check_Extended (value)) {\
169175 _base handler;\
170- ue_PySWidget *py_swidget = (ue_PySWidget *)self;\
171- TSharedRef<FPythonSlateDelegate> py_delegate = FUnrealEnginePythonHouseKeeper::Get ()->NewSlateDelegate (py_swidget->Widget , value);\
176+ TSharedRef<FPythonSlateDelegate> py_delegate = FUnrealEnginePythonHouseKeeper::Get ()->NewDeferredSlateDelegate (value);\
172177 handler.BindSP (py_delegate, &FPythonSlateDelegate::_func);\
178+ DeferredSlateDelegates.Add (py_delegate);\
173179 arguments._attribute (handler);\
174180 }
175181
@@ -453,9 +459,10 @@ ue_PySWidget *ue_py_get_swidget(TSharedRef<SWidget> s_widget);
453459
454460
455461#define ue_py_slate_setup_farguments (_type ) _type::FArguments arguments;\
456- ue_py_slate_farguments_bool (" is_enabled" , IsEnabled);\
457- ue_py_slate_farguments_text (" tool_tip_text" , ToolTipText);\
458- ue_py_slate_farguments_fvector2d (" render_transform_pivot" , RenderTransformPivot)
462+ TArray<TSharedRef<FPythonSlateDelegate>> DeferredSlateDelegates;\
463+ ue_py_slate_farguments_bool (" is_enabled" , IsEnabled); \
464+ ue_py_slate_farguments_text (" tool_tip_text" , ToolTipText); \
465+ ue_py_slate_farguments_fvector2d (" render_transform_pivot" , RenderTransformPivot)
459466
460467#define ue_py_slate_farguments_required_slot (param ) { PyObject *value = ue_py_dict_get_item (kwargs, param);\
461468 value = value ? value : PyTuple_GetItem (args, 0 );\
@@ -470,6 +477,7 @@ ue_PySWidget *ue_py_get_swidget(TSharedRef<SWidget> s_widget);
470477}
471478
472479#define ue_py_slate_setup_hack_slot_args (_type, _swidget_ref ) _type::FSlot &arguments = _swidget_ref->AddSlot ();\
480+ TArray<TSharedRef<FPythonSlateDelegate>> DeferredSlateDelegates;\
473481 ue_py_slate_farguments_required_slot (" widget" );
474482
475483void ue_python_init_slate (PyObject *);
0 commit comments