This program works perfectly when I drag the first data into the window. But if I do it multiple times, the following error occurs:
./main
Data: /home/tux/Desktop/sound
(main:12945): Gdk-CRITICAL **: 15:42:29.018: gdk_drop_set_actions: assertion 'priv->state == GDK_DROP_STATE_NONE' failed
Data: /home/tux/Desktop/sound
(main:12945): Gdk-CRITICAL **: 15:42:41.471: gdk_drop_set_actions: assertion 'priv->state == GDK_DROP_STATE_NONE' failed
'/home/tux/Desktop/sound'
What’s going wrong?
// gcc -o main main.c `pkg-config --cflags --libs gtk4`
#include <gtk/gtk.h>
static gboolean on_drop(GtkDropTarget *drop_target, const GValue *value, double x, double y, gpointer user_data) {
if (G_VALUE_HOLDS(value, G_TYPE_STRING)) {
const char *uri_list = g_value_get_string(value);
g_print("Empfangene URIs:\n%s\n", uri_list);
return TRUE;
}
return FALSE;
}
static void on_activate(GtkApplication *app, gpointer user_data) {
GtkWidget *window = gtk_application_window_new(app);
gtk_window_set_title(GTK_WINDOW(window), "Drag-and-Drop Example");
gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);
GtkDropTarget *drop_target = gtk_drop_target_new(G_TYPE_STRING, GDK_ACTION_COPY);
g_signal_connect(drop_target, "drop", G_CALLBACK(on_drop), NULL);
gtk_widget_add_controller(GTK_WIDGET(window), GTK_EVENT_CONTROLLER(drop_target));
gtk_window_present(GTK_WINDOW(window));
}
int main(int argc, char *argv[]) {
GtkApplication *app = gtk_application_new("com.example.draganddrop", G_APPLICATION_DEFAULT_FLAGS);
g_signal_connect(app, "activate", G_CALLBACK(on_activate), NULL);
int status = g_application_run(G_APPLICATION(app), argc, argv);
g_object_unref(app);
return status;
}