diff options
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));  | 
