23
23
#include "config.h"
28
#include "libgimp-intl.h"
31
#define PALETTE_SELECT_DATA_KEY "gimp-palette-selct-data"
34
typedef struct _PaletteSelect PaletteSelect;
27
#include "gimpuitypes.h"
28
#include "gimppaletteselectbutton.h"
30
#undef GIMP_DISABLE_DEPRECATED
31
#include "gimppalettemenu.h"
34
typedef struct _CompatCallbackData CompatCallbackData;
36
struct _CompatCallbackData
39
GimpRunPaletteCallback callback;
45
gchar *palette_name; /* Local copy */
47
const gchar *temp_palette_callback;
38
GimpRunPaletteCallback callback;
51
/* local function prototypes */
53
static void gimp_palette_select_widget_callback (const gchar *name,
56
static void gimp_palette_select_widget_clicked (GtkWidget *widget,
57
PaletteSelect *palette_sel);
58
static void gimp_palette_select_widget_destroy (GtkWidget *widget,
59
PaletteSelect *palette_sel);
43
static void compat_callback (GimpPaletteSelectButton *palette_button,
44
const gchar *palette_name,
45
gboolean dialog_closing,
63
50
* gimp_palette_select_widget_new:
64
* @title: Title of the dialog to use or %NULL means to use the default
51
* @title: Title of the dialog to use or %NULL to use the default title.
66
52
* @palette_name: Initial palette name.
67
53
* @callback: A function to call when the selected palette changes.
68
54
* @data: A pointer to arbitary data to be used in the call to @callback.
81
67
GimpRunPaletteCallback callback,
84
PaletteSelect *palette_sel;
70
GtkWidget *palette_button;
71
CompatCallbackData *compat_data;
88
73
g_return_val_if_fail (callback != NULL, NULL);
91
title = _("Palette Selection");
93
palette_sel = g_new0 (PaletteSelect, 1);
95
palette_sel->title = g_strdup (title);
96
palette_sel->callback = callback;
97
palette_sel->data = data;
99
palette_sel->palette_name = g_strdup (palette_name);
101
palette_sel->button = gtk_button_new ();
103
g_signal_connect (palette_sel->button, "clicked",
104
G_CALLBACK (gimp_palette_select_widget_clicked),
106
g_signal_connect (palette_sel->button, "destroy",
107
G_CALLBACK (gimp_palette_select_widget_destroy),
110
hbox = gtk_hbox_new (FALSE, 4);
111
gtk_container_add (GTK_CONTAINER (palette_sel->button), hbox);
112
gtk_widget_show (hbox);
114
image = gtk_image_new_from_stock (GIMP_STOCK_PALETTE, GTK_ICON_SIZE_BUTTON);
115
gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
116
gtk_widget_show (image);
118
palette_sel->label = gtk_label_new (palette_name);
119
gtk_box_pack_start (GTK_BOX (hbox), palette_sel->label, TRUE, TRUE, 4);
120
gtk_widget_show (palette_sel->label);
122
g_object_set_data (G_OBJECT (palette_sel->button),
123
PALETTE_SELECT_DATA_KEY, palette_sel);
125
return palette_sel->button;
75
palette_button = gimp_palette_select_button_new (title, palette_name);
77
compat_data = g_new (CompatCallbackData, 1);
78
compat_data->callback = callback;
79
compat_data->data = data;
81
g_signal_connect_data (palette_button, "palette-set",
82
G_CALLBACK (compat_callback),
83
compat_data, (GClosureNotify) g_free, 0);
85
return palette_button;
137
97
gimp_palette_select_widget_close (GtkWidget *widget)
139
PaletteSelect *palette_sel;
141
palette_sel = g_object_get_data (G_OBJECT (widget), PALETTE_SELECT_DATA_KEY);
143
g_return_if_fail (palette_sel != NULL);
145
if (palette_sel->temp_palette_callback)
147
gimp_palette_select_destroy (palette_sel->temp_palette_callback);
148
palette_sel->temp_palette_callback = NULL;
99
g_return_if_fail (widget != NULL);
101
gimp_select_button_close_popup (GIMP_SELECT_BUTTON (widget));
164
116
gimp_palette_select_widget_set (GtkWidget *widget,
165
117
const gchar *palette_name)
167
PaletteSelect *palette_sel;
169
palette_sel = g_object_get_data (G_OBJECT (widget), PALETTE_SELECT_DATA_KEY);
171
g_return_if_fail (palette_sel != NULL);
173
if (palette_sel->temp_palette_callback)
174
gimp_palettes_set_popup (palette_sel->temp_palette_callback, palette_name);
176
gimp_palette_select_widget_callback (palette_name, FALSE, palette_sel);
180
/* private functions */
183
gimp_palette_select_widget_callback (const gchar *name,
187
PaletteSelect *palette_sel = (PaletteSelect *) data;
189
g_free (palette_sel->palette_name);
190
palette_sel->palette_name = g_strdup (name);
192
gtk_label_set_text (GTK_LABEL (palette_sel->label), name);
194
if (palette_sel->callback)
195
palette_sel->callback (name, closing, palette_sel->data);
198
palette_sel->temp_palette_callback = NULL;
202
gimp_palette_select_widget_clicked (GtkWidget *widget,
203
PaletteSelect *palette_sel)
205
if (palette_sel->temp_palette_callback)
207
/* calling gimp_palettes_set_popup() raises the dialog */
208
gimp_palettes_set_popup (palette_sel->temp_palette_callback,
209
palette_sel->palette_name);
213
palette_sel->temp_palette_callback =
214
gimp_palette_select_new (palette_sel->title,
215
palette_sel->palette_name,
216
gimp_palette_select_widget_callback,
222
gimp_palette_select_widget_destroy (GtkWidget *widget,
223
PaletteSelect *palette_sel)
225
if (palette_sel->temp_palette_callback)
227
gimp_palette_select_destroy (palette_sel->temp_palette_callback);
228
palette_sel->temp_palette_callback = NULL;
231
g_free (palette_sel->title);
232
g_free (palette_sel->palette_name);
233
g_free (palette_sel);
119
g_return_if_fail (widget != NULL);
121
gimp_palette_select_button_set_palette (GIMP_PALETTE_SELECT_BUTTON (widget),
126
compat_callback (GimpPaletteSelectButton *palette_button,
127
const gchar *palette_name,
128
gboolean dialog_closing,
131
CompatCallbackData *compat_data = data;
133
compat_data->callback (palette_name, dialog_closing, compat_data->data);