# HG changeset patch # User Sadrul Habib Chowdhury # Date 1183771842 0 # Node ID 3bec25803a00f18fb201633c04e25a04f543763d # Parent 5f2bcb110f0088114783d726f4e38f9431412eec Fix a potential crash if the file-selector window is closed after the pref-window. diff -r 5f2bcb110f00 -r 3bec25803a00 finch/gntsound.c --- a/finch/gntsound.c Sat Jul 07 01:17:19 2007 +0000 +++ b/finch/gntsound.c Sat Jul 07 01:30:42 2007 +0000 @@ -70,6 +70,7 @@ GntWidget *volume; GntWidget *events; GntWidget *window; + GntWidget *selector; } SoundPrefDialog; SoundPrefDialog *pref_dialog; @@ -650,14 +651,24 @@ GntFileSel *sel = GNT_FILE_SEL(w); PurpleSoundEventID id = GPOINTER_TO_INT(gnt_tree_get_selection_data(GNT_TREE(pref_dialog->events))); FinchSoundEvent * event = &sounds[id]; + char *path = NULL; gnt_file_sel_set_current_location(sel, - (event && event->file) ? g_path_get_dirname(event->file) : purple_home_dir()); + (event && event->file) ? (path = g_path_get_dirname(event->file)) + : purple_home_dir()); g_signal_connect_swapped(G_OBJECT(sel->cancel),"activate",G_CALLBACK(gnt_widget_destroy),sel); g_signal_connect(G_OBJECT(sel), "file_selected", G_CALLBACK(file_cb), event); + g_signal_connect_swapped(G_OBJECT(sel), "destroy", G_CALLBACK(g_nullify_pointer), &pref_dialog->selector); + + /* If there's an already open file-selector, close that one. */ + if (pref_dialog->selector) + gnt_widget_destroy(pref_dialog->selector); + + pref_dialog->selector = w; gnt_widget_show(w); + g_free(path); } static void @@ -669,6 +680,8 @@ FinchSoundEvent * e = &sounds[id]; g_free(e->file); } + if (pref_dialog->selector) + gnt_widget_destroy(pref_dialog->selector); g_free(pref_dialog); pref_dialog = NULL; } @@ -818,7 +831,6 @@ gnt_box_add_widget(GNT_BOX(box),button); gnt_box_add_widget(GNT_BOX(win),box); - g_signal_connect(G_OBJECT(win),"destroy",G_CALLBACK(release_pref_dialog),NULL); gnt_widget_show(win);