@@ -756,9 +756,9 @@ FLinearColor FPythonSlateDelegate::GetterFLinearColor() const
756756
757757TSharedRef<SDockTab> FPythonSlateDelegate::SpawnPythonTab (const FSpawnTabArgs &args)
758758{
759+ FScopePythonGIL gil;
759760 TSharedRef<SDockTab> dock_tab = SNew (SDockTab).TabRole (ETabRole::NomadTab);
760- PyObject *py_dock = (PyObject *)ue_py_get_swidget (dock_tab);
761- PyObject *ret = PyObject_CallFunction (py_callable, (char *)" O" , py_dock);
761+ PyObject *ret = PyObject_CallFunction (py_callable, (char *)" N" , ue_py_get_swidget (dock_tab));
762762 if (!ret)
763763 {
764764 unreal_engine_py_log_error ();
@@ -1400,7 +1400,8 @@ PyObject *py_unreal_engine_register_nomad_tab_spawner(PyObject * self, PyObject
14001400
14011401 char *name;
14021402 PyObject *py_callable;
1403- if (!PyArg_ParseTuple (args, " sO:register_nomad_tab_spawner" , &name, &py_callable))
1403+ PyObject *py_icon = nullptr ;
1404+ if (!PyArg_ParseTuple (args, " sO|O:register_nomad_tab_spawner" , &name, &py_callable, &py_icon))
14041405 {
14051406 return NULL ;
14061407 }
@@ -1412,14 +1413,33 @@ PyObject *py_unreal_engine_register_nomad_tab_spawner(PyObject * self, PyObject
14121413 TSharedRef<FPythonSlateDelegate> py_delegate = FUnrealEnginePythonHouseKeeper::Get ()->NewStaticSlateDelegate (py_callable);
14131414 spawn_tab.BindSP (py_delegate, &FPythonSlateDelegate::SpawnPythonTab);
14141415
1415- FTabSpawnerEntry *spawner_entry = &FGlobalTabmanager::Get ()->RegisterNomadTabSpawner (UTF8_TO_TCHAR (name), spawn_tab)
1416+ FName TabName = FName (UTF8_TO_TCHAR (name));
1417+
1418+ // avoid crash if re-registering the same tab
1419+ FGlobalTabmanager::Get ()->UnregisterNomadTabSpawner (TabName);
1420+
1421+ FSlateIcon Icon = FSlateIcon ();
1422+ if (py_icon)
1423+ {
1424+ ue_PyFSlateIcon *slate_icon = py_ue_is_fslate_icon (py_icon);
1425+ if (!slate_icon)
1426+ {
1427+ return PyErr_Format (PyExc_Exception, " argument is not a FSlateIcon" );
1428+ }
1429+ Icon = slate_icon->icon ;
1430+ }
1431+
1432+ FTabSpawnerEntry *SpawnerEntry = &FGlobalTabmanager::Get ()->RegisterNomadTabSpawner (TabName, spawn_tab)
1433+ .SetDisplayName (FText::FromString ((TabName).ToString ()))
1434+ .SetTooltipText (FText::FromString ((TabName).ToString ()))
1435+ .SetIcon (Icon)
14161436 // TODO: more generic way to set the group
14171437#if WITH_EDITOR
14181438 .SetGroup (WorkspaceMenu::GetMenuStructure ().GetDeveloperToolsMiscCategory ())
14191439#endif
14201440 ;
14211441
1422- PyObject *ret = py_ue_new_ftab_spawner_entry (spawner_entry );
1442+ PyObject *ret = py_ue_new_ftab_spawner_entry (SpawnerEntry );
14231443 Py_INCREF (ret);
14241444 return ret;
14251445}
0 commit comments