diff --git a/direct/src/gui/DirectGuiBase.py b/direct/src/gui/DirectGuiBase.py index fecfea608a..b7f35ac3af 100644 --- a/direct/src/gui/DirectGuiBase.py +++ b/direct/src/gui/DirectGuiBase.py @@ -224,7 +224,12 @@ class DirectGuiBase(DirectObject.DirectObject): del keywords[name] else: # Use optionDefs value - optionInfo[name] = [default, default, function] + value = default + if isinstance(value, list): + value = list(value) + elif isinstance(value, dict): + value = dict(value) + optionInfo[name] = [default, value, function] elif optionInfo[name][FUNCTION] is None: # Only override function if not defined by derived class optionInfo[name][FUNCTION] = function diff --git a/tests/gui/test_DirectButton.py b/tests/gui/test_DirectButton.py index 6f85e72f59..d01455bae1 100644 --- a/tests/gui/test_DirectButton.py +++ b/tests/gui/test_DirectButton.py @@ -1,6 +1,21 @@ from direct.gui.DirectButton import DirectButton +def test_button_default_extraArgs(): + btn = DirectButton() + + assert btn.configure('extraArgs') == ('extraArgs', [], []) + assert btn._optionInfo['extraArgs'] == [[], [], None] + + # Changing will not affect default value + btn['extraArgs'].append(1) + assert btn.configure('extraArgs') == ('extraArgs', [], [1]) + + # Changing this does + btn.configure('extraArgs')[1].append(2) + assert btn.configure('extraArgs') == ('extraArgs', [2], [1]) + + def test_button_destroy(): btn = DirectButton(text="Test") btn.destroy()