[Xfce4-commits] [xfce/xfdesktop] 01/01: Add DnD support for application/octet-stream (Bug #14919)

noreply at xfce.org noreply at xfce.org
Sat Dec 21 22:26:55 CET 2019


This is an automated email from the git hooks/post-receive script.

a   n   d   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository xfce/xfdesktop.

commit 5a8c7f6152b15078dd81407dc5da3b5b8b4960d6
Author: Andre Miranda <andreldm at xfce.org>
Date:   Sat Dec 21 18:25:35 2019 -0300

    Add DnD support for application/octet-stream (Bug #14919)
---
 src/xfdesktop-file-icon-manager.c | 42 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/src/xfdesktop-file-icon-manager.c b/src/xfdesktop-file-icon-manager.c
index f46429c..1b0008d 100644
--- a/src/xfdesktop-file-icon-manager.c
+++ b/src/xfdesktop-file-icon-manager.c
@@ -242,6 +242,7 @@ enum
     TARGET_TEXT_URI_LIST = 0,
     TARGET_XDND_DIRECT_SAVE0,
     TARGET_NETSCAPE_URL,
+    TARGET_APPLICATION_OCTET_STREAM,
 };
 
 static const GtkTargetEntry drag_targets[] = {
@@ -250,6 +251,7 @@ static const GtkTargetEntry drag_targets[] = {
 static const gint n_drag_targets = (sizeof(drag_targets)/sizeof(drag_targets[0]));
 static const GtkTargetEntry drop_targets[] = {
     { "text/uri-list", 0, TARGET_TEXT_URI_LIST, },
+    { "application/octet-stream", 0, TARGET_APPLICATION_OCTET_STREAM, },
     { "XdndDirectSave0", 0, TARGET_XDND_DIRECT_SAVE0, },
     { "_NETSCAPE_URL", 0, TARGET_NETSCAPE_URL, },
 };
@@ -3647,6 +3649,46 @@ xfdesktop_file_icon_manager_drag_data_received(XfdesktopIconViewManager *manager
         }
 
         g_free(exo_desktop_item_edit);
+    } else if(info == TARGET_APPLICATION_OCTET_STREAM) {
+        guchar *filename;
+        gchar *filepath;
+        gint length;
+        const gchar *content;
+        GFile *dest;
+        GFileOutputStream *out;
+
+        if(gdk_property_get(gdk_drag_context_get_source_window(context),
+                            gdk_atom_intern("XdndDirectSave0", FALSE),
+                            gdk_atom_intern("text/plain", FALSE), 0, 1024,
+                            FALSE, NULL, NULL, &length, &filename) && length > 0) {
+            filename = g_realloc(filename, length + 1);
+            filename[length] = '\0';
+        } else {
+            filename = g_strdup(_("Untitled document"));
+        }
+
+        filepath = g_strdup_printf ("%s/%s",
+                                    g_get_user_special_dir(G_USER_DIRECTORY_DESKTOP),
+                                    filename);
+
+        dest = g_file_new_for_path(filepath);
+        out = g_file_create(dest, G_FILE_CREATE_NONE, NULL, NULL);
+
+        if(out) {
+            content = (const gchar *)gtk_selection_data_get_data(data);
+            length = gtk_selection_data_get_length(data);
+
+            if(g_output_stream_write_all(G_OUTPUT_STREAM(out), content, length,
+                                         NULL, NULL, NULL)) {
+                g_output_stream_close(G_OUTPUT_STREAM(out), NULL, NULL);
+            }
+
+            g_object_unref(out);
+        }
+
+        g_free(filename);
+        g_free(filepath);
+        g_object_unref(dest);
     } else if(info == TARGET_TEXT_URI_LIST) {
         if(drop_icon) {
             file_icon = XFDESKTOP_FILE_ICON(drop_icon);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list