From ff9cf41f9f2fa6c3b1fd98f98c3c2ccaaabc3746 Mon Sep 17 00:00:00 2001 From: Sven Neumann Date: Thu, 13 Nov 2003 12:56:24 +0000 Subject: [PATCH] remember the stroke settings in a less hackish way. 2003-11-13 Sven Neumann * app/gui/stroke-dialog.c: remember the stroke settings in a less hackish way. --- ChangeLog | 5 ++++ app/dialogs/stroke-dialog.c | 60 +++++++++++++++++++++++++------------ app/gui/stroke-dialog.c | 60 +++++++++++++++++++++++++------------ 3 files changed, 87 insertions(+), 38 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1d99cc5121..522251c00c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2003-11-13 Sven Neumann + + * app/gui/stroke-dialog.c: remember the stroke settings in a less + hackish way. + 2003-11-13 Michael Natterer * app/core/gimpimage-undo-push.c (undo_pop_layer): when trying to diff --git a/app/dialogs/stroke-dialog.c b/app/dialogs/stroke-dialog.c index 3fbcc0ded2..78612fdd89 100644 --- a/app/dialogs/stroke-dialog.c +++ b/app/dialogs/stroke-dialog.c @@ -27,6 +27,7 @@ #include "gui-types.h" #include "config/gimpconfig.h" +#include "config/gimpconfig-utils.h" #include "core/gimp.h" #include "core/gimpdrawable.h" @@ -48,13 +49,13 @@ /* local functions */ -static void stroke_dialog_response (GtkWidget *widget, - gint response_id, - GtkWidget *dialog); -static void stroke_dialog_paint_info_selected (GtkWidget *menu, - GimpViewable *viewable, - gpointer insert_date, - GtkWidget *dialog); +static void stroke_dialog_response (GtkWidget *widget, + gint response_id, + GtkWidget *dialog); +static void stroke_dialog_paint_info_selected (GtkWidget *menu, + GimpViewable *viewable, + gpointer insert_date, + GtkWidget *dialog); /* public function */ @@ -66,8 +67,8 @@ stroke_dialog_new (GimpItem *item, const gchar *help_id, GtkWidget *parent) { - static GimpStrokeOptions *options = NULL; - + GimpStrokeOptions *options; + GimpStrokeOptions *saved_options; GimpImage *image; GtkWidget *dialog; GtkWidget *main_vbox; @@ -82,10 +83,14 @@ stroke_dialog_new (GimpItem *item, image = gimp_item_get_image (item); - if (!options) - options = g_object_new (GIMP_TYPE_STROKE_OPTIONS, - "gimp", image->gimp, - NULL); + options = g_object_new (GIMP_TYPE_STROKE_OPTIONS, + "gimp", image->gimp, + NULL); + + saved_options = g_object_get_data (G_OBJECT (image->gimp), + "saved-stroke-options"); + if (saved_options) + gimp_config_sync (GIMP_CONFIG (saved_options), GIMP_CONFIG (options), 0); gimp_context_set_parent (GIMP_CONTEXT (options), gimp_get_user_context (image->gimp)); @@ -115,7 +120,8 @@ stroke_dialog_new (GimpItem *item, dialog); g_object_set_data (G_OBJECT (dialog), "gimp-item", item); - g_object_set_data (G_OBJECT (dialog), "gimp-stroke-options", options); + g_object_set_data_full (G_OBJECT (dialog), "gimp-stroke-options", options, + (GDestroyNotify) g_object_unref); main_vbox = gtk_vbox_new (FALSE, 4); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 6); @@ -265,16 +271,32 @@ stroke_dialog_response (GtkWidget *widget, } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) - options = g_object_get_data (G_OBJECT (dialog), "gimp-stroke-options"); + { + GObject *saved_options; + + options = g_object_get_data (G_OBJECT (dialog), + "gimp-stroke-options"); + + saved_options = g_object_get_data (G_OBJECT (image->gimp), + "saved-stroke-options"); + if (saved_options) + gimp_config_sync (GIMP_CONFIG (options), + GIMP_CONFIG (saved_options), 0); + else + g_object_set_data_full (G_OBJECT (image->gimp), + "saved-stroke-options", + g_object_ref (options), + (GDestroyNotify) g_object_unref); + } else - options = g_object_get_data (G_OBJECT (dialog), "gimp-paint-info"); + { + options = g_object_get_data (G_OBJECT (dialog), "gimp-paint-info"); + } gimp_item_stroke (item, drawable, options); gimp_image_flush (image); - - gtk_widget_destroy (dialog); } - break; + /* fallthrough */ default: gtk_widget_destroy (dialog); diff --git a/app/gui/stroke-dialog.c b/app/gui/stroke-dialog.c index 3fbcc0ded2..78612fdd89 100644 --- a/app/gui/stroke-dialog.c +++ b/app/gui/stroke-dialog.c @@ -27,6 +27,7 @@ #include "gui-types.h" #include "config/gimpconfig.h" +#include "config/gimpconfig-utils.h" #include "core/gimp.h" #include "core/gimpdrawable.h" @@ -48,13 +49,13 @@ /* local functions */ -static void stroke_dialog_response (GtkWidget *widget, - gint response_id, - GtkWidget *dialog); -static void stroke_dialog_paint_info_selected (GtkWidget *menu, - GimpViewable *viewable, - gpointer insert_date, - GtkWidget *dialog); +static void stroke_dialog_response (GtkWidget *widget, + gint response_id, + GtkWidget *dialog); +static void stroke_dialog_paint_info_selected (GtkWidget *menu, + GimpViewable *viewable, + gpointer insert_date, + GtkWidget *dialog); /* public function */ @@ -66,8 +67,8 @@ stroke_dialog_new (GimpItem *item, const gchar *help_id, GtkWidget *parent) { - static GimpStrokeOptions *options = NULL; - + GimpStrokeOptions *options; + GimpStrokeOptions *saved_options; GimpImage *image; GtkWidget *dialog; GtkWidget *main_vbox; @@ -82,10 +83,14 @@ stroke_dialog_new (GimpItem *item, image = gimp_item_get_image (item); - if (!options) - options = g_object_new (GIMP_TYPE_STROKE_OPTIONS, - "gimp", image->gimp, - NULL); + options = g_object_new (GIMP_TYPE_STROKE_OPTIONS, + "gimp", image->gimp, + NULL); + + saved_options = g_object_get_data (G_OBJECT (image->gimp), + "saved-stroke-options"); + if (saved_options) + gimp_config_sync (GIMP_CONFIG (saved_options), GIMP_CONFIG (options), 0); gimp_context_set_parent (GIMP_CONTEXT (options), gimp_get_user_context (image->gimp)); @@ -115,7 +120,8 @@ stroke_dialog_new (GimpItem *item, dialog); g_object_set_data (G_OBJECT (dialog), "gimp-item", item); - g_object_set_data (G_OBJECT (dialog), "gimp-stroke-options", options); + g_object_set_data_full (G_OBJECT (dialog), "gimp-stroke-options", options, + (GDestroyNotify) g_object_unref); main_vbox = gtk_vbox_new (FALSE, 4); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 6); @@ -265,16 +271,32 @@ stroke_dialog_response (GtkWidget *widget, } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) - options = g_object_get_data (G_OBJECT (dialog), "gimp-stroke-options"); + { + GObject *saved_options; + + options = g_object_get_data (G_OBJECT (dialog), + "gimp-stroke-options"); + + saved_options = g_object_get_data (G_OBJECT (image->gimp), + "saved-stroke-options"); + if (saved_options) + gimp_config_sync (GIMP_CONFIG (options), + GIMP_CONFIG (saved_options), 0); + else + g_object_set_data_full (G_OBJECT (image->gimp), + "saved-stroke-options", + g_object_ref (options), + (GDestroyNotify) g_object_unref); + } else - options = g_object_get_data (G_OBJECT (dialog), "gimp-paint-info"); + { + options = g_object_get_data (G_OBJECT (dialog), "gimp-paint-info"); + } gimp_item_stroke (item, drawable, options); gimp_image_flush (image); - - gtk_widget_destroy (dialog); } - break; + /* fallthrough */ default: gtk_widget_destroy (dialog);