From 91e6eecfd4d75dcb2943203ca9739711a9a888ce Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Wed, 23 Dec 2009 02:57:31 +0100 Subject: Fixed recursive adding. Removed Imlib2 dependency. --- window_main.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'window_main.c') diff --git a/window_main.c b/window_main.c index 96a596b..9ebacde 100644 --- a/window_main.c +++ b/window_main.c @@ -15,6 +15,9 @@ gint last_width = 0, GtkImage *image = NULL; GtkWidget *layout = NULL; +GtkStatusbar *statusbar; + +GThread *add_thread = NULL; void on_filetree_selection_changed(GtkTreeSelection *treeselection, gpointer user_data); @@ -160,15 +163,35 @@ void on_filetree_selection_changed(GtkTreeSelection *treeselection, gpointer use } } +gpointer add_dir_thread(gpointer data) { + gchar *directory; + + directory = (gchar*)data; + + add_dir_recursive(directory, 0, statusbar); + + g_free(directory); + + return NULL; +} + void on_add_dir_action_activate(GtkAction *action, gpointer user_data) { GtkWidget *dialog; + GError *error; - dialog = gtk_file_chooser_dialog_new("Choose Directory", NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, "_Select"); + if(add_thread) return; + + dialog = gtk_file_chooser_dialog_new("Choose Directory", NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char *directory; directory = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - add_dir_recursive(directory, 0); - } + add_thread = g_thread_create(add_dir_thread, strdup(directory), FALSE, &error); + if(!add_thread) { + g_warning("%s", error->message); + } + } else + printf("no directory selected\n"); gtk_widget_destroy(dialog); } @@ -179,6 +202,10 @@ int gui_main(int argc, char **argv) { GtkBuilder *builder ; GError *error = NULL; + g_thread_init(NULL); + + gdk_threads_init(); + if(!db_open()) return 1; @@ -202,6 +229,8 @@ int gui_main(int argc, char **argv) { window_hpane = GTK_WIDGET(gtk_builder_get_object(builder, "window_hpane")); g_signal_connect(window_hpane, "notify::position", G_CALLBACK(on_window_hpane_resized), window_hpane); + statusbar = GTK_STATUSBAR(gtk_builder_get_object(builder, "statusbar")); + gtk_builder_connect_signals(builder, NULL); g_object_unref(G_OBJECT(builder)); -- cgit v1.2.3