Skip to content

Commit 27b7d7e

Browse files
committed
Fix "Send Key(s) to RESET" not appearing on first right-click in Animation Editor
1 parent a1eaac8 commit 27b7d7e

File tree

2 files changed

+48
-42
lines changed

2 files changed

+48
-42
lines changed

editor/animation/animation_track_editor.cpp

Lines changed: 47 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3244,50 +3244,12 @@ void AnimationTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
32443244
// Can do something with menu too! show insert key.
32453245
float offset = (pos.x - timeline->get_name_limit()) / timeline->get_zoom_scale();
32463246
if (!read_only) {
3247-
if (!menu) {
3248-
menu = memnew(PopupMenu);
3249-
add_child(menu);
3250-
menu->connect(SceneStringName(id_pressed), callable_mp(this, &AnimationTrackEdit::_menu_selected));
3251-
}
3252-
3253-
bool selected = _try_select_at_ui_pos(pos, mb->is_command_or_control_pressed() || mb->is_shift_pressed(), false);
3254-
3255-
menu->clear();
3256-
if (animation->track_get_type(track) == Animation::TYPE_METHOD) {
3257-
if (hovering_key_idx != -1) {
3258-
lookup_key_idx = hovering_key_idx;
3259-
menu->add_icon_item(get_editor_theme_icon(SNAME("Help")), vformat("%s (%s)", TTR("Go to Definition"), animation->method_track_get_name(track, lookup_key_idx)), MENU_KEY_LOOKUP);
3260-
menu->add_separator();
3261-
}
3262-
}
3263-
menu->add_icon_item(get_editor_theme_icon(SNAME("Key")), TTR("Insert Key..."), MENU_KEY_INSERT);
3264-
if (selected || editor->is_selection_active()) {
3265-
menu->add_separator();
3266-
menu->add_icon_item(get_editor_theme_icon(SNAME("Duplicate")), TTR("Duplicate Key(s)"), MENU_KEY_DUPLICATE);
3267-
menu->add_icon_item(get_editor_theme_icon(SNAME("ActionCut")), TTR("Cut Key(s)"), MENU_KEY_CUT);
3268-
menu->add_icon_item(get_editor_theme_icon(SNAME("ActionCopy")), TTR("Copy Key(s)"), MENU_KEY_COPY);
3269-
}
3270-
if (editor->is_key_clipboard_active()) {
3271-
menu->add_icon_item(get_editor_theme_icon(SNAME("ActionPaste")), TTR("Paste Key(s)"), MENU_KEY_PASTE);
3272-
}
3273-
if (selected || editor->is_selection_active()) {
3274-
AnimationPlayerEditor *ape = AnimationPlayerEditor::get_singleton();
3275-
if (ape) {
3276-
AnimationPlayer *ap = ape->get_player();
3277-
if (ap && editor->can_add_reset_key() && animation != ap->get_animation(SceneStringName(RESET))) {
3278-
menu->add_separator();
3279-
menu->add_icon_item(get_editor_theme_icon(SNAME("MoveUp")), TTR("Send Key(s) to RESET"), MENU_KEY_ADD_RESET);
3280-
}
3281-
}
3282-
menu->add_separator();
3283-
menu->add_icon_item(get_editor_theme_icon(SNAME("Remove")), TTR("Delete Key(s)"), MENU_KEY_DELETE);
3284-
}
3285-
menu->reset_size();
3286-
3287-
menu->set_position(get_screen_position() + get_local_mouse_position());
3288-
menu->popup();
3247+
_try_select_at_ui_pos(pos, mb->is_command_or_control_pressed() || mb->is_shift_pressed(), false);
32893248

32903249
insert_at_pos = offset + timeline->get_value();
3250+
Vector2 popup_pos = get_screen_position() + get_local_mouse_position();
3251+
// Use call_deferred to wait for the selected keys being updated.
3252+
callable_mp(this, &AnimationTrackEdit::_popup_key_context_menu).call_deferred(hovering_key_idx, popup_pos);
32913253
accept_event();
32923254
}
32933255
}
@@ -3614,6 +3576,49 @@ void AnimationTrackEdit::drop_data(const Point2 &p_point, const Variant &p_data)
36143576
}
36153577
}
36163578

3579+
void AnimationTrackEdit::_popup_key_context_menu(int p_hovering_key_idx, Vector2 p_popup_pos) {
3580+
if (!menu) {
3581+
menu = memnew(PopupMenu);
3582+
add_child(menu);
3583+
menu->connect(SceneStringName(id_pressed), callable_mp(this, &AnimationTrackEdit::_menu_selected));
3584+
}
3585+
3586+
menu->clear();
3587+
if (animation->track_get_type(track) == Animation::TYPE_METHOD) {
3588+
if (p_hovering_key_idx != -1) {
3589+
lookup_key_idx = p_hovering_key_idx;
3590+
menu->add_icon_item(get_editor_theme_icon(SNAME("Help")), vformat("%s (%s)", TTR("Go to Definition"), animation->method_track_get_name(track, lookup_key_idx)), MENU_KEY_LOOKUP);
3591+
menu->add_separator();
3592+
}
3593+
}
3594+
menu->add_icon_item(get_editor_theme_icon(SNAME("Key")), TTR("Insert Key..."), MENU_KEY_INSERT);
3595+
if (editor->is_selection_active()) {
3596+
menu->add_separator();
3597+
menu->add_icon_item(get_editor_theme_icon(SNAME("Duplicate")), TTR("Duplicate Key(s)"), MENU_KEY_DUPLICATE);
3598+
menu->add_icon_item(get_editor_theme_icon(SNAME("ActionCut")), TTR("Cut Key(s)"), MENU_KEY_CUT);
3599+
menu->add_icon_item(get_editor_theme_icon(SNAME("ActionCopy")), TTR("Copy Key(s)"), MENU_KEY_COPY);
3600+
}
3601+
if (editor->is_key_clipboard_active()) {
3602+
menu->add_icon_item(get_editor_theme_icon(SNAME("ActionPaste")), TTR("Paste Key(s)"), MENU_KEY_PASTE);
3603+
}
3604+
if (editor->is_selection_active()) {
3605+
AnimationPlayerEditor *ape = AnimationPlayerEditor::get_singleton();
3606+
if (ape) {
3607+
AnimationPlayer *ap = ape->get_player();
3608+
if (ap && editor->can_add_reset_key() && animation != ap->get_animation(SceneStringName(RESET))) {
3609+
menu->add_separator();
3610+
menu->add_icon_item(get_editor_theme_icon(SNAME("MoveUp")), TTR("Send Key(s) to RESET"), MENU_KEY_ADD_RESET);
3611+
}
3612+
}
3613+
menu->add_separator();
3614+
menu->add_icon_item(get_editor_theme_icon(SNAME("Remove")), TTR("Delete Key(s)"), MENU_KEY_DELETE);
3615+
}
3616+
menu->reset_size();
3617+
3618+
menu->set_position(p_popup_pos);
3619+
menu->popup();
3620+
}
3621+
36173622
void AnimationTrackEdit::_menu_selected(int p_index) {
36183623
switch (p_index) {
36193624
case MENU_CALL_MODE_CONTINUOUS:

editor/animation/animation_track_editor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,7 @@ class AnimationTrackEdit : public Control {
481481
String path_cache;
482482

483483
void _menu_selected(int p_index);
484+
void _popup_key_context_menu(int p_hovering_key_idx, Vector2 p_popup_pos);
484485

485486
void _path_submitted(const String &p_text);
486487
void _play_position_draw();

0 commit comments

Comments
 (0)