diff options
Diffstat (limited to 'scene/gui/menu_button.cpp')
| -rw-r--r-- | scene/gui/menu_button.cpp | 22 | 
1 files changed, 18 insertions, 4 deletions
diff --git a/scene/gui/menu_button.cpp b/scene/gui/menu_button.cpp index b67d8c00d6..e12cd55e6f 100644 --- a/scene/gui/menu_button.cpp +++ b/scene/gui/menu_button.cpp @@ -55,8 +55,9 @@ void MenuButton::pressed() {  	Size2 size = get_size();  	Point2 gp = get_global_position(); -	popup->set_global_position(gp + Size2(0, size.height)); +	popup->set_global_position(gp + Size2(0, size.height * get_global_transform().get_scale().y));  	popup->set_size(Size2(size.width, 0)); +	popup->set_scale(get_global_transform().get_scale());  	popup->set_parent_rect(Rect2(Point2(gp - popup->get_global_position()), get_size()));  	popup->popup();  } @@ -91,6 +92,16 @@ bool MenuButton::is_switch_on_hover() {  	return switch_on_hover;  } +void MenuButton::_notification(int p_what) { + +	if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { + +		if (!is_visible_in_tree()) { +			popup->hide(); +		} +	} +} +  void MenuButton::_bind_methods() {  	ClassDB::bind_method(D_METHOD("get_popup"), &MenuButton::get_popup); @@ -116,15 +127,18 @@ MenuButton::MenuButton() {  	switch_on_hover = false;  	set_flat(true); +	set_toggle_mode(true);  	set_disable_shortcuts(false);  	set_enabled_focus_mode(FOCUS_NONE); +	set_process_unhandled_key_input(true); +	set_action_mode(ACTION_MODE_BUTTON_PRESS); +  	popup = memnew(PopupMenu);  	popup->hide();  	add_child(popup); -	popup->set_as_toplevel(true);  	popup->set_pass_on_modal_close_click(false); -	set_process_unhandled_key_input(true); -	set_action_mode(ACTION_MODE_BUTTON_PRESS); +	popup->connect("about_to_show", this, "set_pressed", varray(true)); // For when switching from another MenuButton. +	popup->connect("popup_hide", this, "set_pressed", varray(false));  }  MenuButton::~MenuButton() {  |