diff --git a/Applications/FileManager/main.cpp b/Applications/FileManager/main.cpp index f92a7c60f2..f2483ef075 100644 --- a/Applications/FileManager/main.cpp +++ b/Applications/FileManager/main.cpp @@ -913,12 +913,17 @@ int run_in_windowed_mode(RefPtr config, String initial_locatio refresh_tree_view(); }; - breadcrumb_bar.on_drop = [&](size_t segment_index, const GUI::DropEvent& event) { + breadcrumb_bar.on_segment_drop = [&](size_t segment_index, const GUI::DropEvent& event) { if (!event.mime_data().has_urls()) return; copy_urls_to_directory(event.mime_data().urls(), breadcrumb_bar.segment_data(segment_index)); }; + breadcrumb_bar.on_segment_drag_enter = [&](size_t, GUI::DragEvent& event) { + if (event.mime_types().contains_slow("text/uri-list")) + event.accept(); + }; + tree_view.on_drop = [&](const GUI::ModelIndex& index, const GUI::DropEvent& event) { if (!event.mime_data().has_urls()) return; diff --git a/Libraries/LibGUI/BreadcrumbBar.cpp b/Libraries/LibGUI/BreadcrumbBar.cpp index bf9c54f2e4..67a096d300 100644 --- a/Libraries/LibGUI/BreadcrumbBar.cpp +++ b/Libraries/LibGUI/BreadcrumbBar.cpp @@ -27,13 +27,15 @@ #include #include #include +#include #include +#include REGISTER_WIDGET(GUI, BreadcrumbBar) namespace GUI { -class BreadcrumbButton : public GUI::Button { +class BreadcrumbButton : public Button { C_OBJECT(BreadcrumbButton); public: @@ -46,7 +48,18 @@ public: on_drop(event); } + virtual void drag_enter_event(DragEvent& event) override + { + if (on_drag_enter) + on_drag_enter(event); + } + + virtual void drag_leave_event(Event&) override + { + } + Function on_drop; + Function on_drag_enter; private: BreadcrumbButton() { } @@ -82,8 +95,12 @@ void BreadcrumbBar::append_segment(const String& text, const Gfx::Bitmap* icon, on_segment_click(index); }; button.on_drop = [this, index = m_segments.size()](auto& drop_event) { - if (on_drop) - on_drop(index, drop_event); + if (on_segment_drop) + on_segment_drop(index, drop_event); + }; + button.on_drag_enter = [this, index = m_segments.size()](auto& event) { + if (on_segment_drag_enter) + on_segment_drag_enter(index, event); }; auto button_text_width = button.font().width(text); diff --git a/Libraries/LibGUI/BreadcrumbBar.h b/Libraries/LibGUI/BreadcrumbBar.h index 4ec6556c91..a82df9aad5 100644 --- a/Libraries/LibGUI/BreadcrumbBar.h +++ b/Libraries/LibGUI/BreadcrumbBar.h @@ -46,7 +46,8 @@ public: Optional selected_segment() const { return m_selected_segment; } Function on_segment_click; - Function on_drop; + Function on_segment_drop; + Function on_segment_drag_enter; private: BreadcrumbBar();