summaryrefslogtreecommitdiff
path: root/Userland/Applications
diff options
context:
space:
mode:
authorMustafa Quraish <mustafaq9@gmail.com>2021-09-06 00:24:12 -0400
committerAndreas Kling <kling@serenityos.org>2021-09-06 10:36:08 +0200
commitf8570bd773731ba8c6fab3ccad1fe8280e352359 (patch)
tree20922f714691fe87d83aa35fb1e38856b2a5c064 /Userland/Applications
parent5a8c6b95e61da7717388241e0c4733de8c1d267f (diff)
downloadserenity-f8570bd773731ba8c6fab3ccad1fe8280e352359.zip
PixelPaint: Allow opening of files dropped onto application :^)
We can now drag-and-drop files onto PixelPaint to be able to open them. Each dropped file opens in a separate editor (which is the default behavior of Photoshop).
Diffstat (limited to 'Userland/Applications')
-rw-r--r--Userland/Applications/PixelPaint/MainWidget.cpp22
-rw-r--r--Userland/Applications/PixelPaint/MainWidget.h2
2 files changed, 24 insertions, 0 deletions
diff --git a/Userland/Applications/PixelPaint/MainWidget.cpp b/Userland/Applications/PixelPaint/MainWidget.cpp
index 116fef232f..51e5806c75 100644
--- a/Userland/Applications/PixelPaint/MainWidget.cpp
+++ b/Userland/Applications/PixelPaint/MainWidget.cpp
@@ -773,4 +773,26 @@ ImageEditor& MainWidget::create_new_editor(NonnullRefPtr<Image> image)
return image_editor;
}
+void MainWidget::drop_event(GUI::DropEvent& event)
+{
+ if (!event.mime_data().has_urls())
+ return;
+
+ event.accept();
+
+ if (event.mime_data().urls().is_empty())
+ return;
+
+ for (auto& url : event.mime_data().urls()) {
+ if (url.protocol() != "file")
+ continue;
+
+ auto result = FileSystemAccessClient::Client::the().request_file(window()->window_id(), url.path(), Core::OpenMode::ReadOnly);
+ if (result.error != 0)
+ continue;
+
+ open_image_fd(*result.fd, *result.chosen_file);
+ }
+}
+
}
diff --git a/Userland/Applications/PixelPaint/MainWidget.h b/Userland/Applications/PixelPaint/MainWidget.h
index 4294608499..970a157d23 100644
--- a/Userland/Applications/PixelPaint/MainWidget.h
+++ b/Userland/Applications/PixelPaint/MainWidget.h
@@ -43,6 +43,8 @@ private:
ImageEditor* current_image_editor();
ImageEditor& create_new_editor(NonnullRefPtr<Image>);
+ virtual void drop_event(GUI::DropEvent&) override;
+
ProjectLoader m_loader;
RefPtr<ToolboxWidget> m_toolbox;