summaryrefslogtreecommitdiff
path: root/window_main.c
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2009-12-23 02:57:31 +0100
committerJon Bergli Heier <snakebite@jvnv.net>2009-12-23 02:57:31 +0100
commit91e6eecfd4d75dcb2943203ca9739711a9a888ce (patch)
tree0ba8600e1cb4e314c4116d46d375f4d10ca6199d /window_main.c
parent65d29f76687a258e824b5f9a0ffaea912e086aea (diff)
Fixed recursive adding.
Removed Imlib2 dependency.
Diffstat (limited to 'window_main.c')
-rw-r--r--window_main.c35
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));