mirror of https://github.com/GNOME/gimp.git
set dialog->progress to NULL in destroy() and check for progress being
2008-10-21 Michael Natterer <mitch@gimp.org> * app/widgets/gimpfiledialog.c: set dialog->progress to NULL in destroy() and check for progress being NULL in various places so we don't crash on API calls after the widget is destroyed. svn path=/trunk/; revision=27354
This commit is contained in:
parent
884042f61c
commit
ff8e73ad0c
|
@ -1,3 +1,9 @@
|
||||||
|
2008-10-21 Michael Natterer <mitch@gimp.org>
|
||||||
|
|
||||||
|
* app/widgets/gimpfiledialog.c: set dialog->progress to NULL in
|
||||||
|
destroy() and check for progress being NULL in various places so
|
||||||
|
we don't crash on API calls after the widget is destroyed.
|
||||||
|
|
||||||
2008-10-21 Sven Neumann <sven@gimp.org>
|
2008-10-21 Sven Neumann <sven@gimp.org>
|
||||||
|
|
||||||
* app/tools/gimpgegltool.c (gimp_param_spec_duplicate):
|
* app/tools/gimpgegltool.c (gimp_param_spec_duplicate):
|
||||||
|
|
|
@ -63,6 +63,8 @@ struct _GimpFileDialogState
|
||||||
|
|
||||||
|
|
||||||
static void gimp_file_dialog_progress_iface_init (GimpProgressInterface *iface);
|
static void gimp_file_dialog_progress_iface_init (GimpProgressInterface *iface);
|
||||||
|
|
||||||
|
static void gimp_file_dialog_destroy (GtkObject *object);
|
||||||
static gboolean gimp_file_dialog_delete_event (GtkWidget *widget,
|
static gboolean gimp_file_dialog_delete_event (GtkWidget *widget,
|
||||||
GdkEventAny *event);
|
GdkEventAny *event);
|
||||||
static void gimp_file_dialog_response (GtkDialog *dialog,
|
static void gimp_file_dialog_response (GtkDialog *dialog,
|
||||||
|
@ -122,9 +124,12 @@ G_DEFINE_TYPE_WITH_CODE (GimpFileDialog, gimp_file_dialog,
|
||||||
static void
|
static void
|
||||||
gimp_file_dialog_class_init (GimpFileDialogClass *klass)
|
gimp_file_dialog_class_init (GimpFileDialogClass *klass)
|
||||||
{
|
{
|
||||||
|
GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass);
|
||||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||||
GtkDialogClass *dialog_class = GTK_DIALOG_CLASS (klass);
|
GtkDialogClass *dialog_class = GTK_DIALOG_CLASS (klass);
|
||||||
|
|
||||||
|
object_class->destroy = gimp_file_dialog_destroy;
|
||||||
|
|
||||||
widget_class->delete_event = gimp_file_dialog_delete_event;
|
widget_class->delete_event = gimp_file_dialog_delete_event;
|
||||||
|
|
||||||
dialog_class->response = gimp_file_dialog_response;
|
dialog_class->response = gimp_file_dialog_response;
|
||||||
|
@ -148,6 +153,16 @@ gimp_file_dialog_progress_iface_init (GimpProgressInterface *iface)
|
||||||
iface->get_window = gimp_file_dialog_progress_get_window;
|
iface->get_window = gimp_file_dialog_progress_get_window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gimp_file_dialog_destroy (GtkObject *object)
|
||||||
|
{
|
||||||
|
GimpFileDialog *dialog = GIMP_FILE_DIALOG (object);
|
||||||
|
|
||||||
|
GTK_OBJECT_CLASS (parent_class)->destroy (object);
|
||||||
|
|
||||||
|
dialog->progress = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gimp_file_dialog_delete_event (GtkWidget *widget,
|
gimp_file_dialog_delete_event (GtkWidget *widget,
|
||||||
GdkEventAny *event)
|
GdkEventAny *event)
|
||||||
|
@ -165,7 +180,8 @@ gimp_file_dialog_response (GtkDialog *dialog,
|
||||||
{
|
{
|
||||||
file_dialog->canceled = TRUE;
|
file_dialog->canceled = TRUE;
|
||||||
|
|
||||||
if (GIMP_PROGRESS_BOX (file_dialog->progress)->active &&
|
if (file_dialog->progress &&
|
||||||
|
GIMP_PROGRESS_BOX (file_dialog->progress)->active &&
|
||||||
GIMP_PROGRESS_BOX (file_dialog->progress)->cancelable)
|
GIMP_PROGRESS_BOX (file_dialog->progress)->cancelable)
|
||||||
{
|
{
|
||||||
gimp_progress_cancel (GIMP_PROGRESS (dialog));
|
gimp_progress_cancel (GIMP_PROGRESS (dialog));
|
||||||
|
@ -179,14 +195,17 @@ gimp_file_dialog_progress_start (GimpProgress *progress,
|
||||||
gboolean cancelable)
|
gboolean cancelable)
|
||||||
{
|
{
|
||||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
||||||
GimpProgress *retval;
|
GimpProgress *retval = NULL;
|
||||||
|
|
||||||
retval = gimp_progress_start (GIMP_PROGRESS (dialog->progress),
|
if (dialog->progress)
|
||||||
message, cancelable);
|
{
|
||||||
gtk_widget_show (dialog->progress);
|
retval = gimp_progress_start (GIMP_PROGRESS (dialog->progress),
|
||||||
|
message, cancelable);
|
||||||
|
gtk_widget_show (dialog->progress);
|
||||||
|
|
||||||
gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
|
gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
|
||||||
GTK_RESPONSE_CANCEL, cancelable);
|
GTK_RESPONSE_CANCEL, cancelable);
|
||||||
|
}
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
@ -196,8 +215,11 @@ gimp_file_dialog_progress_end (GimpProgress *progress)
|
||||||
{
|
{
|
||||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
||||||
|
|
||||||
gimp_progress_end (GIMP_PROGRESS (dialog->progress));
|
if (dialog->progress)
|
||||||
gtk_widget_hide (dialog->progress);
|
{
|
||||||
|
gimp_progress_end (GIMP_PROGRESS (dialog->progress));
|
||||||
|
gtk_widget_hide (dialog->progress);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -205,7 +227,10 @@ gimp_file_dialog_progress_is_active (GimpProgress *progress)
|
||||||
{
|
{
|
||||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
||||||
|
|
||||||
return gimp_progress_is_active (GIMP_PROGRESS (dialog->progress));
|
if (dialog->progress)
|
||||||
|
return gimp_progress_is_active (GIMP_PROGRESS (dialog->progress));
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -214,7 +239,8 @@ gimp_file_dialog_progress_set_text (GimpProgress *progress,
|
||||||
{
|
{
|
||||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
||||||
|
|
||||||
gimp_progress_set_text (GIMP_PROGRESS (dialog->progress), message);
|
if (dialog->progress)
|
||||||
|
gimp_progress_set_text (GIMP_PROGRESS (dialog->progress), message);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -223,7 +249,8 @@ gimp_file_dialog_progress_set_value (GimpProgress *progress,
|
||||||
{
|
{
|
||||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
||||||
|
|
||||||
gimp_progress_set_value (GIMP_PROGRESS (dialog->progress), percentage);
|
if (dialog->progress)
|
||||||
|
gimp_progress_set_value (GIMP_PROGRESS (dialog->progress), percentage);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gdouble
|
static gdouble
|
||||||
|
@ -231,7 +258,10 @@ gimp_file_dialog_progress_get_value (GimpProgress *progress)
|
||||||
{
|
{
|
||||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
||||||
|
|
||||||
return gimp_progress_get_value (GIMP_PROGRESS (dialog->progress));
|
if (dialog->progress)
|
||||||
|
return gimp_progress_get_value (GIMP_PROGRESS (dialog->progress));
|
||||||
|
|
||||||
|
return 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -239,7 +269,8 @@ gimp_file_dialog_progress_pulse (GimpProgress *progress)
|
||||||
{
|
{
|
||||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
||||||
|
|
||||||
gimp_progress_pulse (GIMP_PROGRESS (dialog->progress));
|
if (dialog->progress)
|
||||||
|
gimp_progress_pulse (GIMP_PROGRESS (dialog->progress));
|
||||||
}
|
}
|
||||||
|
|
||||||
static guint32
|
static guint32
|
||||||
|
@ -369,6 +400,10 @@ gimp_file_dialog_set_sensitive (GimpFileDialog *dialog,
|
||||||
|
|
||||||
g_return_if_fail (GIMP_IS_FILE_DIALOG (dialog));
|
g_return_if_fail (GIMP_IS_FILE_DIALOG (dialog));
|
||||||
|
|
||||||
|
/* bail out if we are already destroyed */
|
||||||
|
if (! dialog->progress)
|
||||||
|
return;
|
||||||
|
|
||||||
children =
|
children =
|
||||||
gtk_container_get_children (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox));
|
gtk_container_get_children (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue