GTK: file drop support. adsfgdgfdg

This commit is contained in:
StapleButter 2017-10-05 03:10:14 +02:00
parent 084d9254e3
commit a15c395460
1 changed files with 49 additions and 1 deletions

View File

@ -286,9 +286,57 @@ void uiWindowSetMargined(uiWindow *w, int margined)
setMargined(w->childHolderContainer, w->margined);
}
static void onDragDataReceived(GtkWidget* widget, GdkDragContext* ctx, gint x, gint y, GtkSelectionData* data, guint info, guint time, gpointer userdata)
{
uiWindow* w = (uiWindow*)userdata;
if (gtk_selection_data_get_length(data) > 0 && gtk_selection_data_get_format(data) == 8)
{
gchar** files = gtk_selection_data_get_uris(data);
if (files != NULL && files[0] != NULL)
{
// TODO: multi file support?
gboolean success = FALSE;
gchar* file = g_filename_from_uri(files[0], NULL, NULL);
if (file)
{
if (w->onDropFile)
w->onDropFile(w, file, w->onDropFileData);
success = TRUE;
g_free(file);
}
g_strfreev(files);
gtk_drag_finish(ctx, success, FALSE, time);
return;
}
if (files != NULL) g_strfreev(files);
gtk_drag_finish(ctx, FALSE, FALSE, time);
}
}
void uiWindowSetDropTarget(uiWindow* w, int drop)
{
printf("DRAG DROP TODO!!!!!\n");
if (!drop)
{
gtk_drag_dest_unset(w->widget);
return;
}
GtkTargetEntry entry;
entry.target = "text/uri-list";
entry.flags = GTK_TARGET_OTHER_APP;
entry.info = 1;
// CHECKME: action copy?
gtk_drag_dest_set(w->widget, GTK_DEST_DEFAULT_ALL, &entry, 1, GDK_ACTION_COPY|GDK_ACTION_MOVE);
g_signal_connect(w->widget, "drag-data-received", G_CALLBACK(onDragDataReceived), w);
}
uiWindow *uiNewWindow(const char *title, int width, int height, int hasMenubar, int resizable)