Skip to content

Commit bab1371

Browse files
author
Roberto De Ioris
committed
fixed SDockTab
1 parent 1bee8f5 commit bab1371

File tree

2 files changed

+27
-7
lines changed

2 files changed

+27
-7
lines changed

Source/UnrealEnginePython/Private/Slate/UEPyFTabSpawnerEntry.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ static PyMethodDef ue_PyFTabSpawnerEntry_methods[] = {
3636

3737
static PyObject *ue_PyFTabSpawnerEntry_str(ue_PyFTabSpawnerEntry *self)
3838
{
39-
return PyUnicode_FromFormat("<unreal_engine.FTabSpawnerEntry {'name': %s}>",
40-
PyUnicode_FromString(TCHAR_TO_UTF8(*self->spawner_entry->GetDisplayName().ToString())));
39+
return PyUnicode_FromFormat("<unreal_engine.FTabSpawnerEntry {'name': '%s'}>",
40+
TCHAR_TO_UTF8(*self->spawner_entry->GetDisplayName().ToString()));
4141
}
4242

4343
static PyTypeObject ue_PyFTabSpawnerEntryType = {

Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -756,9 +756,9 @@ FLinearColor FPythonSlateDelegate::GetterFLinearColor() const
756756

757757
TSharedRef<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

Comments
 (0)