[gimp] app: clean up template-options-dialog like other dialogs
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: clean up template-options-dialog like other dialogs
- Date: Sun, 30 Oct 2016 19:55:33 +0000 (UTC)
commit bc6679974b143754e7bef4cb2d8f4595e55927ba
Author: Michael Natterer <mitch gimp org>
Date: Sun Oct 30 20:54:47 2016 +0100
app: clean up template-options-dialog like other dialogs
app/actions/templates-commands.c | 133 +++++++++++++++++----------------
app/dialogs/template-options-dialog.c | 101 ++++++++++++++++++-------
app/dialogs/template-options-dialog.h | 37 ++++-----
3 files changed, 161 insertions(+), 110 deletions(-)
---
diff --git a/app/actions/templates-commands.c b/app/actions/templates-commands.c
index d4a0dd5..ab165ce 100644
--- a/app/actions/templates-commands.c
+++ b/app/actions/templates-commands.c
@@ -42,6 +42,7 @@
#include "widgets/gimptemplateview.h"
#include "widgets/gimpwidgets-utils.h"
+#include "dialogs/dialogs.h"
#include "dialogs/template-options-dialog.h"
#include "actions.h"
@@ -60,16 +61,20 @@ typedef struct
/* local function prototypes */
-static void templates_new_response (GtkWidget *dialog,
- gint response_id,
- TemplateOptionsDialog *options);
-static void templates_edit_response (GtkWidget *widget,
- gint response_id,
- TemplateOptionsDialog *options);
-static void templates_delete_response (GtkWidget *dialog,
- gint response_id,
- TemplateDeleteData *delete_data);
-static void templates_delete_data_free (TemplateDeleteData *delete_data);
+static void templates_new_callback (GtkWidget *dialog,
+ GimpTemplate *template,
+ GimpTemplate *edit_template,
+ GimpContext *context,
+ gpointer user_data);
+static void templates_edit_callback (GtkWidget *dialog,
+ GimpTemplate *template,
+ GimpTemplate *edit_template,
+ GimpContext *context,
+ gpointer user_data);
+static void templates_delete_response (GtkWidget *dialog,
+ gint response_id,
+ TemplateDeleteData *delete_data);
+static void templates_delete_data_free (TemplateDeleteData *delete_data);
/* public functions */
@@ -109,25 +114,32 @@ void
templates_new_cmd_callback (GtkAction *action,
gpointer data)
{
- GimpContainerEditor *editor = GIMP_CONTAINER_EDITOR (data);
- GimpContext *context;
- TemplateOptionsDialog *options;
+ GimpContainerEditor *editor = GIMP_CONTAINER_EDITOR (data);
+ GimpContext *context;
+ GtkWidget *dialog;
context = gimp_container_view_get_context (editor->view);
- options = template_options_dialog_new (NULL, context,
- GTK_WIDGET (editor),
- _("New Template"),
- "gimp-template-new",
- GIMP_STOCK_TEMPLATE,
- _("Create a New Template"),
- GIMP_HELP_TEMPLATE_NEW);
+#define NEW_DIALOG_KEY "gimp-template-new-dialog"
+
+ dialog = dialogs_get_dialog (G_OBJECT (context->gimp), NEW_DIALOG_KEY);
- g_signal_connect (options->dialog, "response",
- G_CALLBACK (templates_new_response),
- options);
+ if (! dialog)
+ {
+ dialog = template_options_dialog_new (NULL, context,
+ GTK_WIDGET (editor),
+ _("New Template"),
+ "gimp-template-new",
+ GIMP_STOCK_TEMPLATE,
+ _("Create a New Template"),
+ GIMP_HELP_TEMPLATE_NEW,
+ templates_new_callback,
+ NULL);
+
+ dialogs_attach_dialog (G_OBJECT (context->gimp), NEW_DIALOG_KEY, dialog);
+ }
- gtk_widget_show (options->dialog);
+ gtk_window_present (GTK_WINDOW (dialog));
}
void
@@ -176,21 +188,28 @@ templates_edit_cmd_callback (GtkAction *action,
if (template && gimp_container_have (container, GIMP_OBJECT (template)))
{
- TemplateOptionsDialog *options;
+ GtkWidget *dialog;
- options = template_options_dialog_new (template, context,
- GTK_WIDGET (editor),
- _("Edit Template"),
- "gimp-template-edit",
- "gtk-edit",
- _("Edit Template"),
- GIMP_HELP_TEMPLATE_EDIT);
+#define EDIT_DIALOG_KEY "gimp-template-edit-dialog"
- g_signal_connect (options->dialog, "response",
- G_CALLBACK (templates_edit_response),
- options);
+ dialog = dialogs_get_dialog (G_OBJECT (template), EDIT_DIALOG_KEY);
- gtk_widget_show (options->dialog);
+ if (! dialog)
+ {
+ dialog = template_options_dialog_new (template, context,
+ GTK_WIDGET (editor),
+ _("Edit Template"),
+ "gimp-template-edit",
+ "gtk-edit",
+ _("Edit Template"),
+ GIMP_HELP_TEMPLATE_EDIT,
+ templates_edit_callback,
+ NULL);
+
+ dialogs_attach_dialog (G_OBJECT (template), EDIT_DIALOG_KEY, dialog);
+ }
+
+ gtk_window_present (GTK_WINDOW (dialog));
}
}
@@ -256,40 +275,28 @@ templates_delete_cmd_callback (GtkAction *action,
/* private functions */
static void
-templates_new_response (GtkWidget *dialog,
- gint response_id,
- TemplateOptionsDialog *options)
+templates_new_callback (GtkWidget *dialog,
+ GimpTemplate *template,
+ GimpTemplate *edit_template,
+ GimpContext *context,
+ gpointer user_data)
{
- if (response_id == GTK_RESPONSE_OK)
- {
- GimpTemplateEditor *editor = GIMP_TEMPLATE_EDITOR (options->editor);
- GimpTemplate *template;
-
- template = gimp_template_editor_get_template (editor);
-
- gimp_container_add (options->gimp->templates, GIMP_OBJECT (template));
- gimp_context_set_template (gimp_get_user_context (options->gimp),
- template);
- }
+ gimp_container_add (context->gimp->templates, GIMP_OBJECT (edit_template));
+ gimp_context_set_template (gimp_get_user_context (context->gimp),
+ edit_template);
gtk_widget_destroy (dialog);
}
static void
-templates_edit_response (GtkWidget *dialog,
- gint response_id,
- TemplateOptionsDialog *options)
+templates_edit_callback (GtkWidget *dialog,
+ GimpTemplate *template,
+ GimpTemplate *edit_template,
+ GimpContext *context,
+ gpointer user_data)
{
- if (response_id == GTK_RESPONSE_OK)
- {
- GimpTemplateEditor *editor = GIMP_TEMPLATE_EDITOR (options->editor);
- GimpTemplate *template;
-
- template = gimp_template_editor_get_template (editor);
-
- gimp_config_sync (G_OBJECT (template),
- G_OBJECT (options->template), 0);
- }
+ gimp_config_sync (G_OBJECT (edit_template),
+ G_OBJECT (template), 0);
gtk_widget_destroy (dialog);
}
diff --git a/app/dialogs/template-options-dialog.c b/app/dialogs/template-options-dialog.c
index 393514d..ecfcf0d 100644
--- a/app/dialogs/template-options-dialog.c
+++ b/app/dialogs/template-options-dialog.c
@@ -39,14 +39,30 @@
#include "gimp-intl.h"
+typedef struct _TemplateOptionsDialog TemplateOptionsDialog;
+
+struct _TemplateOptionsDialog
+{
+ GimpTemplate *template;
+ GimpContext *context;
+ GimpTemplateOptionsCallback callback;
+ gpointer user_data;
+
+ GtkWidget *editor;
+};
+
+
/* local function prototypes */
-static void template_options_dialog_free (TemplateOptionsDialog *dialog);
+static void template_options_dialog_free (TemplateOptionsDialog *private);
+static void template_options_dialog_response (GtkWidget *dialog,
+ gint response_id,
+ TemplateOptionsDialog *private);
/* public function */
-TemplateOptionsDialog *
+GtkWidget *
template_options_dialog_new (GimpTemplate *template,
GimpContext *context,
GtkWidget *parent,
@@ -54,9 +70,12 @@ template_options_dialog_new (GimpTemplate *template,
const gchar *role,
const gchar *icon_name,
const gchar *desc,
- const gchar *help_id)
+ const gchar *help_id,
+ GimpTemplateOptionsCallback callback,
+ gpointer user_data)
{
- TemplateOptionsDialog *options;
+ TemplateOptionsDialog *private;
+ GtkWidget *dialog;
GimpViewable *viewable = NULL;
GtkWidget *vbox;
@@ -68,11 +87,14 @@ template_options_dialog_new (GimpTemplate *template,
g_return_val_if_fail (icon_name != NULL, NULL);
g_return_val_if_fail (desc != NULL, NULL);
g_return_val_if_fail (help_id != NULL, NULL);
+ g_return_val_if_fail (callback != NULL, NULL);
- options = g_slice_new0 (TemplateOptionsDialog);
+ private = g_slice_new0 (TemplateOptionsDialog);
- options->gimp = context->gimp;
- options->template = template;
+ private->template = template;
+ private->context = context;
+ private->callback = callback;
+ private->user_data = user_data;
if (template)
{
@@ -82,52 +104,77 @@ template_options_dialog_new (GimpTemplate *template,
else
{
template =
- gimp_config_duplicate (GIMP_CONFIG (options->gimp->config->default_image));
+ gimp_config_duplicate (GIMP_CONFIG (context->gimp->config->default_image));
viewable = GIMP_VIEWABLE (template);
gimp_object_set_static_name (GIMP_OBJECT (template), _("Unnamed"));
}
- options->dialog =
- gimp_viewable_dialog_new (viewable, context,
- title, role, icon_name, desc,
- parent,
- gimp_standard_help_func, help_id,
+ dialog = gimp_viewable_dialog_new (viewable, context,
+ title, role, icon_name, desc,
+ parent,
+ gimp_standard_help_func, help_id,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_OK,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK, GTK_RESPONSE_OK,
- NULL);
+ NULL);
- gtk_window_set_resizable (GTK_WINDOW (options->dialog), FALSE);
- gtk_dialog_set_alternative_button_order (GTK_DIALOG (options->dialog),
+ gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
GTK_RESPONSE_OK,
GTK_RESPONSE_CANCEL,
-1);
- g_object_weak_ref (G_OBJECT (options->dialog),
- (GWeakNotify) template_options_dialog_free, options);
+ gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+
+ g_object_weak_ref (G_OBJECT (dialog),
+ (GWeakNotify) template_options_dialog_free, private);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (template_options_dialog_response),
+ private);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (options->dialog))),
+ gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
vbox, TRUE, TRUE, 0);
gtk_widget_show (vbox);
- options->editor = gimp_template_editor_new (template, options->gimp, TRUE);
- gtk_box_pack_start (GTK_BOX (vbox), options->editor, FALSE, FALSE, 0);
- gtk_widget_show (options->editor);
+ private->editor = gimp_template_editor_new (template, context->gimp, TRUE);
+ gtk_box_pack_start (GTK_BOX (vbox), private->editor, FALSE, FALSE, 0);
+ gtk_widget_show (private->editor);
g_object_unref (template);
- return options;
+ return dialog;
}
/* private functions */
static void
-template_options_dialog_free (TemplateOptionsDialog *dialog)
+template_options_dialog_free (TemplateOptionsDialog *private)
{
- g_slice_free (TemplateOptionsDialog, dialog);
+ g_slice_free (TemplateOptionsDialog, private);
+}
+
+static void
+template_options_dialog_response (GtkWidget *dialog,
+ gint response_id,
+ TemplateOptionsDialog *private)
+{
+ if (response_id == GTK_RESPONSE_OK)
+ {
+ GimpTemplateEditor *editor = GIMP_TEMPLATE_EDITOR (private->editor);
+
+ private->callback (dialog,
+ private->template,
+ gimp_template_editor_get_template (editor),
+ private->context,
+ private->user_data);
+ }
+ else
+ {
+ gtk_widget_destroy (dialog);
+ }
}
diff --git a/app/dialogs/template-options-dialog.h b/app/dialogs/template-options-dialog.h
index 41d6e21..0bb5389 100644
--- a/app/dialogs/template-options-dialog.h
+++ b/app/dialogs/template-options-dialog.h
@@ -19,26 +19,23 @@
#define __TEMPLATE_OPTIONS_DIALOG_H__
-typedef struct _TemplateOptionsDialog TemplateOptionsDialog;
-
-struct _TemplateOptionsDialog
-{
- GtkWidget *dialog;
- GtkWidget *editor;
-
- Gimp *gimp;
- GimpTemplate *template;
-};
-
-
-TemplateOptionsDialog * template_options_dialog_new (GimpTemplate *template,
- GimpContext *context,
- GtkWidget *parent,
- const gchar *title,
- const gchar *role,
- const gchar *icon_name,
- const gchar *desc,
- const gchar *help_id);
+typedef void (* GimpTemplateOptionsCallback) (GtkWidget *dialog,
+ GimpTemplate *template,
+ GimpTemplate *edit_template,
+ GimpContext *context,
+ gpointer user_data);
+
+
+GtkWidget * template_options_dialog_new (GimpTemplate *template,
+ GimpContext *context,
+ GtkWidget *parent,
+ const gchar *title,
+ const gchar *role,
+ const gchar *icon_name,
+ const gchar *desc,
+ const gchar *help_id,
+ GimpTemplateOptionsCallback callback,
+ gpointer user_data);
#endif /* __TEMPLATE_OPTIONS_DIALOG_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]