From 6cabc83142f9a65852459c258e6511c22a1418c0 Mon Sep 17 00:00:00 2001 From: Michael Homer Date: Thu, 19 Jun 2014 22:28:07 +1200 Subject: Allow keeping dragged data around with --keep When --keep is given with --target, dragged data is retained as draggable buttons and a new target button is provided at the bottom of the list. --- dragon.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'dragon.c') diff --git a/dragon.c b/dragon.c index a606ec9..0c0c3b2 100644 --- a/dragon.c +++ b/dragon.c @@ -33,6 +33,7 @@ char *progname; bool verbose = false; int mode = 0; bool and_exit; +bool keep; #define MODE_HELP 1 #define MODE_TARGET 2 @@ -47,6 +48,8 @@ struct draggable_thing { guint last_time; }; +void add_target_button(); + void do_quit(GtkWidget *widget, gpointer data) { exit(0); } @@ -172,9 +175,14 @@ drag_data_received (GtkWidget *widget, if (!uris && !text) gtk_drag_finish (context, FALSE, FALSE, time); if (uris) { + gtk_container_remove(GTK_CONTAINER(vbox), widget); for (; *uris; uris++) { printf("%s\n", *uris); + if (keep) + add_uri_button(*uris); } + add_target_button(); + gtk_widget_show_all(window); } else if (text) { printf("%s\n", text); } @@ -183,7 +191,7 @@ drag_data_received (GtkWidget *widget, gtk_main_quit(); } -void target_mode() { +void add_target_button() { GtkWidget *label = gtk_button_new(); gtk_button_set_label(GTK_BUTTON(label), "Drag something here..."); gtk_container_add(GTK_CONTAINER(vbox), label); @@ -203,7 +211,10 @@ void target_mode() { G_CALLBACK(drag_drop), NULL); g_signal_connect(GTK_WIDGET(label), "drag-data-received", G_CALLBACK(drag_data_received), NULL); +} +void target_mode() { + add_target_button(); gtk_widget_show_all(window); gtk_main(); } @@ -224,6 +235,9 @@ int main (int argc, char **argv) { mode = MODE_TARGET; } else if (strcmp(argv[i], "--and-exit") == 0) { and_exit = true; + } else if (strcmp(argv[i], "-k") == 0 + || strcmp(argv[i], "--keep") == 0) { + keep = true; } else if (argv[i][0] == '-') { fprintf(stderr, "%s: error: unknown option `%s'.\n", progname, argv[i]); -- cgit