@@ -136,11 +136,17 @@ template<typename T> ue_PySWidget *py_ue_new_swidget(TSharedRef<SWidget> s_widge
136
136
return ret;
137
137
}
138
138
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
+ }
140
144
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())
142
147
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())
144
150
145
151
#define ue_py_snew (T ) ue_py_snew_base(T, RequiredArgs::MakeRequiredArgs(), arguments)
146
152
@@ -155,9 +161,9 @@ ue_PySWidget *ue_py_get_swidget(TSharedRef<SWidget> s_widget);
155
161
if (value) {\
156
162
if (PyCalllable_Check_Extended (value)) {\
157
163
_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);\
160
165
handler.Bind (py_delegate, &FPythonSlateDelegate::_func);\
166
+ DeferredSlateDelegates.Add (py_delegate);\
161
167
arguments._attribute (handler);\
162
168
}
163
169
@@ -167,9 +173,9 @@ ue_PySWidget *ue_py_get_swidget(TSharedRef<SWidget> s_widget);
167
173
if (value) {\
168
174
if (PyCalllable_Check_Extended (value)) {\
169
175
_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);\
172
177
handler.BindSP (py_delegate, &FPythonSlateDelegate::_func);\
178
+ DeferredSlateDelegates.Add (py_delegate);\
173
179
arguments._attribute (handler);\
174
180
}
175
181
@@ -453,9 +459,10 @@ ue_PySWidget *ue_py_get_swidget(TSharedRef<SWidget> s_widget);
453
459
454
460
455
461
#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)
459
466
460
467
#define ue_py_slate_farguments_required_slot (param ) { PyObject *value = ue_py_dict_get_item (kwargs, param);\
461
468
value = value ? value : PyTuple_GetItem (args, 0 );\
@@ -470,6 +477,7 @@ ue_PySWidget *ue_py_get_swidget(TSharedRef<SWidget> s_widget);
470
477
}
471
478
472
479
#define ue_py_slate_setup_hack_slot_args (_type, _swidget_ref ) _type::FSlot &arguments = _swidget_ref->AddSlot ();\
480
+ TArray<TSharedRef<FPythonSlateDelegate>> DeferredSlateDelegates;\
473
481
ue_py_slate_farguments_required_slot (" widget" );
474
482
475
483
void ue_python_init_slate (PyObject *);
0 commit comments