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.
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
@ -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__ */
|
||||
|
@ -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);
|
||||
|
@ -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),
|
||||
|
Reference in New Issue
Block a user