| 3727 | } |
| 3728 | |
| 3729 | void FileSystemDock::_tree_gui_input(Ref<InputEvent> p_event) { |
| 3730 | Ref<InputEventMouseMotion> mm = p_event; |
| 3731 | if (mm.is_valid()) { |
| 3732 | TreeItem *item = tree->get_item_at_position(mm->get_position()); |
| 3733 | if (item && holding_branch) { |
| 3734 | String fpath = item->get_metadata(0); |
| 3735 | while (!fpath.ends_with("/") && fpath != "res://" && item->get_parent()) { // Find the parent folder tree item. |
| 3736 | item = item->get_parent(); |
| 3737 | fpath = item->get_metadata(0); |
| 3738 | } |
| 3739 | |
| 3740 | TreeItem *deselect_item = tree->get_next_selected(tree->get_root()); |
| 3741 | while (deselect_item) { |
| 3742 | deselect_item->deselect(0); |
| 3743 | deselect_item = tree->get_next_selected(deselect_item); |
| 3744 | } |
| 3745 | item->select(0); |
| 3746 | |
| 3747 | if (display_mode != DisplayMode::DISPLAY_MODE_TREE_ONLY) { |
| 3748 | files->deselect_all(); |
| 3749 | // Try to select the corresponding file list item. |
| 3750 | const int files_item_idx = files->find_metadata(fpath); |
| 3751 | if (files_item_idx != -1) { |
| 3752 | files->select(files_item_idx); |
| 3753 | } |
| 3754 | } |
| 3755 | } |
| 3756 | } |
| 3757 | |
| 3758 | Ref<InputEventKey> key = p_event; |
| 3759 | if (key.is_valid() && key->is_pressed() && !key->is_echo()) { |
| 3760 | int option_id = _get_menu_option_from_key(key); |
| 3761 | if (option_id > -1) { |
| 3762 | _tree_rmb_option(option_id); |
| 3763 | } else { |
| 3764 | bool create = false; |
| 3765 | Callable custom_callback = EditorContextMenuPluginManager::get_singleton()->match_custom_shortcut(EditorContextMenuPlugin::CONTEXT_SLOT_FILESYSTEM, p_event); |
| 3766 | if (!custom_callback.is_valid()) { |
| 3767 | create = true; |
| 3768 | custom_callback = EditorContextMenuPluginManager::get_singleton()->match_custom_shortcut(EditorContextMenuPlugin::CONTEXT_SLOT_FILESYSTEM_CREATE, p_event); |
| 3769 | } |
| 3770 | |
| 3771 | if (custom_callback.is_valid()) { |
| 3772 | PackedStringArray selected = _tree_get_selected(false); |
| 3773 | if (create) { |
| 3774 | if (selected.is_empty()) { |
| 3775 | selected.append("res://"); |
| 3776 | } else if (selected.size() == 1) { |
| 3777 | selected.write[0] = selected[0].get_base_dir(); |
| 3778 | } else { |
| 3779 | return; |
| 3780 | } |
| 3781 | } |
| 3782 | EditorContextMenuPluginManager::get_singleton()->invoke_callback(custom_callback, selected); |
| 3783 | } else { |
| 3784 | return; |
| 3785 | } |
| 3786 | } |
nothing calls this directly
no test coverage detected