diff --git a/ChangeLog b/ChangeLog index 100bfdca4a..4a8a4597c1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2000-04-26 Michael Natterer + + * app/gdisplay.[ch] + * app/gdisplay_ops.c: made the warning_dialog a per-display + variable. The old behaviour of having only one global variable + can easily result in loss of work and should IMHO be considered + a bug. + Wed Apr 26 22:35:36 CEST 2000 Stanislav Brabec On request of Martin Weber : diff --git a/app/core/gimpprojection.c b/app/core/gimpprojection.c index 32ff043d9a..9315ee5f7a 100644 --- a/app/core/gimpprojection.c +++ b/app/core/gimpprojection.c @@ -132,6 +132,8 @@ gdisplay_new (GimpImage *gimage, gdisp->cd_list = NULL; gdisp->cd_ui = NULL; + gdisp->warning_dialog = NULL; + /* format the title */ gdisplay_format_title (gdisp, title, MAX_TITLE_BUF); diff --git a/app/core/gimpprojection.h b/app/core/gimpprojection.h index 99117c3d36..c98c2c85be 100644 --- a/app/core/gimpprojection.h +++ b/app/core/gimpprojection.h @@ -158,6 +158,8 @@ struct _GDisplay GList *cd_list; /* color display conversion stuff */ GtkWidget *cd_ui; /* color display filter dialog */ + + GtkWidget *warning_dialog; /* "Changes were made to %s. Close anyway?" */ }; diff --git a/app/display/gimpdisplay-ops.c b/app/display/gimpdisplay-ops.c index 1d97f4c596..627c84f0f6 100644 --- a/app/display/gimpdisplay-ops.c +++ b/app/display/gimpdisplay-ops.c @@ -40,8 +40,6 @@ static void gdisplay_close_warning_callback (GtkWidget *widget, static void gdisplay_close_warning_dialog (gchar *image_name, GDisplay *gdisp); -static GtkWidget *warning_dialog = NULL; - /* * This file is for operations on the gdisplay object */ @@ -279,7 +277,7 @@ gdisplay_close_warning_callback (GtkWidget *widget, gdisp = (GDisplay *) data; - menus_set_sensitive ("/File/Close", TRUE); + gdisp->warning_dialog = NULL; if (close) gtk_widget_destroy (gdisp->shell); @@ -292,22 +290,16 @@ gdisplay_close_warning_dialog (gchar *image_name, GtkWidget *mbox; gchar *warning_buf; - /* FIXUP this will raise any prexsisting close dialogs, which can be a - a bit confusing if you tried to close a new window because you had - forgotten the old dialog was still around */ - /* If a warning dialog already exists raise the window and get out */ - if (warning_dialog != NULL) + if (gdisp->warning_dialog != NULL) { - gdk_window_raise (warning_dialog->window); + gdk_window_raise (gdisp->warning_dialog->window); return; } - menus_set_sensitive ("/File/Close", FALSE); - warning_buf = g_strdup_printf (_("Changes were made to %s.\nClose anyway?"), image_name); - warning_dialog = mbox = + gdisp->warning_dialog = mbox = gimp_query_boolean_box (image_name, gimp_standard_help_func, "dialogs/really_close.html", @@ -320,9 +312,5 @@ gdisplay_close_warning_dialog (gchar *image_name, g_free (warning_buf); - gtk_signal_connect (GTK_OBJECT (mbox), "destroy", - GTK_SIGNAL_FUNC (gtk_widget_destroyed), - &warning_dialog); - gtk_widget_show (mbox); } diff --git a/app/display/gimpdisplay.c b/app/display/gimpdisplay.c index 32ff043d9a..9315ee5f7a 100644 --- a/app/display/gimpdisplay.c +++ b/app/display/gimpdisplay.c @@ -132,6 +132,8 @@ gdisplay_new (GimpImage *gimage, gdisp->cd_list = NULL; gdisp->cd_ui = NULL; + gdisp->warning_dialog = NULL; + /* format the title */ gdisplay_format_title (gdisp, title, MAX_TITLE_BUF); diff --git a/app/display/gimpdisplay.h b/app/display/gimpdisplay.h index 99117c3d36..c98c2c85be 100644 --- a/app/display/gimpdisplay.h +++ b/app/display/gimpdisplay.h @@ -158,6 +158,8 @@ struct _GDisplay GList *cd_list; /* color display conversion stuff */ GtkWidget *cd_ui; /* color display filter dialog */ + + GtkWidget *warning_dialog; /* "Changes were made to %s. Close anyway?" */ }; diff --git a/app/gdisplay.c b/app/gdisplay.c index 32ff043d9a..9315ee5f7a 100644 --- a/app/gdisplay.c +++ b/app/gdisplay.c @@ -132,6 +132,8 @@ gdisplay_new (GimpImage *gimage, gdisp->cd_list = NULL; gdisp->cd_ui = NULL; + gdisp->warning_dialog = NULL; + /* format the title */ gdisplay_format_title (gdisp, title, MAX_TITLE_BUF); diff --git a/app/gdisplay.h b/app/gdisplay.h index 99117c3d36..c98c2c85be 100644 --- a/app/gdisplay.h +++ b/app/gdisplay.h @@ -158,6 +158,8 @@ struct _GDisplay GList *cd_list; /* color display conversion stuff */ GtkWidget *cd_ui; /* color display filter dialog */ + + GtkWidget *warning_dialog; /* "Changes were made to %s. Close anyway?" */ }; diff --git a/app/gdisplay_ops.c b/app/gdisplay_ops.c index 1d97f4c596..627c84f0f6 100644 --- a/app/gdisplay_ops.c +++ b/app/gdisplay_ops.c @@ -40,8 +40,6 @@ static void gdisplay_close_warning_callback (GtkWidget *widget, static void gdisplay_close_warning_dialog (gchar *image_name, GDisplay *gdisp); -static GtkWidget *warning_dialog = NULL; - /* * This file is for operations on the gdisplay object */ @@ -279,7 +277,7 @@ gdisplay_close_warning_callback (GtkWidget *widget, gdisp = (GDisplay *) data; - menus_set_sensitive ("/File/Close", TRUE); + gdisp->warning_dialog = NULL; if (close) gtk_widget_destroy (gdisp->shell); @@ -292,22 +290,16 @@ gdisplay_close_warning_dialog (gchar *image_name, GtkWidget *mbox; gchar *warning_buf; - /* FIXUP this will raise any prexsisting close dialogs, which can be a - a bit confusing if you tried to close a new window because you had - forgotten the old dialog was still around */ - /* If a warning dialog already exists raise the window and get out */ - if (warning_dialog != NULL) + if (gdisp->warning_dialog != NULL) { - gdk_window_raise (warning_dialog->window); + gdk_window_raise (gdisp->warning_dialog->window); return; } - menus_set_sensitive ("/File/Close", FALSE); - warning_buf = g_strdup_printf (_("Changes were made to %s.\nClose anyway?"), image_name); - warning_dialog = mbox = + gdisp->warning_dialog = mbox = gimp_query_boolean_box (image_name, gimp_standard_help_func, "dialogs/really_close.html", @@ -320,9 +312,5 @@ gdisplay_close_warning_dialog (gchar *image_name, g_free (warning_buf); - gtk_signal_connect (GTK_OBJECT (mbox), "destroy", - GTK_SIGNAL_FUNC (gtk_widget_destroyed), - &warning_dialog); - gtk_widget_show (mbox); }