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>
|
||||
|
||||
* 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_destroy (GtkObject *object);
|
||||
static gboolean gimp_file_dialog_delete_event (GtkWidget *widget,
|
||||
GdkEventAny *event);
|
||||
static void gimp_file_dialog_response (GtkDialog *dialog,
|
||||
|
@ -122,9 +124,12 @@ G_DEFINE_TYPE_WITH_CODE (GimpFileDialog, gimp_file_dialog,
|
|||
static void
|
||||
gimp_file_dialog_class_init (GimpFileDialogClass *klass)
|
||||
{
|
||||
GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass);
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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
|
||||
gimp_file_dialog_delete_event (GtkWidget *widget,
|
||||
GdkEventAny *event)
|
||||
|
@ -165,7 +180,8 @@ gimp_file_dialog_response (GtkDialog *dialog,
|
|||
{
|
||||
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_cancel (GIMP_PROGRESS (dialog));
|
||||
|
@ -179,14 +195,17 @@ gimp_file_dialog_progress_start (GimpProgress *progress,
|
|||
gboolean cancelable)
|
||||
{
|
||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
||||
GimpProgress *retval;
|
||||
GimpProgress *retval = NULL;
|
||||
|
||||
retval = gimp_progress_start (GIMP_PROGRESS (dialog->progress),
|
||||
message, cancelable);
|
||||
gtk_widget_show (dialog->progress);
|
||||
if (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_RESPONSE_CANCEL, cancelable);
|
||||
gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
|
||||
GTK_RESPONSE_CANCEL, cancelable);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
@ -196,8 +215,11 @@ gimp_file_dialog_progress_end (GimpProgress *progress)
|
|||
{
|
||||
GimpFileDialog *dialog = GIMP_FILE_DIALOG (progress);
|
||||
|
||||
gimp_progress_end (GIMP_PROGRESS (dialog->progress));
|
||||
gtk_widget_hide (dialog->progress);
|
||||
if (dialog->progress)
|
||||
{
|
||||
gimp_progress_end (GIMP_PROGRESS (dialog->progress));
|
||||
gtk_widget_hide (dialog->progress);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -205,7 +227,10 @@ gimp_file_dialog_progress_is_active (GimpProgress *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
|
||||
|
@ -214,7 +239,8 @@ gimp_file_dialog_progress_set_text (GimpProgress *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
|
||||
|
@ -223,7 +249,8 @@ gimp_file_dialog_progress_set_value (GimpProgress *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
|
||||
|
@ -231,7 +258,10 @@ gimp_file_dialog_progress_get_value (GimpProgress *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
|
||||
|
@ -239,7 +269,8 @@ gimp_file_dialog_progress_pulse (GimpProgress *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
|
||||
|
@ -369,6 +400,10 @@ gimp_file_dialog_set_sensitive (GimpFileDialog *dialog,
|
|||
|
||||
g_return_if_fail (GIMP_IS_FILE_DIALOG (dialog));
|
||||
|
||||
/* bail out if we are already destroyed */
|
||||
if (! dialog->progress)
|
||||
return;
|
||||
|
||||
children =
|
||||
gtk_container_get_children (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox));
|
||||
|
||||
|
|
Loading…
Reference in New Issue