[gimp] app: add gimp_tool_gui_set_alternative_button_order() and use it
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add gimp_tool_gui_set_alternative_button_order() and use it
- Date: Fri, 7 Jun 2013 13:20:26 +0000 (UTC)
commit 9a811d276eb901833e2a4274a4fa0e46fbc2992a
Author: Michael Natterer <mitch gimp org>
Date: Fri Jun 7 15:18:24 2013 +0200
app: add gimp_tool_gui_set_alternative_button_order() and use it
Also make some of GimpToolGui's memory management proper, there was
no leak but it needs to be proper in order to add runtime switching
between dialog and overlay.
app/display/gimptoolgui.c | 80 +++++++++++++++++++++++++++++++++++++----
app/display/gimptoolgui.h | 2 +
app/tools/gimpimagemaptool.c | 15 ++++----
app/tools/gimptransformtool.c | 13 +++----
4 files changed, 87 insertions(+), 23 deletions(-)
---
diff --git a/app/display/gimptoolgui.c b/app/display/gimptoolgui.c
index 81c0866..7005ec2 100644
--- a/app/display/gimptoolgui.c
+++ b/app/display/gimptoolgui.c
@@ -43,10 +43,11 @@ typedef struct _GimpToolGuiPrivate GimpToolGuiPrivate;
struct _GimpToolGuiPrivate
{
- gboolean overlay;
+ GimpToolInfo *tool_info;
gchar *desc;
- GimpToolInfo *tool_info;
+ gboolean overlay;
+
GimpDisplayShell *shell;
GtkWidget *dialog;
@@ -79,6 +80,10 @@ gimp_tool_gui_class_init (GimpToolGuiClass *klass)
static void
gimp_tool_gui_init (GimpToolGui *gui)
{
+ GimpToolGuiPrivate *private = GET_PRIVATE (gui);
+
+ private->vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
+ g_object_ref_sink (private->vbox);
}
static void
@@ -86,9 +91,21 @@ gimp_tool_gui_dispose (GObject *object)
{
GimpToolGuiPrivate *private = GET_PRIVATE (object);
+ if (private->tool_info)
+ {
+ g_object_unref (private->tool_info);
+ private->tool_info = NULL;
+ }
+
if (private->shell)
gimp_tool_gui_set_shell (GIMP_TOOL_GUI (object), NULL);
+ if (private->vbox)
+ {
+ g_object_unref (private->vbox);
+ private->vbox = NULL;
+ }
+
if (private->dialog)
{
if (private->overlay)
@@ -97,7 +114,6 @@ gimp_tool_gui_dispose (GObject *object)
gtk_widget_destroy (private->dialog);
private->dialog = NULL;
- private->vbox = NULL;
}
G_OBJECT_CLASS (gimp_tool_gui_parent_class)->dispose (object);
@@ -147,10 +163,10 @@ gimp_tool_gui_new (GimpToolInfo *tool_info,
private = GET_PRIVATE (gui);
- private->overlay = overlay;
+ private->tool_info = g_object_ref (tool_info);
private->desc = g_strdup (desc);
- private->tool_info = tool_info;
+ private->overlay = overlay;
if (overlay)
{
@@ -164,7 +180,7 @@ gimp_tool_gui_new (GimpToolInfo *tool_info,
gtk_container_set_border_width (GTK_CONTAINER (private->dialog), 6);
- private->vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (private->vbox), 0);
gtk_container_add (GTK_CONTAINER (private->dialog), private->vbox);
gtk_widget_show (private->vbox);
}
@@ -176,7 +192,6 @@ gimp_tool_gui_new (GimpToolInfo *tool_info,
gimp_dialog_add_buttons_valist (GIMP_DIALOG (private->dialog), args);
va_end (args);
- private->vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
gtk_container_set_border_width (GTK_CONTAINER (private->vbox), 6);
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (private->dialog))),
private->vbox, TRUE, TRUE, 0);
@@ -345,3 +360,54 @@ gimp_tool_gui_set_response_sensitive (GimpToolGui *gui,
response_id, sensitive);
}
}
+
+void
+gimp_tool_gui_set_alternative_button_order (GimpToolGui *gui,
+ ...)
+{
+ GimpToolGuiPrivate *private;
+ va_list args;
+ gint response_id;
+ GList *id_list = NULL;
+ GList *list;
+ gint *ids;
+ gint n_ids;
+ gint i;
+
+ g_return_if_fail (GIMP_IS_TOOL_GUI (gui));
+
+ private = GET_PRIVATE (gui);
+
+ va_start (args, gui);
+
+ for (response_id = va_arg (args, gint);
+ response_id != -1;
+ response_id = va_arg (args, gint))
+ {
+ id_list = g_list_append (id_list, GINT_TO_POINTER (response_id));
+ }
+
+ va_end (args);
+
+ n_ids = g_list_length (id_list);
+ ids = g_new0 (gint, n_ids);
+
+ for (list = id_list, i = 0; list; list = g_list_next (list), i++)
+ {
+ ids[i] = GPOINTER_TO_INT (list->data);
+ }
+
+ g_list_free (id_list);
+
+ if (private->overlay)
+ {
+ /* TODO */
+ }
+ else
+ {
+ gtk_dialog_set_alternative_button_order_from_array (GTK_DIALOG (private->dialog),
+ n_ids, ids);
+ }
+
+ g_free (ids);
+}
diff --git a/app/display/gimptoolgui.h b/app/display/gimptoolgui.h
index 1e2e1d8..58b3d2e 100644
--- a/app/display/gimptoolgui.h
+++ b/app/display/gimptoolgui.h
@@ -69,6 +69,8 @@ void gimp_tool_gui_set_default_response (GimpToolGui *gui,
void gimp_tool_gui_set_response_sensitive (GimpToolGui *gui,
gint response_id,
gboolean sensitive);
+void gimp_tool_gui_set_alternative_button_order (GimpToolGui *gui,
+ ...);
#endif /* __GIMP_TOOL_GUI_H__ */
diff --git a/app/tools/gimpimagemaptool.c b/app/tools/gimpimagemaptool.c
index 9811cfe..3608fee 100644
--- a/app/tools/gimpimagemaptool.c
+++ b/app/tools/gimpimagemaptool.c
@@ -336,14 +336,13 @@ gimp_image_map_tool_initialize (GimpTool *tool,
NULL);
- /* FIXME */
-#if 0
- gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
- RESPONSE_RESET,
- GTK_RESPONSE_OK,
- GTK_RESPONSE_CANCEL,
- -1);
-#endif
+ gimp_tool_gui_set_default_response (image_map_tool->gui, GTK_RESPONSE_OK);
+
+ gimp_tool_gui_set_alternative_button_order (image_map_tool->gui,
+ RESPONSE_RESET,
+ GTK_RESPONSE_OK,
+ GTK_RESPONSE_CANCEL,
+ -1);
dialog = gimp_tool_gui_get_dialog (image_map_tool->gui);
vbox = gimp_tool_gui_get_vbox (image_map_tool->gui);
diff --git a/app/tools/gimptransformtool.c b/app/tools/gimptransformtool.c
index fca6d45..ebb5fa3 100644
--- a/app/tools/gimptransformtool.c
+++ b/app/tools/gimptransformtool.c
@@ -1703,14 +1703,11 @@ gimp_transform_tool_dialog (GimpTransformTool *tr_tool)
gimp_tool_gui_set_default_response (tr_tool->gui, GTK_RESPONSE_OK);
- /* FIXME */
-#if 0
- gtk_dialog_set_alternative_button_order (GTK_DIALOG (tr_tool->dialog),
- RESPONSE_RESET,
- GTK_RESPONSE_OK,
- GTK_RESPONSE_CANCEL,
- -1);
-#endif
+ gimp_tool_gui_set_alternative_button_order (tr_tool->gui,
+ RESPONSE_RESET,
+ GTK_RESPONSE_OK,
+ GTK_RESPONSE_CANCEL,
+ -1);
g_signal_connect (gimp_tool_gui_get_dialog (tr_tool->gui), "response",
G_CALLBACK (gimp_transform_tool_response),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]