see https://bugs.gentoo.org/964932 and https://github.com/IgnorantGuru/spacefm/issues/670
patch from upstream but not released
https://github.com/IgnorantGuru/spacefm/pull/704.patch
--- a/src/ptk/ptk-dir-tree-view.c
+++ b/src/ptk/ptk-dir-tree-view.c
@@ -812,6 +812,12 @@ gboolean on_dir_tree_view_drag_motion ( GtkWidget *widget,
     GdkAtom target;
     GtkTargetList* target_list;
 
+    /*  Don't call the default handler  */
+    g_signal_stop_emission_by_name( widget, "drag-motion" );
+
+    /* We actually want it to run first, and then override the selected action */
+    GTK_WIDGET_GET_CLASS (widget)->drag_motion( widget, drag_context, x, y, time );
+
     target_list = gtk_target_list_new( drag_targets, G_N_ELEMENTS(drag_targets) );
     target = gtk_drag_dest_find_target( widget, drag_context, target_list );
     gtk_target_list_unref( target_list );
@@ -850,47 +856,9 @@ gboolean on_dir_tree_view_drag_motion ( GtkWidget *widget,
                 suggested_action = gdk_drag_context_get_selected_action( drag_context );
             }
         }
-#if GTK_CHECK_VERSION (3, 0, 0)
-        /* hack to be able to call the default handler with the correct suggested_action */
-        struct _GdkDragContext {
-          GObject parent_instance;
-
-          /*< private >*/
-          GdkDragProtocol protocol;
-#if GTK_CHECK_VERSION (3, 22, 0)
-          /* 1.0.6 per Teklad: _GdkDragContext appears to change between
-           * different versions of GTK3 which causes the crash. It appears they
-           * added/removed some variables from that struct.
-           * https://github.com/IgnorantGuru/spacefm/issues/670 */
-          GdkDisplay *display;
-#endif
-          gboolean is_source;
-          GdkWindow *source_window;
-          GdkWindow *dest_window;
-
-          GList *targets;
-          GdkDragAction actions;
-          GdkDragAction suggested_action;
-          GdkDragAction action;
-
-          guint32 start_time;
-
-          GdkDevice *device;
-#if GTK_CHECK_VERSION (3, 22, 0)
-          /* 1.0.6 per Teklad: _GdkDragContext appears to change between
-           * different versions of GTK3 which causes the crash. It appears they
-           * added/removed some variables from that struct.
-           * https://github.com/IgnorantGuru/spacefm/issues/670 */
-          guint drop_done : 1; /* Whether gdk_drag_drop_done() was performed */
-#endif
-        };
-        ((struct _GdkDragContext *)drag_context)->suggested_action = suggested_action;
-#else
-        drag_context->suggested_action = suggested_action; // needed for default handler
-#endif
         gdk_drag_status( drag_context, suggested_action, gtk_get_current_event_time() );
     }
-    return FALSE;
+    return TRUE;
 }
 
 static gboolean on_dir_tree_view_drag_leave ( GtkWidget *widget,
