Przeglądaj źródła

TextEditor: Handle drop events

We now handle drop events with data type "url-list". This makes it
possible to drop a file from FileManager on TextEditor to open it.
Andreas Kling 5 lat temu
rodzic
commit
6425b8714a

+ 19 - 0
Applications/TextEditor/TextEditorWidget.cpp

@@ -1,6 +1,7 @@
 #include "TextEditorWidget.h"
 #include <AK/Optional.h>
 #include <AK/StringBuilder.h>
+#include <AK/URL.h>
 #include <LibCore/CFile.h>
 #include <LibDraw/PNGLoader.h>
 #include <LibGUI/GAboutDialog.h>
@@ -302,3 +303,21 @@ bool TextEditorWidget::request_close()
     auto result = GMessageBox::show("The document has been modified. Quit without saving?", "Quit without saving?", GMessageBox::Type::Warning, GMessageBox::InputType::OKCancel, window());
     return result == GMessageBox::ExecOK;
 }
+
+void TextEditorWidget::drop_event(GDropEvent& event)
+{
+    event.accept();
+    window()->move_to_front();
+
+    if (event.data_type() == "url-list") {
+        auto lines = event.data().split_view('\n');
+        if (lines.is_empty())
+            return;
+        if (lines.size() > 1) {
+            GMessageBox::show("TextEditor can only open one file at a time!", "One at a time please!", GMessageBox::Type::Error, GMessageBox::InputType::OK, window());
+            return;
+        }
+        URL url(lines[0]);
+        open_sesame(url.path());
+    }
+}

+ 2 - 0
Applications/TextEditor/TextEditorWidget.h

@@ -26,6 +26,8 @@ private:
     void set_path(const FileSystemPath& file);
     void update_title();
 
+    virtual void drop_event(GDropEvent&) override;
+
     RefPtr<GTextEditor> m_editor;
     String m_path;
     String m_name;