diff --git a/Jamfile b/Jamfile index 8a5579a..427e765 100644 --- a/Jamfile +++ b/Jamfile @@ -175,6 +175,7 @@ local sourceFiles = SeparatorItem.cpp Alignment.cpp SeparatorView.cpp + SplitView.cpp MenuBar.cpp StatusBar.cpp CheckBox.cpp diff --git a/bindings/__init__.py b/bindings/__init__.py index 813c450..f800c07 100644 --- a/bindings/__init__.py +++ b/bindings/__init__.py @@ -52,6 +52,7 @@ from .SeparatorItem import * from .Alignment import * from .SeparatorView import * +from .SplitView import * from .MenuBar import * from .StatusBar import * from .CheckBox import * diff --git a/bindings/interface/SplitView.cpp b/bindings/interface/SplitView.cpp index e6a77f1..2e7e89d 100644 --- a/bindings/interface/SplitView.cpp +++ b/bindings/interface/SplitView.cpp @@ -4,6 +4,8 @@ #include #include +#include +#include #include namespace py = pybind11; @@ -11,7 +13,7 @@ namespace py = pybind11; PYBIND11_MODULE(SplitView,m) { -py::class_(m, "BSplitView") +py::class_>(m, "BSplitView") .def(py::init(), "", py::arg("orientation")=B_HORIZONTAL, py::arg("spacing")=B_USE_DEFAULT_SPACING) .def(py::init(), "", py::arg("from")) .def("SetInsets", py::overload_cast(&BSplitView::SetInsets), "", py::arg("left"), py::arg("top"), py::arg("right"), py::arg("bottom")) @@ -25,8 +27,8 @@ py::class_(m, "BSplitView") .def("SplitterSize", &BSplitView::SplitterSize, "") .def("SetSplitterSize", &BSplitView::SetSplitterSize, "", py::arg("size")) .def("CountItems", &BSplitView::CountItems, "") -.def("ItemWeight", py::overload_cast(&BSplitView::ItemWeight), "", py::arg("index")) -.def("ItemWeight", py::overload_cast(&BSplitView::ItemWeight), "", py::arg("item")) +.def("ItemWeight", py::overload_cast(&BSplitView::ItemWeight, py::const_), "", py::arg("index")) +.def("ItemWeight", py::overload_cast(&BSplitView::ItemWeight, py::const_), "", py::arg("item")) .def("SetItemWeight", py::overload_cast(&BSplitView::SetItemWeight), "", py::arg("index"), py::arg("weight"), py::arg("invalidateLayout")) .def("SetItemWeight", py::overload_cast(&BSplitView::SetItemWeight), "", py::arg("item"), py::arg("weight")) .def("IsCollapsible", &BSplitView::IsCollapsible, "", py::arg("index")) diff --git a/tests/splitViewHolderOwnership.py b/tests/splitViewHolderOwnership.py new file mode 100644 index 0000000..6cac30a --- /dev/null +++ b/tests/splitViewHolderOwnership.py @@ -0,0 +1,46 @@ +import gc +import faulthandler + +faulthandler.enable() + +try: + import resource + resource.setrlimit(resource.RLIMIT_CORE, (0, 0)) +except Exception: + pass + +from Be import ( + BApplication, + BRect, + BSplitView, + BWindow, + B_HORIZONTAL, + B_NOT_RESIZABLE, + window_type, +) + + +application = BApplication( + "application/x-vnd.haiku-pyapi-bsplitview-holder-test" +) + +window = BWindow( + BRect(100.0, 100.0, 360.0, 260.0), + "BSplitView holder test", + window_type.B_TITLED_WINDOW, + B_NOT_RESIZABLE, +) + +split = BSplitView(B_HORIZONTAL) + +window.AddChild(split, None) +window.Quit() + +del split +gc.collect() + +del window +del application +gc.collect() + +print("BSPLITVIEW HOLDER OWNERSHIP REGRESSION TEST: PASS")