aboutsummaryrefslogtreecommitdiffstats
path: root/filter/filter-folder.c
diff options
context:
space:
mode:
Diffstat (limited to 'filter/filter-folder.c')
-rw-r--r--filter/filter-folder.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/filter/filter-folder.c b/filter/filter-folder.c
index 177e0996e4..5b862a986a 100644
--- a/filter/filter-folder.c
+++ b/filter/filter-folder.c
@@ -227,22 +227,28 @@ button_clicked (GtkButton *button, FilterFolder *ff)
#ifdef SHELL
const char *allowed_types[] = { "mail", NULL };
char *def, *physical_uri, *evolution_uri;
- static gboolean is_active = FALSE;
gchar *s;
- if (is_active)
- return;
-
- is_active = TRUE;
-
def = ff->uri ? ff->uri : "";
-
+
+ gtk_widget_set_sensitive((GtkWidget *)button, FALSE);
+ gtk_object_ref((GtkObject *)ff);
+
evolution_shell_client_user_select_folder (global_shell_client,
GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (button))),
_("Select Folder"),
def, allowed_types,
&evolution_uri,
&physical_uri);
+
+ if (GTK_OBJECT_DESTROYED(button)) {
+ g_free(physical_uri);
+ g_free(evolution_uri);
+ gtk_object_unref((GtkObject *)ff);
+ return;
+ }
+
+ gtk_widget_set_sensitive((GtkWidget *)button, TRUE);
if (physical_uri != NULL && physical_uri[0] != '\0') {
g_free (ff->uri);
@@ -257,8 +263,9 @@ button_clicked (GtkButton *button, FilterFolder *ff)
g_free (physical_uri);
}
g_free (evolution_uri);
-
- is_active = FALSE;
+
+ gtk_object_unref((GtkObject *)ff);
+
#else
GnomeDialog *gd;
GtkEntry *entry;