Red de conocimiento informático - Aprendizaje de código fuente - Programación con arrastrar y soltar

Programación con arrastrar y soltar

No sé cómo VC arrastra y suelta archivos desde el administrador de archivos naulitus de GNOME para abrir archivos.

Me di cuenta de uno simple, no estoy seguro si eso es lo que quieres.

Este programa puede arrastrar un archivo desde naulitus al GtkEntry de la ventana.

Luego, la ruta del archivo se mostrará en GtkEntry y el archivo se abrirá usando el programa predeterminado del sistema.

El código fuente es el siguiente. Si tienes alguna duda, por favor pregunta.

# include <GTK/GTK.h>

/*Esto es obligatorio; de lo contrario, se llamará a on_drag_data_received dos veces.

*No sé el motivo específico, así que lo bloquearé temporalmente usando este método.

*/

Gbooleano estático on_drag_drop()

{

? Devuelve VERDADERO

}

vacío estático on_drag_data_received(GtkWidget *widget,

?GdkDragContext *context,

?gint ?gpointer user_data)

{

? GdkAtom átomo = GTK_selection_data_get_data_type(datos);

? if(GTK_targets_include_uri(&atom,1)){

gchar * * URI = GTK_selection_data_get_URIs(datos);

gint I = 0;

mientras( uri[I]!=NULL){

? g_printf("%s\n ",uri[I]);

? i++;

}

GTK_ENTRY_set_text(GTK_ENTRY(widget),uri[0]);

/*Usa el programa predeterminado Abrir */

g_app_info_launch_default_for_uri(uri[0], NULL, NULL);

g_strfreev(uri);

p>

? }

? gtk_drag_finish(contexto, VERDADERO, VERDADERO, hora)

}

int main(int argc, char *argv[])

{

? GTK_init(& argc & argv);

? Widget GTK * VENTANA = GTK _ VENTANA _ nuevo(GTK _ventana_nivel superior

? GTK_WINDOW_set_position(GTK_WINDOW(Ventana),GTK_WIN_POS_CENTER);

? GTK_WINDOW_set_default_size(GTK_WINDOW(ventana), 380, 160);

? g_signal_connect(G_OBJECT(ventana), "destruir",

G_CALLBACK(gtk_main_quit), NULL);

? GtkWidget * entrada = GTK _ entrada _ nuevo();

? GtkTargetEntry target={

"text/uri-list",

GTK_target_other_application,

1

? };

? gtk_drag_dest_set(entrada,

GTK DEST DEFAULT DROP,

& destino, 1,

gdk_action_dest

? G_signal_connect(G_OBJECT(entrada),"Arrastrar-Datos-Recibir",

g_CALLBACK(on_dr

ag_data_received), NULL);

? G_signal_connect(G_OBJECT(entrada), "arrastrar y soltar",

G_CALLBACK(on_drag_drop), NULL);

? GTK_CONTAINER_add(GTK_container(ventana),entrada);

? gtk_widget_show_all(ventana);

? GTK_main();

? Devuelve 0;

}