diff options
author | Jon Bergli Heier <snakebite@jvnv.net> | 2009-12-23 02:57:31 +0100 |
---|---|---|
committer | Jon Bergli Heier <snakebite@jvnv.net> | 2009-12-23 02:57:31 +0100 |
commit | 91e6eecfd4d75dcb2943203ca9739711a9a888ce (patch) | |
tree | 0ba8600e1cb4e314c4116d46d375f4d10ca6199d /window_main.c | |
parent | 65d29f76687a258e824b5f9a0ffaea912e086aea (diff) |
Fixed recursive adding.
Removed Imlib2 dependency.
Diffstat (limited to 'window_main.c')
-rw-r--r-- | window_main.c | 35 |
1 files changed, 32 insertions, 3 deletions
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)); |