libgimpwidgets: More widgets are now FINAL types

This commit is contained in:
Alx Sa 2024-10-19 02:27:07 +00:00
parent 0b72b028e8
commit bd23d5a926
20 changed files with 835 additions and 1365 deletions

View file

@ -56,11 +56,13 @@ enum
static GParamSpec *object_props[N_PROPS] = { NULL, }; static GParamSpec *object_props[N_PROPS] = { NULL, };
typedef struct _GimpLabelColorPrivate struct _GimpLabelColor
{ {
GtkWidget *area; GimpLabeled parent_instance;
gboolean editable;
} GimpLabelColorPrivate; GtkWidget *area;
gboolean editable;
};
static void gimp_label_color_constructed (GObject *object); static void gimp_label_color_constructed (GObject *object);
static void gimp_label_color_set_property (GObject *object, static void gimp_label_color_set_property (GObject *object,
@ -79,7 +81,7 @@ static GtkWidget * gimp_label_color_populate (GimpLabeled *color,
gint *height); gint *height);
G_DEFINE_TYPE_WITH_PRIVATE (GimpLabelColor, gimp_label_color, GIMP_TYPE_LABELED) G_DEFINE_TYPE (GimpLabelColor, gimp_label_color, GIMP_TYPE_LABELED)
#define parent_class gimp_label_color_parent_class #define parent_class gimp_label_color_parent_class
@ -95,7 +97,7 @@ gimp_label_color_class_init (GimpLabelColorClass *klass)
g_signal_new ("value-changed", g_signal_new ("value-changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpLabelColorClass, value_changed), 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
@ -139,17 +141,16 @@ gimp_label_color_class_init (GimpLabelColorClass *klass)
static void static void
gimp_label_color_init (GimpLabelColor *color) gimp_label_color_init (GimpLabelColor *color)
{ {
GimpLabelColorPrivate *priv = gimp_label_color_get_instance_private (color); GeglColor *black = gegl_color_new ("black");
GeglColor *black = gegl_color_new ("black");
priv->editable = FALSE; color->editable = FALSE;
priv->area = gimp_color_area_new (black, GIMP_COLOR_AREA_SMALL_CHECKS, color->area = gimp_color_area_new (black, GIMP_COLOR_AREA_SMALL_CHECKS,
GDK_BUTTON1_MASK | GDK_BUTTON2_MASK); GDK_BUTTON1_MASK | GDK_BUTTON2_MASK);
/* Typically for a labelled color area, a small square next to your /* Typically for a labelled color area, a small square next to your
* label is probably what you want to display. * label is probably what you want to display.
*/ */
gtk_widget_set_size_request (priv->area, 20, 20); gtk_widget_set_size_request (color->area, 20, 20);
g_object_unref (black); g_object_unref (black);
} }
@ -157,8 +158,7 @@ gimp_label_color_init (GimpLabelColor *color)
static void static void
gimp_label_color_constructed (GObject *object) gimp_label_color_constructed (GObject *object)
{ {
GimpLabelColor *color = GIMP_LABEL_COLOR (object); GimpLabelColor *color = GIMP_LABEL_COLOR (object);
GimpLabelColorPrivate *priv = gimp_label_color_get_instance_private (color);
G_OBJECT_CLASS (parent_class)->constructed (object); G_OBJECT_CLASS (parent_class)->constructed (object);
@ -166,8 +166,8 @@ gimp_label_color_constructed (GObject *object)
* will allow config object to bind the "value" property of this * will allow config object to bind the "value" property of this
* widget, and therefore be updated automatically. * widget, and therefore be updated automatically.
*/ */
g_object_bind_property (G_OBJECT (priv->area), "color", g_object_bind_property (G_OBJECT (color->area), "color",
G_OBJECT (color), "value", G_OBJECT (color), "value",
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
} }
@ -177,8 +177,7 @@ gimp_label_color_set_property (GObject *object,
const GValue *value, const GValue *value,
GParamSpec *pspec) GParamSpec *pspec)
{ {
GimpLabelColor *lcolor = GIMP_LABEL_COLOR (object); GimpLabelColor *lcolor = GIMP_LABEL_COLOR (object);
GimpLabelColorPrivate *priv = gimp_label_color_get_instance_private (lcolor);
switch (property_id) switch (property_id)
{ {
@ -189,7 +188,7 @@ gimp_label_color_set_property (GObject *object,
new_color = g_value_get_object (value); new_color = g_value_get_object (value);
g_object_get (priv->area, g_object_get (lcolor->area,
"color", &color, "color", &color,
NULL); NULL);
@ -198,14 +197,14 @@ gimp_label_color_set_property (GObject *object,
*/ */
if (! gimp_color_is_perceptually_identical (color, new_color)) if (! gimp_color_is_perceptually_identical (color, new_color))
{ {
g_object_set (priv->area, "color", new_color, NULL); g_object_set (lcolor->area, "color", new_color, NULL);
g_signal_emit (object, gimp_label_color_signals[VALUE_CHANGED], 0); g_signal_emit (object, gimp_label_color_signals[VALUE_CHANGED], 0);
} }
g_object_unref (color); g_object_unref (color);
} }
break; break;
case PROP_EDITABLE: case PROP_EDITABLE:
if (priv->editable != g_value_get_boolean (value)) if (lcolor->editable != g_value_get_boolean (value))
{ {
const gchar *dialog_title; const gchar *dialog_title;
GimpLabeled *labeled; GimpLabeled *labeled;
@ -220,34 +219,34 @@ gimp_label_color_set_property (GObject *object,
*/ */
dialog_title = gtk_label_get_text (GTK_LABEL (gimp_labeled_get_label (labeled))); dialog_title = gtk_label_get_text (GTK_LABEL (gimp_labeled_get_label (labeled)));
attached = (gtk_widget_get_parent (priv->area) != NULL); attached = (gtk_widget_get_parent (lcolor->area) != NULL);
g_object_get (priv->area, g_object_get (lcolor->area,
"type", &type, "type", &type,
"color", &color, "color", &color,
NULL); NULL);
gtk_widget_destroy (priv->area); gtk_widget_destroy (lcolor->area);
priv->editable = g_value_get_boolean (value); lcolor->editable = g_value_get_boolean (value);
if (priv->editable) if (lcolor->editable)
priv->area = gimp_color_button_new (dialog_title, lcolor->area = gimp_color_button_new (dialog_title,
20, 20, color, type); 20, 20, color, type);
else else
priv->area = gimp_color_area_new (color, type, lcolor->area = gimp_color_area_new (color, type,
GDK_BUTTON1_MASK | GDK_BUTTON2_MASK); GDK_BUTTON1_MASK | GDK_BUTTON2_MASK);
g_object_unref (color); g_object_unref (color);
gtk_widget_set_size_request (priv->area, 20, 20); gtk_widget_set_size_request (lcolor->area, 20, 20);
g_object_bind_property (G_OBJECT (priv->area), "color", g_object_bind_property (G_OBJECT (lcolor->area), "color",
G_OBJECT (lcolor), "value", G_OBJECT (lcolor), "value",
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
if (attached) if (attached)
{ {
gtk_grid_attach (GTK_GRID (lcolor), priv->area, 1, 0, 1, 1); gtk_grid_attach (GTK_GRID (lcolor), lcolor->area, 1, 0, 1, 1);
gtk_widget_show (priv->area); gtk_widget_show (lcolor->area);
g_signal_emit_by_name (object, "mnemonic-widget-changed", priv->area); g_signal_emit_by_name (object, "mnemonic-widget-changed", lcolor->area);
} }
} }
break; break;
@ -264,8 +263,7 @@ gimp_label_color_get_property (GObject *object,
GValue *value, GValue *value,
GParamSpec *pspec) GParamSpec *pspec)
{ {
GimpLabelColor *color = GIMP_LABEL_COLOR (object); GimpLabelColor *lcolor = GIMP_LABEL_COLOR (object);
GimpLabelColorPrivate *priv = gimp_label_color_get_instance_private (color);
switch (property_id) switch (property_id)
{ {
@ -273,14 +271,14 @@ gimp_label_color_get_property (GObject *object,
{ {
GeglColor *color; GeglColor *color;
g_object_get (priv->area, g_object_get (lcolor->area,
"color", &color, "color", &color,
NULL); NULL);
g_value_take_object (value, color); g_value_take_object (value, color);
} }
break; break;
case PROP_EDITABLE: case PROP_EDITABLE:
g_value_set_boolean (value, priv->editable); g_value_set_boolean (value, lcolor->editable);
break; break;
@ -297,16 +295,15 @@ gimp_label_color_populate (GimpLabeled *labeled,
gint *width, gint *width,
gint *height) gint *height)
{ {
GimpLabelColor *color = GIMP_LABEL_COLOR (labeled); GimpLabelColor *color = GIMP_LABEL_COLOR (labeled);
GimpLabelColorPrivate *priv = gimp_label_color_get_instance_private (color);
gtk_grid_attach (GTK_GRID (color), priv->area, 1, 0, 1, 1); gtk_grid_attach (GTK_GRID (color), color->area, 1, 0, 1, 1);
/* Make sure the label and color won't be glued next to each other's. */ /* Make sure the label and color won't be glued next to each other's. */
gtk_grid_set_column_spacing (GTK_GRID (color), gtk_grid_set_column_spacing (GTK_GRID (color),
4 * gtk_widget_get_scale_factor (GTK_WIDGET (color))); 4 * gtk_widget_get_scale_factor (GTK_WIDGET (color)));
gtk_widget_show (priv->area); gtk_widget_show (color->area);
return priv->area; return color->area;
} }
@ -379,13 +376,12 @@ gimp_label_color_set_value (GimpLabelColor *color,
GeglColor * GeglColor *
gimp_label_color_get_value (GimpLabelColor *color) gimp_label_color_get_value (GimpLabelColor *color)
{ {
GimpLabelColorPrivate *priv = gimp_label_color_get_instance_private (color); GeglColor *value = NULL;
GeglColor *value = NULL; GeglColor *retval;
GeglColor *retval;
g_return_val_if_fail (GIMP_IS_LABEL_COLOR (color), NULL); g_return_val_if_fail (GIMP_IS_LABEL_COLOR (color), NULL);
g_object_get (priv->area, g_object_get (color->area,
"color", &value, "color", &value,
NULL); NULL);
retval = gegl_color_duplicate (value); retval = gegl_color_duplicate (value);
@ -421,13 +417,9 @@ gimp_label_color_set_editable (GimpLabelColor *color,
gboolean gboolean
gimp_label_color_is_editable (GimpLabelColor *color) gimp_label_color_is_editable (GimpLabelColor *color)
{ {
GimpLabelColorPrivate *priv = gimp_label_color_get_instance_private (color);
g_return_val_if_fail (GIMP_IS_LABEL_COLOR (color), FALSE); g_return_val_if_fail (GIMP_IS_LABEL_COLOR (color), FALSE);
priv = gimp_label_color_get_instance_private (color); return GIMP_IS_COLOR_SELECT (color->area);
return GIMP_IS_COLOR_SELECT (priv->area);
} }
/** /**
@ -443,9 +435,7 @@ gimp_label_color_is_editable (GimpLabelColor *color)
GtkWidget * GtkWidget *
gimp_label_color_get_color_widget (GimpLabelColor *color) gimp_label_color_get_color_widget (GimpLabelColor *color)
{ {
GimpLabelColorPrivate *priv = gimp_label_color_get_instance_private (color);
g_return_val_if_fail (GIMP_IS_LABEL_COLOR (color), NULL); g_return_val_if_fail (GIMP_IS_LABEL_COLOR (color), NULL);
return priv->area; return color->area;
} }

View file

@ -31,25 +31,8 @@
G_BEGIN_DECLS G_BEGIN_DECLS
#define GIMP_TYPE_LABEL_COLOR (gimp_label_color_get_type ()) #define GIMP_TYPE_LABEL_COLOR (gimp_label_color_get_type ())
G_DECLARE_DERIVABLE_TYPE (GimpLabelColor, gimp_label_color, GIMP, LABEL_COLOR, GimpLabeled) G_DECLARE_FINAL_TYPE (GimpLabelColor, gimp_label_color, GIMP, LABEL_COLOR, GimpLabeled)
struct _GimpLabelColorClass
{
GimpLabeledClass parent_class;
/* Signals */
void (* value_changed) (GimpLabelColor *color);
/* Padding for future expansion */
void (* _gimp_reserved1) (void);
void (* _gimp_reserved2) (void);
void (* _gimp_reserved3) (void);
void (* _gimp_reserved4) (void);
void (* _gimp_reserved5) (void);
void (* _gimp_reserved6) (void);
void (* _gimp_reserved7) (void);
void (* _gimp_reserved8) (void);
};
GtkWidget * gimp_label_color_new (const gchar *label, GtkWidget * gimp_label_color_new (const gchar *label,
GeglColor *color, GeglColor *color,

View file

@ -51,10 +51,12 @@ enum
PROP_VALUE, PROP_VALUE,
}; };
typedef struct _GimpLabelEntryPrivate struct _GimpLabelEntry
{ {
GtkWidget *entry; GimpLabeled parent_class;
} GimpLabelEntryPrivate;
GtkWidget *entry;
};
static void gimp_label_entry_constructed (GObject *object); static void gimp_label_entry_constructed (GObject *object);
static void gimp_label_entry_set_property (GObject *object, static void gimp_label_entry_set_property (GObject *object,
@ -72,7 +74,7 @@ static GtkWidget * gimp_label_entry_populate (GimpLabeled *entry,
gint *width, gint *width,
gint *height); gint *height);
G_DEFINE_TYPE_WITH_PRIVATE (GimpLabelEntry, gimp_label_entry, GIMP_TYPE_LABELED) G_DEFINE_TYPE (GimpLabelEntry, gimp_label_entry, GIMP_TYPE_LABELED)
#define parent_class gimp_label_entry_parent_class #define parent_class gimp_label_entry_parent_class
@ -88,7 +90,7 @@ gimp_label_entry_class_init (GimpLabelEntryClass *klass)
g_signal_new ("value-changed", g_signal_new ("value-changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpLabelEntryClass, value_changed), 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
@ -116,17 +118,14 @@ gimp_label_entry_class_init (GimpLabelEntryClass *klass)
static void static void
gimp_label_entry_init (GimpLabelEntry *entry) gimp_label_entry_init (GimpLabelEntry *entry)
{ {
GimpLabelEntryPrivate *priv = gimp_label_entry_get_instance_private (entry); entry->entry = gtk_entry_new ();
priv->entry = gtk_entry_new ();
} }
static void static void
gimp_label_entry_constructed (GObject *object) gimp_label_entry_constructed (GObject *object)
{ {
GimpLabelEntry *entry = GIMP_LABEL_ENTRY (object); GimpLabelEntry *entry = GIMP_LABEL_ENTRY (object);
GimpLabelEntryPrivate *priv = gimp_label_entry_get_instance_private (entry); GtkEntryBuffer *buffer = gtk_entry_get_buffer (GTK_ENTRY (entry->entry));
GtkEntryBuffer *buffer = gtk_entry_get_buffer (GTK_ENTRY (priv->entry));
G_OBJECT_CLASS (parent_class)->constructed (object); G_OBJECT_CLASS (parent_class)->constructed (object);
@ -145,14 +144,13 @@ gimp_label_entry_set_property (GObject *object,
const GValue *value, const GValue *value,
GParamSpec *pspec) GParamSpec *pspec)
{ {
GimpLabelEntry *entry = GIMP_LABEL_ENTRY (object); GimpLabelEntry *entry = GIMP_LABEL_ENTRY (object);
GimpLabelEntryPrivate *priv = gimp_label_entry_get_instance_private (entry);
switch (property_id) switch (property_id)
{ {
case PROP_VALUE: case PROP_VALUE:
{ {
GtkEntryBuffer *buffer = gtk_entry_get_buffer (GTK_ENTRY (priv->entry)); GtkEntryBuffer *buffer = gtk_entry_get_buffer (GTK_ENTRY (entry->entry));
/* Avoid looping forever since we have bound this widget's /* Avoid looping forever since we have bound this widget's
* "value" property with the entry button "value" property. * "value" property with the entry button "value" property.
@ -177,14 +175,13 @@ gimp_label_entry_get_property (GObject *object,
GValue *value, GValue *value,
GParamSpec *pspec) GParamSpec *pspec)
{ {
GimpLabelEntry *entry = GIMP_LABEL_ENTRY (object); GimpLabelEntry *entry = GIMP_LABEL_ENTRY (object);
GimpLabelEntryPrivate *priv = gimp_label_entry_get_instance_private (entry);
switch (property_id) switch (property_id)
{ {
case PROP_VALUE: case PROP_VALUE:
{ {
GtkEntryBuffer *buffer = gtk_entry_get_buffer (GTK_ENTRY (priv->entry)); GtkEntryBuffer *buffer = gtk_entry_get_buffer (GTK_ENTRY (entry->entry));
g_value_set_string (value, gtk_entry_buffer_get_text (buffer)); g_value_set_string (value, gtk_entry_buffer_get_text (buffer));
} }
@ -203,16 +200,15 @@ gimp_label_entry_populate (GimpLabeled *labeled,
gint *width, gint *width,
gint *height) gint *height)
{ {
GimpLabelEntry *entry = GIMP_LABEL_ENTRY (labeled); GimpLabelEntry *entry = GIMP_LABEL_ENTRY (labeled);
GimpLabelEntryPrivate *priv = gimp_label_entry_get_instance_private (entry);
gtk_grid_attach (GTK_GRID (entry), priv->entry, 1, 0, 1, 1); gtk_grid_attach (GTK_GRID (entry), entry->entry, 1, 0, 1, 1);
/* Make sure the label and entry won't be glued next to each other's. */ /* Make sure the label and entry won't be glued next to each other's. */
gtk_grid_set_column_spacing (GTK_GRID (entry), gtk_grid_set_column_spacing (GTK_GRID (entry),
4 * gtk_widget_get_scale_factor (GTK_WIDGET (entry))); 4 * gtk_widget_get_scale_factor (GTK_WIDGET (entry)));
gtk_widget_show (priv->entry); gtk_widget_show (entry->entry);
return priv->entry; return entry->entry;
} }
@ -267,12 +263,11 @@ gimp_label_entry_set_value (GimpLabelEntry *entry,
const gchar * const gchar *
gimp_label_entry_get_value (GimpLabelEntry *entry) gimp_label_entry_get_value (GimpLabelEntry *entry)
{ {
GimpLabelEntryPrivate *priv = gimp_label_entry_get_instance_private (entry); GtkEntryBuffer *buffer;
GtkEntryBuffer *buffer;
g_return_val_if_fail (GIMP_IS_LABEL_ENTRY (entry), NULL); g_return_val_if_fail (GIMP_IS_LABEL_ENTRY (entry), NULL);
buffer = gtk_entry_get_buffer (GTK_ENTRY (priv->entry)); buffer = gtk_entry_get_buffer (GTK_ENTRY (entry->entry));
return gtk_entry_buffer_get_text (buffer); return gtk_entry_buffer_get_text (buffer);
} }
@ -288,9 +283,7 @@ gimp_label_entry_get_value (GimpLabelEntry *entry)
GtkWidget * GtkWidget *
gimp_label_entry_get_entry (GimpLabelEntry *entry) gimp_label_entry_get_entry (GimpLabelEntry *entry)
{ {
GimpLabelEntryPrivate *priv = gimp_label_entry_get_instance_private (entry);
g_return_val_if_fail (GIMP_IS_LABEL_ENTRY (entry), NULL); g_return_val_if_fail (GIMP_IS_LABEL_ENTRY (entry), NULL);
return priv->entry; return entry->entry;
} }

View file

@ -31,25 +31,8 @@
G_BEGIN_DECLS G_BEGIN_DECLS
#define GIMP_TYPE_LABEL_ENTRY (gimp_label_entry_get_type ()) #define GIMP_TYPE_LABEL_ENTRY (gimp_label_entry_get_type ())
G_DECLARE_DERIVABLE_TYPE (GimpLabelEntry, gimp_label_entry, GIMP, LABEL_ENTRY, GimpLabeled) G_DECLARE_FINAL_TYPE (GimpLabelEntry, gimp_label_entry, GIMP, LABEL_ENTRY, GimpLabeled)
struct _GimpLabelEntryClass
{
GimpLabeledClass parent_class;
/* Signals */
void (* value_changed) (GimpLabelEntry *entry);
/* Padding for future expansion */
void (* _gimp_reserved1) (void);
void (* _gimp_reserved2) (void);
void (* _gimp_reserved3) (void);
void (* _gimp_reserved4) (void);
void (* _gimp_reserved5) (void);
void (* _gimp_reserved6) (void);
void (* _gimp_reserved7) (void);
void (* _gimp_reserved8) (void);
};
GtkWidget * gimp_label_entry_new (const gchar *label); GtkWidget * gimp_label_entry_new (const gchar *label);

View file

@ -53,13 +53,13 @@ enum
PROP_WIDGET, PROP_WIDGET,
}; };
typedef struct _GimpLabelIntWidgetPrivate struct _GimpLabelIntWidget
{ {
GimpLabeled parent_instance; GimpLabeled parent_instance;
GtkWidget *widget; GtkWidget *widget;
gint value; gint value;
} GimpLabelIntWidgetPrivate; };
static void gimp_label_int_widget_constructed (GObject *object); static void gimp_label_int_widget_constructed (GObject *object);
static void gimp_label_int_widget_set_property (GObject *object, static void gimp_label_int_widget_set_property (GObject *object,
@ -77,7 +77,7 @@ static GtkWidget * gimp_label_int_widget_populate (GimpLabeled *widge
gint *width, gint *width,
gint *height); gint *height);
G_DEFINE_TYPE_WITH_PRIVATE (GimpLabelIntWidget, gimp_label_int_widget, GIMP_TYPE_LABELED) G_DEFINE_TYPE (GimpLabelIntWidget, gimp_label_int_widget, GIMP_TYPE_LABELED)
#define parent_class gimp_label_int_widget_parent_class #define parent_class gimp_label_int_widget_parent_class
@ -93,7 +93,7 @@ gimp_label_int_widget_class_init (GimpLabelIntWidgetClass *klass)
g_signal_new ("value-changed", g_signal_new ("value-changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpLabelIntWidgetClass, value_changed), 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
@ -139,8 +139,7 @@ gimp_label_int_widget_init (GimpLabelIntWidget *widget)
static void static void
gimp_label_int_widget_constructed (GObject *object) gimp_label_int_widget_constructed (GObject *object)
{ {
GimpLabelIntWidget *widget = GIMP_LABEL_INT_WIDGET (object); GimpLabelIntWidget *widget = GIMP_LABEL_INT_WIDGET (object);
GimpLabelIntWidgetPrivate *priv = gimp_label_int_widget_get_instance_private (widget);
G_OBJECT_CLASS (parent_class)->constructed (object); G_OBJECT_CLASS (parent_class)->constructed (object);
@ -151,8 +150,8 @@ gimp_label_int_widget_constructed (GObject *object)
* will allow config object to bind the "value" property of this * will allow config object to bind the "value" property of this
* widget, and therefore be updated automatically. * widget, and therefore be updated automatically.
*/ */
g_object_bind_property (G_OBJECT (priv->widget), "value", g_object_bind_property (G_OBJECT (widget->widget), "value",
object, "value", object, "value",
G_BINDING_BIDIRECTIONAL | G_BINDING_BIDIRECTIONAL |
G_BINDING_SYNC_CREATE); G_BINDING_SYNC_CREATE);
} }
@ -164,16 +163,15 @@ gimp_label_int_widget_set_property (GObject *object,
GParamSpec *pspec) GParamSpec *pspec)
{ {
GimpLabelIntWidget *widget = GIMP_LABEL_INT_WIDGET (object); GimpLabelIntWidget *widget = GIMP_LABEL_INT_WIDGET (object);
GimpLabelIntWidgetPrivate *priv = gimp_label_int_widget_get_instance_private (widget);
switch (property_id) switch (property_id)
{ {
case PROP_VALUE: case PROP_VALUE:
priv->value = g_value_get_int (value); widget->value = g_value_get_int (value);
g_signal_emit (object, gimp_label_int_widget_signals[VALUE_CHANGED], 0); g_signal_emit (object, gimp_label_int_widget_signals[VALUE_CHANGED], 0);
break; break;
case PROP_WIDGET: case PROP_WIDGET:
priv->widget = g_value_get_object (value); widget->widget = g_value_get_object (value);
break; break;
default: default:
@ -188,16 +186,15 @@ gimp_label_int_widget_get_property (GObject *object,
GValue *value, GValue *value,
GParamSpec *pspec) GParamSpec *pspec)
{ {
GimpLabelIntWidget *widget = GIMP_LABEL_INT_WIDGET (object); GimpLabelIntWidget *widget = GIMP_LABEL_INT_WIDGET (object);
GimpLabelIntWidgetPrivate *priv = gimp_label_int_widget_get_instance_private (widget);
switch (property_id) switch (property_id)
{ {
case PROP_VALUE: case PROP_VALUE:
g_value_set_int (value, priv->value); g_value_set_int (value, widget->value);
break; break;
case PROP_WIDGET: case PROP_WIDGET:
g_value_set_object (value, priv->widget); g_value_set_object (value, widget->widget);
break; break;
default: default:
@ -213,13 +210,12 @@ gimp_label_int_widget_populate (GimpLabeled *labeled,
gint *width, gint *width,
gint *height) gint *height)
{ {
GimpLabelIntWidget *widget = GIMP_LABEL_INT_WIDGET (labeled); GimpLabelIntWidget *widget = GIMP_LABEL_INT_WIDGET (labeled);
GimpLabelIntWidgetPrivate *priv = gimp_label_int_widget_get_instance_private (widget);
gtk_grid_attach (GTK_GRID (widget), priv->widget, 1, 0, 1, 1); gtk_grid_attach (GTK_GRID (widget), widget->widget, 1, 0, 1, 1);
gtk_widget_show (priv->widget); gtk_widget_show (widget->widget);
return priv->widget; return widget->widget;
} }
/* Public Functions */ /* Public Functions */
@ -263,11 +259,7 @@ gimp_label_int_widget_new (const gchar *text,
GtkWidget * GtkWidget *
gimp_label_int_widget_get_widget (GimpLabelIntWidget *widget) gimp_label_int_widget_get_widget (GimpLabelIntWidget *widget)
{ {
GimpLabelIntWidgetPrivate *priv;
g_return_val_if_fail (GIMP_IS_LABEL_INT_WIDGET (widget), NULL); g_return_val_if_fail (GIMP_IS_LABEL_INT_WIDGET (widget), NULL);
priv = gimp_label_int_widget_get_instance_private (widget); return widget->widget;
return priv->widget;
} }

View file

@ -31,25 +31,8 @@
G_BEGIN_DECLS G_BEGIN_DECLS
#define GIMP_TYPE_LABEL_INT_WIDGET (gimp_label_int_widget_get_type ()) #define GIMP_TYPE_LABEL_INT_WIDGET (gimp_label_int_widget_get_type ())
G_DECLARE_DERIVABLE_TYPE (GimpLabelIntWidget, gimp_label_int_widget, GIMP, LABEL_INT_WIDGET, GimpLabeled) G_DECLARE_FINAL_TYPE (GimpLabelIntWidget, gimp_label_int_widget, GIMP, LABEL_INT_WIDGET, GimpLabeled)
struct _GimpLabelIntWidgetClass
{
GimpLabeledClass parent_class;
/* Signals */
void (* value_changed) (GtkWidget *int_widget);
/* Padding for future expansion */
void (* _gimp_reserved1) (void);
void (* _gimp_reserved2) (void);
void (* _gimp_reserved3) (void);
void (* _gimp_reserved4) (void);
void (* _gimp_reserved5) (void);
void (* _gimp_reserved6) (void);
void (* _gimp_reserved7) (void);
void (* _gimp_reserved8) (void);
};
GtkWidget * gimp_label_int_widget_new (const gchar *text, GtkWidget * gimp_label_int_widget_new (const gchar *text,
GtkWidget *widget); GtkWidget *widget);

View file

@ -53,13 +53,13 @@ enum
PROP_WIDGET, PROP_WIDGET,
}; };
typedef struct _GimpLabelStringWidgetPrivate struct _GimpLabelStringWidget
{ {
GimpLabeled parent_instance; GimpLabeled parent_instance;
GtkWidget *widget; GtkWidget *widget;
gchar *value; gchar *value;
} GimpLabelStringWidgetPrivate; };
static void gimp_label_string_widget_constructed (GObject *object); static void gimp_label_string_widget_constructed (GObject *object);
static void gimp_label_string_widget_finalize (GObject *object); static void gimp_label_string_widget_finalize (GObject *object);
@ -78,7 +78,7 @@ static GtkWidget * gimp_label_string_widget_populate (GimpLabeled *wi
gint *width, gint *width,
gint *height); gint *height);
G_DEFINE_TYPE_WITH_PRIVATE (GimpLabelStringWidget, gimp_label_string_widget, GIMP_TYPE_LABELED) G_DEFINE_TYPE (GimpLabelStringWidget, gimp_label_string_widget, GIMP_TYPE_LABELED)
#define parent_class gimp_label_string_widget_parent_class #define parent_class gimp_label_string_widget_parent_class
@ -94,7 +94,7 @@ gimp_label_string_widget_class_init (GimpLabelStringWidgetClass *klass)
g_signal_new ("value-changed", g_signal_new ("value-changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpLabelStringWidgetClass, value_changed), 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
@ -141,8 +141,7 @@ gimp_label_string_widget_init (GimpLabelStringWidget *widget)
static void static void
gimp_label_string_widget_constructed (GObject *object) gimp_label_string_widget_constructed (GObject *object)
{ {
GimpLabelStringWidget *widget = GIMP_LABEL_STRING_WIDGET (object); GimpLabelStringWidget *widget = GIMP_LABEL_STRING_WIDGET (object);
GimpLabelStringWidgetPrivate *priv = gimp_label_string_widget_get_instance_private (widget);
G_OBJECT_CLASS (parent_class)->constructed (object); G_OBJECT_CLASS (parent_class)->constructed (object);
@ -153,7 +152,7 @@ gimp_label_string_widget_constructed (GObject *object)
* will allow config object to bind the "value" property of this * will allow config object to bind the "value" property of this
* widget, and therefore be updated automatically. * widget, and therefore be updated automatically.
*/ */
g_object_bind_property (G_OBJECT (priv->widget), "value", g_object_bind_property (G_OBJECT (widget->widget), "value",
object, "value", object, "value",
G_BINDING_BIDIRECTIONAL | G_BINDING_BIDIRECTIONAL |
G_BINDING_SYNC_CREATE); G_BINDING_SYNC_CREATE);
@ -162,10 +161,9 @@ gimp_label_string_widget_constructed (GObject *object)
static void static void
gimp_label_string_widget_finalize (GObject *object) gimp_label_string_widget_finalize (GObject *object)
{ {
GimpLabelStringWidget *widget = GIMP_LABEL_STRING_WIDGET (object); GimpLabelStringWidget *widget = GIMP_LABEL_STRING_WIDGET (object);
GimpLabelStringWidgetPrivate *priv = gimp_label_string_widget_get_instance_private (widget);
g_free (priv->value); g_free (widget->value);
G_OBJECT_CLASS (parent_class)->finalize (object); G_OBJECT_CLASS (parent_class)->finalize (object);
} }
@ -176,21 +174,20 @@ gimp_label_string_widget_set_property (GObject *object,
const GValue *value, const GValue *value,
GParamSpec *pspec) GParamSpec *pspec)
{ {
GimpLabelStringWidget *widget = GIMP_LABEL_STRING_WIDGET (object); GimpLabelStringWidget *widget = GIMP_LABEL_STRING_WIDGET (object);
GimpLabelStringWidgetPrivate *priv = gimp_label_string_widget_get_instance_private (widget);
switch (property_id) switch (property_id)
{ {
case PROP_VALUE: case PROP_VALUE:
if (g_strcmp0 (priv->value, g_value_get_string (value)) != 0) if (g_strcmp0 (widget->value, g_value_get_string (value)) != 0)
{ {
g_free (priv->value); g_free (widget->value);
priv->value = g_value_dup_string (value); widget->value = g_value_dup_string (value);
g_signal_emit (object, gimp_label_string_widget_signals[VALUE_CHANGED], 0); g_signal_emit (object, gimp_label_string_widget_signals[VALUE_CHANGED], 0);
} }
break; break;
case PROP_WIDGET: case PROP_WIDGET:
priv->widget = g_value_get_object (value); widget->widget = g_value_get_object (value);
break; break;
default: default:
@ -205,16 +202,15 @@ gimp_label_string_widget_get_property (GObject *object,
GValue *value, GValue *value,
GParamSpec *pspec) GParamSpec *pspec)
{ {
GimpLabelStringWidget *widget = GIMP_LABEL_STRING_WIDGET (object); GimpLabelStringWidget *widget = GIMP_LABEL_STRING_WIDGET (object);
GimpLabelStringWidgetPrivate *priv = gimp_label_string_widget_get_instance_private (widget);
switch (property_id) switch (property_id)
{ {
case PROP_VALUE: case PROP_VALUE:
g_value_set_string (value, priv->value); g_value_set_string (value, widget->value);
break; break;
case PROP_WIDGET: case PROP_WIDGET:
g_value_set_object (value, priv->widget); g_value_set_object (value, widget->widget);
break; break;
default: default:
@ -230,13 +226,12 @@ gimp_label_string_widget_populate (GimpLabeled *labeled,
gint *width, gint *width,
gint *height) gint *height)
{ {
GimpLabelStringWidget *widget = GIMP_LABEL_STRING_WIDGET (labeled); GimpLabelStringWidget *widget = GIMP_LABEL_STRING_WIDGET (labeled);
GimpLabelStringWidgetPrivate *priv = gimp_label_string_widget_get_instance_private (widget);
gtk_grid_attach (GTK_GRID (widget), priv->widget, 1, 0, 1, 1); gtk_grid_attach (GTK_GRID (widget), widget->widget, 1, 0, 1, 1);
gtk_widget_show (priv->widget); gtk_widget_show (widget->widget);
return priv->widget; return widget->widget;
} }
/* Public Functions */ /* Public Functions */
@ -281,11 +276,7 @@ gimp_label_string_widget_new (const gchar *text,
GtkWidget * GtkWidget *
gimp_label_string_widget_get_widget (GimpLabelStringWidget *widget) gimp_label_string_widget_get_widget (GimpLabelStringWidget *widget)
{ {
GimpLabelStringWidgetPrivate *priv;
g_return_val_if_fail (GIMP_IS_LABEL_STRING_WIDGET (widget), NULL); g_return_val_if_fail (GIMP_IS_LABEL_STRING_WIDGET (widget), NULL);
priv = gimp_label_string_widget_get_instance_private (widget); return widget->widget;
return priv->widget;
} }

View file

@ -31,25 +31,8 @@
G_BEGIN_DECLS G_BEGIN_DECLS
#define GIMP_TYPE_LABEL_STRING_WIDGET (gimp_label_string_widget_get_type ()) #define GIMP_TYPE_LABEL_STRING_WIDGET (gimp_label_string_widget_get_type ())
G_DECLARE_DERIVABLE_TYPE (GimpLabelStringWidget, gimp_label_string_widget, GIMP, LABEL_STRING_WIDGET, GimpLabeled) G_DECLARE_FINAL_TYPE (GimpLabelStringWidget, gimp_label_string_widget, GIMP, LABEL_STRING_WIDGET, GimpLabeled)
struct _GimpLabelStringWidgetClass
{
GimpLabeledClass parent_class;
/* Signals */
void (* value_changed) (GtkWidget *string_widget);
/* Padding for future expansion */
void (* _gimp_reserved1) (void);
void (* _gimp_reserved2) (void);
void (* _gimp_reserved3) (void);
void (* _gimp_reserved4) (void);
void (* _gimp_reserved5) (void);
void (* _gimp_reserved6) (void);
void (* _gimp_reserved7) (void);
void (* _gimp_reserved8) (void);
};
GtkWidget * gimp_label_string_widget_new (const gchar *text, GtkWidget * gimp_label_string_widget_new (const gchar *text,
GtkWidget *widget); GtkWidget *widget);

View file

@ -51,8 +51,10 @@ enum
}; };
typedef struct _GimpMemsizeEntryPrivate struct _GimpMemsizeEntry
{ {
GtkBox parent_instance;
guint64 value; guint64 value;
guint64 lower; guint64 lower;
guint64 upper; guint64 upper;
@ -63,7 +65,7 @@ typedef struct _GimpMemsizeEntryPrivate
GtkAdjustment *adjustment; GtkAdjustment *adjustment;
GtkWidget *spinbutton; GtkWidget *spinbutton;
GtkWidget *menu; GtkWidget *menu;
} GimpMemsizeEntryPrivate; } ;
static void gimp_memsize_entry_adj_callback (GtkAdjustment *adj, static void gimp_memsize_entry_adj_callback (GtkAdjustment *adj,
@ -74,7 +76,7 @@ static void gimp_memsize_entry_unit_callback (GtkWidget *widget,
static guint64 gimp_memsize_entry_get_rounded_value (GimpMemsizeEntry *entry, static guint64 gimp_memsize_entry_get_rounded_value (GimpMemsizeEntry *entry,
guint64 value); guint64 value);
G_DEFINE_TYPE_WITH_PRIVATE (GimpMemsizeEntry, gimp_memsize_entry, GTK_TYPE_BOX) G_DEFINE_TYPE (GimpMemsizeEntry, gimp_memsize_entry, GTK_TYPE_BOX)
#define parent_class gimp_memsize_entry_parent_class #define parent_class gimp_memsize_entry_parent_class
@ -84,13 +86,11 @@ static guint gimp_memsize_entry_signals[LAST_SIGNAL] = { 0 };
static void static void
gimp_memsize_entry_class_init (GimpMemsizeEntryClass *klass) gimp_memsize_entry_class_init (GimpMemsizeEntryClass *klass)
{ {
klass->value_changed = NULL;
gimp_memsize_entry_signals[VALUE_CHANGED] = gimp_memsize_entry_signals[VALUE_CHANGED] =
g_signal_new ("value-changed", g_signal_new ("value-changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpMemsizeEntryClass, value_changed), 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
} }
@ -108,16 +108,13 @@ static void
gimp_memsize_entry_adj_callback (GtkAdjustment *adj, gimp_memsize_entry_adj_callback (GtkAdjustment *adj,
GimpMemsizeEntry *entry) GimpMemsizeEntry *entry)
{ {
GimpMemsizeEntryPrivate *private; guint64 size = gtk_adjustment_get_value (adj);
guint64 size = gtk_adjustment_get_value (adj);
private = gimp_memsize_entry_get_instance_private (entry); if (gimp_memsize_entry_get_rounded_value (entry, entry->value) != size)
if (gimp_memsize_entry_get_rounded_value (entry, private->value) != size)
/* Do not allow losing accuracy if the converted/displayed value /* Do not allow losing accuracy if the converted/displayed value
* stays the same. * stays the same.
*/ */
private->value = size << private->shift; entry->value = size << entry->shift;
g_signal_emit (entry, gimp_memsize_entry_signals[VALUE_CHANGED], 0); g_signal_emit (entry, gimp_memsize_entry_signals[VALUE_CHANGED], 0);
} }
@ -126,10 +123,7 @@ static void
gimp_memsize_entry_unit_callback (GtkWidget *widget, gimp_memsize_entry_unit_callback (GtkWidget *widget,
GimpMemsizeEntry *entry) GimpMemsizeEntry *entry)
{ {
GimpMemsizeEntryPrivate *private; guint shift;
guint shift;
private = gimp_memsize_entry_get_instance_private (entry);
gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (widget), (gint *) &shift); gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (widget), (gint *) &shift);
@ -139,17 +133,17 @@ gimp_memsize_entry_unit_callback (GtkWidget *widget,
# define CAST # define CAST
#endif #endif
if (shift != private->shift) if (shift != entry->shift)
{ {
private->shift = shift; entry->shift = shift;
gtk_adjustment_configure (private->adjustment, gtk_adjustment_configure (entry->adjustment,
gimp_memsize_entry_get_rounded_value (entry, private->value), gimp_memsize_entry_get_rounded_value (entry, entry->value),
CAST private->lower >> shift, CAST entry->lower >> shift,
CAST private->upper >> shift, CAST entry->upper >> shift,
gtk_adjustment_get_step_increment (private->adjustment), gtk_adjustment_get_step_increment (entry->adjustment),
gtk_adjustment_get_page_increment (private->adjustment), gtk_adjustment_get_page_increment (entry->adjustment),
gtk_adjustment_get_page_size (private->adjustment)); gtk_adjustment_get_page_size (entry->adjustment));
} }
#undef CAST #undef CAST
@ -168,10 +162,7 @@ static guint64
gimp_memsize_entry_get_rounded_value (GimpMemsizeEntry *entry, gimp_memsize_entry_get_rounded_value (GimpMemsizeEntry *entry,
guint64 value) guint64 value)
{ {
GimpMemsizeEntryPrivate *private; guint64 converted;
guint64 converted;
private = gimp_memsize_entry_get_instance_private (entry);
#if _MSC_VER < 1300 #if _MSC_VER < 1300
# define CAST (gint64) # define CAST (gint64)
@ -179,8 +170,8 @@ gimp_memsize_entry_get_rounded_value (GimpMemsizeEntry *entry,
# define CAST # define CAST
#endif #endif
converted = (CAST value >> private->shift) + converted = (CAST value >> entry->shift) +
((CAST private->value >> (private->shift - 1)) & 1); ((CAST entry->value >> (entry->shift - 1)) & 1);
#undef CAST #undef CAST
@ -204,9 +195,8 @@ gimp_memsize_entry_new (guint64 value,
guint64 lower, guint64 lower,
guint64 upper) guint64 upper)
{ {
GimpMemsizeEntry *entry; GimpMemsizeEntry *entry;
GimpMemsizeEntryPrivate *private; guint shift;
guint shift;
#if _MSC_VER < 1300 #if _MSC_VER < 1300
# define CAST (gint64) # define CAST (gint64)
@ -218,8 +208,6 @@ gimp_memsize_entry_new (guint64 value,
entry = g_object_new (GIMP_TYPE_MEMSIZE_ENTRY, NULL); entry = g_object_new (GIMP_TYPE_MEMSIZE_ENTRY, NULL);
private = gimp_memsize_entry_get_instance_private (entry);
for (shift = 30; shift > 10; shift -= 10) for (shift = 30; shift > 10; shift -= 10)
{ {
if (value > (G_GUINT64_CONSTANT (1) << shift) && if (value > (G_GUINT64_CONSTANT (1) << shift) &&
@ -227,43 +215,43 @@ gimp_memsize_entry_new (guint64 value,
break; break;
} }
private->value = value; entry->value = value;
private->lower = lower; entry->lower = lower;
private->upper = upper; entry->upper = upper;
private->shift = shift; entry->shift = shift;
private->adjustment = gtk_adjustment_new (gimp_memsize_entry_get_rounded_value (entry, entry->adjustment = gtk_adjustment_new (gimp_memsize_entry_get_rounded_value (entry,
private->value), entry->value),
CAST (lower >> shift), CAST (lower >> shift),
CAST (upper >> shift), CAST (upper >> shift),
1, 8, 0); 1, 8, 0);
private->spinbutton = gimp_spin_button_new (private->adjustment, 1.0, 0); entry->spinbutton = gimp_spin_button_new (entry->adjustment, 1.0, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (private->spinbutton), TRUE); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (entry->spinbutton), TRUE);
#undef CAST #undef CAST
gtk_entry_set_width_chars (GTK_ENTRY (private->spinbutton), 7); gtk_entry_set_width_chars (GTK_ENTRY (entry->spinbutton), 7);
gtk_box_pack_start (GTK_BOX (entry), private->spinbutton, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (entry), entry->spinbutton, FALSE, FALSE, 0);
gtk_widget_show (private->spinbutton); gtk_widget_show (entry->spinbutton);
g_signal_connect (private->adjustment, "value-changed", g_signal_connect (entry->adjustment, "value-changed",
G_CALLBACK (gimp_memsize_entry_adj_callback), G_CALLBACK (gimp_memsize_entry_adj_callback),
entry); entry);
private->menu = gimp_int_combo_box_new (_("Kibibyte"), 10, entry->menu = gimp_int_combo_box_new (_("Kibibyte"), 10,
_("Mebibyte"), 20, _("Mebibyte"), 20,
_("Gibibyte"), 30, _("Gibibyte"), 30,
NULL); NULL);
gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (private->menu), shift); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (entry->menu), shift);
g_signal_connect (private->menu, "changed", g_signal_connect (entry->menu, "changed",
G_CALLBACK (gimp_memsize_entry_unit_callback), G_CALLBACK (gimp_memsize_entry_unit_callback),
entry); entry);
gtk_box_pack_start (GTK_BOX (entry), private->menu, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (entry), entry->menu, FALSE, FALSE, 0);
gtk_widget_show (private->menu); gtk_widget_show (entry->menu);
return GTK_WIDGET (entry); return GTK_WIDGET (entry);
} }
@ -280,14 +268,11 @@ void
gimp_memsize_entry_set_value (GimpMemsizeEntry *entry, gimp_memsize_entry_set_value (GimpMemsizeEntry *entry,
guint64 value) guint64 value)
{ {
GimpMemsizeEntryPrivate *private; guint shift;
guint shift;
g_return_if_fail (GIMP_IS_MEMSIZE_ENTRY (entry)); g_return_if_fail (GIMP_IS_MEMSIZE_ENTRY (entry));
private = gimp_memsize_entry_get_instance_private (entry); g_return_if_fail (value >= entry->lower && value <= entry->upper);
g_return_if_fail (value >= private->lower && value <= private->upper);
for (shift = 30; shift > 10; shift -= 10) for (shift = 30; shift > 10; shift -= 10)
{ {
@ -296,10 +281,10 @@ gimp_memsize_entry_set_value (GimpMemsizeEntry *entry,
break; break;
} }
if (shift != private->shift) if (shift != entry->shift)
gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (private->menu), shift); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (entry->menu), shift);
gtk_adjustment_set_value (private->adjustment, gtk_adjustment_set_value (entry->adjustment,
(gdouble) gimp_memsize_entry_get_rounded_value (entry, value)); (gdouble) gimp_memsize_entry_get_rounded_value (entry, value));
#undef CASE #undef CASE
@ -316,13 +301,9 @@ gimp_memsize_entry_set_value (GimpMemsizeEntry *entry,
guint64 guint64
gimp_memsize_entry_get_value (GimpMemsizeEntry *entry) gimp_memsize_entry_get_value (GimpMemsizeEntry *entry)
{ {
GimpMemsizeEntryPrivate *private;
g_return_val_if_fail (GIMP_IS_MEMSIZE_ENTRY (entry), 0); g_return_val_if_fail (GIMP_IS_MEMSIZE_ENTRY (entry), 0);
private = gimp_memsize_entry_get_instance_private (entry); return entry->value;
return private->value;
} }
/** /**
@ -336,11 +317,7 @@ gimp_memsize_entry_get_value (GimpMemsizeEntry *entry)
GtkWidget * GtkWidget *
gimp_memsize_entry_get_spinbutton (GimpMemsizeEntry *entry) gimp_memsize_entry_get_spinbutton (GimpMemsizeEntry *entry)
{ {
GimpMemsizeEntryPrivate *private;
g_return_val_if_fail (GIMP_IS_MEMSIZE_ENTRY (entry), 0); g_return_val_if_fail (GIMP_IS_MEMSIZE_ENTRY (entry), 0);
private = gimp_memsize_entry_get_instance_private (entry); return entry->spinbutton;
return private->spinbutton;
} }

View file

@ -30,24 +30,7 @@ G_BEGIN_DECLS
#define GIMP_TYPE_MEMSIZE_ENTRY (gimp_memsize_entry_get_type ()) #define GIMP_TYPE_MEMSIZE_ENTRY (gimp_memsize_entry_get_type ())
G_DECLARE_DERIVABLE_TYPE (GimpMemsizeEntry, gimp_memsize_entry, GIMP, MEMSIZE_ENTRY, GtkBox) G_DECLARE_FINAL_TYPE (GimpMemsizeEntry, gimp_memsize_entry, GIMP, MEMSIZE_ENTRY, GtkBox)
struct _GimpMemsizeEntryClass
{
GtkBoxClass parent_class;
void (* value_changed) (GimpMemsizeEntry *entry);
/* Padding for future expansion */
void (* _gimp_reserved1) (void);
void (* _gimp_reserved2) (void);
void (* _gimp_reserved3) (void);
void (* _gimp_reserved4) (void);
void (* _gimp_reserved5) (void);
void (* _gimp_reserved6) (void);
void (* _gimp_reserved7) (void);
void (* _gimp_reserved8) (void);
};
GtkWidget * gimp_memsize_entry_new (guint64 value, GtkWidget * gimp_memsize_entry_new (guint64 value,

View file

@ -82,8 +82,10 @@ typedef enum
} ParseResult; } ParseResult;
typedef struct _GimpNumberPairEntryPrivate struct _GimpNumberPairEntry
{ {
GtkEntry parent_instance;
/* The current number pair displayed in the widget. */ /* The current number pair displayed in the widget. */
gdouble left_number; gdouble left_number;
gdouble right_number; gdouble right_number;
@ -119,7 +121,7 @@ typedef struct _GimpNumberPairEntryPrivate
/* What range of values considered valid. */ /* What range of values considered valid. */
gdouble min_valid_value; gdouble min_valid_value;
gdouble max_valid_value; gdouble max_valid_value;
} GimpNumberPairEntryPrivate; };
static void gimp_number_pair_entry_finalize (GObject *entry); static void gimp_number_pair_entry_finalize (GObject *entry);
@ -160,8 +162,7 @@ static gchar * gimp_number_pair_entry_strdup_number_pair_string
G_DEFINE_TYPE_WITH_PRIVATE (GimpNumberPairEntry, gimp_number_pair_entry, G_DEFINE_TYPE (GimpNumberPairEntry, gimp_number_pair_entry, GTK_TYPE_ENTRY)
GTK_TYPE_ENTRY)
#define parent_class gimp_number_pair_entry_parent_class #define parent_class gimp_number_pair_entry_parent_class
@ -184,7 +185,7 @@ gimp_number_pair_entry_class_init (GimpNumberPairEntryClass *klass)
g_signal_new ("numbers-changed", g_signal_new ("numbers-changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpNumberPairEntryClass, numbers_changed), 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
@ -192,7 +193,7 @@ gimp_number_pair_entry_class_init (GimpNumberPairEntryClass *klass)
g_signal_new ("ratio-changed", g_signal_new ("ratio-changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpNumberPairEntryClass, ratio_changed), 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
@ -200,9 +201,6 @@ gimp_number_pair_entry_class_init (GimpNumberPairEntryClass *klass)
object_class->get_property = gimp_number_pair_entry_get_property; object_class->get_property = gimp_number_pair_entry_get_property;
object_class->finalize = gimp_number_pair_entry_finalize; object_class->finalize = gimp_number_pair_entry_finalize;
klass->numbers_changed = NULL;
klass->ratio_changed = NULL;
g_object_class_install_property (object_class, PROP_LEFT_NUMBER, g_object_class_install_property (object_class, PROP_LEFT_NUMBER,
g_param_spec_double ("left-number", g_param_spec_double ("left-number",
"Left number", "Left number",
@ -300,22 +298,18 @@ gimp_number_pair_entry_class_init (GimpNumberPairEntryClass *klass)
static void static void
gimp_number_pair_entry_init (GimpNumberPairEntry *entry) gimp_number_pair_entry_init (GimpNumberPairEntry *entry)
{ {
GimpNumberPairEntryPrivate *priv; entry->left_number = 1.0;
entry->right_number = 1.0;
priv = gimp_number_pair_entry_get_instance_private (entry); entry->default_left_number = 1.0;
entry->default_right_number = 1.0;
priv->left_number = 1.0; entry->user_override = FALSE;
priv->right_number = 1.0; entry->font_italic = FALSE;
priv->default_left_number = 1.0; entry->separators = NULL;
priv->default_right_number = 1.0; entry->default_text = NULL;
priv->user_override = FALSE; entry->num_separators = 0;
priv->font_italic = FALSE; entry->allow_simplification = FALSE;
priv->separators = NULL; entry->min_valid_value = G_MINDOUBLE;
priv->default_text = NULL; entry->max_valid_value = G_MAXDOUBLE;
priv->num_separators = 0;
priv->allow_simplification = FALSE;
priv->min_valid_value = G_MINDOUBLE;
priv->max_valid_value = G_MAXDOUBLE;
g_signal_connect (entry, "changed", g_signal_connect (entry, "changed",
G_CALLBACK (gimp_number_pair_entry_changed), G_CALLBACK (gimp_number_pair_entry_changed),
@ -340,15 +334,12 @@ gimp_number_pair_entry_init (GimpNumberPairEntry *entry)
static void static void
gimp_number_pair_entry_finalize (GObject *object) gimp_number_pair_entry_finalize (GObject *object)
{ {
GimpNumberPairEntry *entry = GIMP_NUMBER_PAIR_ENTRY (object); GimpNumberPairEntry *entry = GIMP_NUMBER_PAIR_ENTRY (object);
GimpNumberPairEntryPrivate *priv;
priv = gimp_number_pair_entry_get_instance_private (entry); g_clear_pointer (&entry->separators, g_free);
entry->num_separators = 0;
g_clear_pointer (&priv->separators, g_free); g_clear_pointer (&entry->default_text, g_free);
priv->num_separators = 0;
g_clear_pointer (&priv->default_text, g_free);
G_OBJECT_CLASS (parent_class)->finalize (object); G_OBJECT_CLASS (parent_class)->finalize (object);
} }
@ -487,13 +478,9 @@ gimp_number_pair_entry_set_ratio (GimpNumberPairEntry *entry,
gdouble gdouble
gimp_number_pair_entry_get_ratio (GimpNumberPairEntry *entry) gimp_number_pair_entry_get_ratio (GimpNumberPairEntry *entry)
{ {
GimpNumberPairEntryPrivate *priv;
g_return_val_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry), 1.0); g_return_val_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry), 1.0);
priv = gimp_number_pair_entry_get_instance_private (entry); return entry->left_number / entry->right_number;
return priv->left_number / priv->right_number;
} }
/** /**
@ -513,22 +500,19 @@ gimp_number_pair_entry_set_values (GimpNumberPairEntry *entry,
gdouble left, gdouble left,
gdouble right) gdouble right)
{ {
GimpNumberPairEntryPrivate *priv; GimpAspectType old_aspect;
GimpAspectType old_aspect; gdouble old_ratio;
gdouble old_ratio; gdouble old_left_number;
gdouble old_left_number; gdouble old_right_number;
gdouble old_right_number; gboolean numbers_changed = FALSE;
gboolean numbers_changed = FALSE; gboolean ratio_changed = FALSE;
gboolean ratio_changed = FALSE;
g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry)); g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry));
priv = gimp_number_pair_entry_get_instance_private (entry);
/* Store current values */ /* Store current values */
old_left_number = priv->left_number; old_left_number = entry->left_number;
old_right_number = priv->right_number; old_right_number = entry->right_number;
old_ratio = gimp_number_pair_entry_get_ratio (entry); old_ratio = gimp_number_pair_entry_get_ratio (entry);
old_aspect = gimp_number_pair_entry_get_aspect (entry); old_aspect = gimp_number_pair_entry_get_aspect (entry);
@ -540,8 +524,8 @@ gimp_number_pair_entry_set_values (GimpNumberPairEntry *entry,
/* Set the new numbers and update the entry */ /* Set the new numbers and update the entry */
priv->left_number = left; entry->left_number = left;
priv->right_number = right; entry->right_number = right;
g_object_notify (G_OBJECT (entry), "left-number"); g_object_notify (G_OBJECT (entry), "left-number");
g_object_notify (G_OBJECT (entry), "right-number"); g_object_notify (G_OBJECT (entry), "right-number");
@ -561,8 +545,8 @@ gimp_number_pair_entry_set_values (GimpNumberPairEntry *entry,
g_object_notify (G_OBJECT (entry), "aspect"); g_object_notify (G_OBJECT (entry), "aspect");
} }
if (old_left_number != priv->left_number || if (old_left_number != entry->left_number ||
old_right_number != priv->right_number) old_right_number != entry->right_number)
{ {
numbers_changed = TRUE; numbers_changed = TRUE;
} }
@ -597,17 +581,13 @@ gimp_number_pair_entry_get_values (GimpNumberPairEntry *entry,
gdouble *left, gdouble *left,
gdouble *right) gdouble *right)
{ {
GimpNumberPairEntryPrivate *priv;
g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry)); g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry));
priv = gimp_number_pair_entry_get_instance_private (entry);
if (left != NULL) if (left != NULL)
*left = priv->left_number; *left = entry->left_number;
if (right != NULL) if (right != NULL)
*right = priv->right_number; *right = entry->right_number;
} }
/** /**
@ -629,14 +609,10 @@ void
gimp_number_pair_entry_set_default_text (GimpNumberPairEntry *entry, gimp_number_pair_entry_set_default_text (GimpNumberPairEntry *entry,
const gchar *string) const gchar *string)
{ {
GimpNumberPairEntryPrivate *priv;
g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry)); g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry));
priv = gimp_number_pair_entry_get_instance_private (entry); g_free (entry->default_text);
entry->default_text = g_strdup (string);
g_free (priv->default_text);
priv->default_text = g_strdup (string);
gimp_number_pair_entry_update_text (entry); gimp_number_pair_entry_update_text (entry);
@ -655,13 +631,9 @@ gimp_number_pair_entry_set_default_text (GimpNumberPairEntry *entry,
const gchar * const gchar *
gimp_number_pair_entry_get_default_text (GimpNumberPairEntry *entry) gimp_number_pair_entry_get_default_text (GimpNumberPairEntry *entry)
{ {
GimpNumberPairEntryPrivate *priv;
g_return_val_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry), NULL); g_return_val_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry), NULL);
priv = gimp_number_pair_entry_get_instance_private (entry); return entry->default_text;
return priv->default_text;
} }
/** /**
@ -679,28 +651,24 @@ void
gimp_number_pair_entry_set_aspect (GimpNumberPairEntry *entry, gimp_number_pair_entry_set_aspect (GimpNumberPairEntry *entry,
GimpAspectType aspect) GimpAspectType aspect)
{ {
GimpNumberPairEntryPrivate *priv;
g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry)); g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry));
if (gimp_number_pair_entry_get_aspect (entry) == aspect) if (gimp_number_pair_entry_get_aspect (entry) == aspect)
return; return;
priv = gimp_number_pair_entry_get_instance_private (entry);
switch (aspect) switch (aspect)
{ {
case GIMP_ASPECT_SQUARE: case GIMP_ASPECT_SQUARE:
gimp_number_pair_entry_set_values (entry, gimp_number_pair_entry_set_values (entry,
priv->left_number, entry->left_number,
priv->left_number); entry->left_number);
break; break;
case GIMP_ASPECT_LANDSCAPE: case GIMP_ASPECT_LANDSCAPE:
case GIMP_ASPECT_PORTRAIT: case GIMP_ASPECT_PORTRAIT:
gimp_number_pair_entry_set_values (entry, gimp_number_pair_entry_set_values (entry,
priv->right_number, entry->right_number,
priv->left_number); entry->left_number);
break; break;
} }
} }
@ -718,17 +686,13 @@ gimp_number_pair_entry_set_aspect (GimpNumberPairEntry *entry,
GimpAspectType GimpAspectType
gimp_number_pair_entry_get_aspect (GimpNumberPairEntry *entry) gimp_number_pair_entry_get_aspect (GimpNumberPairEntry *entry)
{ {
GimpNumberPairEntryPrivate *priv;
g_return_val_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry), GIMP_ASPECT_SQUARE); g_return_val_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry), GIMP_ASPECT_SQUARE);
priv = gimp_number_pair_entry_get_instance_private (entry); if (entry->left_number > entry->right_number)
if (priv->left_number > priv->right_number)
{ {
return GIMP_ASPECT_LANDSCAPE; return GIMP_ASPECT_LANDSCAPE;
} }
else if (priv->left_number < priv->right_number) else if (entry->left_number < entry->right_number)
{ {
return GIMP_ASPECT_PORTRAIT; return GIMP_ASPECT_PORTRAIT;
} }
@ -742,12 +706,9 @@ static void
gimp_number_pair_entry_modify_font (GimpNumberPairEntry *entry, gimp_number_pair_entry_modify_font (GimpNumberPairEntry *entry,
gboolean italic) gboolean italic)
{ {
GimpNumberPairEntryPrivate *priv; GtkStyleContext *style;
GtkStyleContext *style;
priv = gimp_number_pair_entry_get_instance_private (entry); if (entry->font_italic == italic)
if (priv->font_italic == italic)
return; return;
style = gtk_widget_get_style_context (GTK_WIDGET (entry)); style = gtk_widget_get_style_context (GTK_WIDGET (entry));
@ -761,7 +722,7 @@ gimp_number_pair_entry_modify_font (GimpNumberPairEntry *entry,
GTK_ENTRY_ICON_SECONDARY, GTK_ENTRY_ICON_SECONDARY,
! italic); ! italic);
priv->font_italic = italic; entry->font_italic = italic;
} }
@ -781,19 +742,15 @@ void
gimp_number_pair_entry_set_user_override (GimpNumberPairEntry *entry, gimp_number_pair_entry_set_user_override (GimpNumberPairEntry *entry,
gboolean user_override) gboolean user_override)
{ {
GimpNumberPairEntryPrivate *priv;
g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry)); g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry));
priv = gimp_number_pair_entry_get_instance_private (entry); entry->user_override = user_override;
priv->user_override = user_override;
if (! user_override) if (! user_override)
{ {
gimp_number_pair_entry_set_default_values (entry, gimp_number_pair_entry_set_default_values (entry,
priv->default_left_number, entry->default_left_number,
priv->default_right_number); entry->default_right_number);
} }
gimp_number_pair_entry_modify_font (entry, ! user_override); gimp_number_pair_entry_modify_font (entry, ! user_override);
@ -812,13 +769,9 @@ gimp_number_pair_entry_set_user_override (GimpNumberPairEntry *entry,
gboolean gboolean
gimp_number_pair_entry_get_user_override (GimpNumberPairEntry *entry) gimp_number_pair_entry_get_user_override (GimpNumberPairEntry *entry)
{ {
GimpNumberPairEntryPrivate *priv;
g_return_val_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry), FALSE); g_return_val_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry), FALSE);
priv = gimp_number_pair_entry_get_instance_private (entry); return entry->user_override;
return priv->user_override;
} }
static void static void
@ -839,11 +792,9 @@ static gboolean
gimp_number_pair_entry_events (GtkWidget *widget, gimp_number_pair_entry_events (GtkWidget *widget,
GdkEvent *event) GdkEvent *event)
{ {
GimpNumberPairEntry *entry = GIMP_NUMBER_PAIR_ENTRY (widget); GimpNumberPairEntry *entry = GIMP_NUMBER_PAIR_ENTRY (widget);
GimpNumberPairEntryPrivate *priv; gboolean force_user_override;
gboolean force_user_override;
priv = gimp_number_pair_entry_get_instance_private (entry);
force_user_override = FALSE; force_user_override = FALSE;
switch (event->type) switch (event->type)
@ -882,8 +833,8 @@ gimp_number_pair_entry_events (GtkWidget *widget,
{ {
case PARSE_VALID: case PARSE_VALID:
{ {
if (priv->left_number != left_value || if (entry->left_number != left_value ||
priv->right_number != right_value || entry->right_number != right_value ||
force_user_override) force_user_override)
{ {
gimp_number_pair_entry_set_values (entry, gimp_number_pair_entry_set_values (entry,
@ -931,14 +882,11 @@ gimp_number_pair_entry_strdup_number_pair_string (GimpNumberPairEntry *entry,
gdouble left_number, gdouble left_number,
gdouble right_number) gdouble right_number)
{ {
GimpNumberPairEntryPrivate *priv; gchar sep[8];
gchar sep[8]; gint len;
gint len;
priv = gimp_number_pair_entry_get_instance_private (entry); if (entry->num_separators > 0)
len = g_unichar_to_utf8 (entry->separators[0], sep);
if (priv->num_separators > 0)
len = g_unichar_to_utf8 (priv->separators[0], sep);
else else
len = g_unichar_to_utf8 (DEFAULT_SEPARATOR, sep); len = g_unichar_to_utf8 (DEFAULT_SEPARATOR, sep);
@ -950,24 +898,21 @@ gimp_number_pair_entry_strdup_number_pair_string (GimpNumberPairEntry *entry,
static void static void
gimp_number_pair_entry_update_text (GimpNumberPairEntry *entry) gimp_number_pair_entry_update_text (GimpNumberPairEntry *entry)
{ {
GimpNumberPairEntryPrivate *priv; gchar *buffer;
gchar *buffer;
priv = gimp_number_pair_entry_get_instance_private (entry); if (! entry->user_override &&
entry->default_text != NULL)
if (! priv->user_override &&
priv->default_text != NULL)
{ {
/* Instead of the numbers, show the string explicitly set by a /* Instead of the numbers, show the string explicitly set by a
* client to show when in automatic mode. * client to show when in automatic mode.
*/ */
buffer = g_strdup (priv->default_text); buffer = g_strdup (entry->default_text);
} }
else else
{ {
buffer = gimp_number_pair_entry_strdup_number_pair_string (entry, buffer = gimp_number_pair_entry_strdup_number_pair_string (entry,
priv->left_number, entry->left_number,
priv->right_number); entry->right_number);
} }
g_signal_handlers_block_by_func (entry, g_signal_handlers_block_by_func (entry,
@ -979,23 +924,19 @@ gimp_number_pair_entry_update_text (GimpNumberPairEntry *entry)
g_signal_handlers_unblock_by_func (entry, g_signal_handlers_unblock_by_func (entry,
gimp_number_pair_entry_changed, NULL); gimp_number_pair_entry_changed, NULL);
gimp_number_pair_entry_modify_font (entry, ! priv->user_override); gimp_number_pair_entry_modify_font (entry, ! entry->user_override);
} }
static gboolean static gboolean
gimp_number_pair_entry_valid_separator (GimpNumberPairEntry *entry, gimp_number_pair_entry_valid_separator (GimpNumberPairEntry *entry,
gunichar candidate) gunichar candidate)
{ {
GimpNumberPairEntryPrivate *priv; if (entry->num_separators > 0)
priv = gimp_number_pair_entry_get_instance_private (entry);
if (priv->num_separators > 0)
{ {
gint i; gint i;
for (i = 0; i < priv->num_separators; i++) for (i = 0; i < entry->num_separators; i++)
if (priv->separators[i] == candidate) if (entry->separators[i] == candidate)
return TRUE; return TRUE;
} }
else if (candidate == DEFAULT_SEPARATOR) else if (candidate == DEFAULT_SEPARATOR)
@ -1012,13 +953,10 @@ gimp_number_pair_entry_parse_text (GimpNumberPairEntry *entry,
gdouble *left_value, gdouble *left_value,
gdouble *right_value) gdouble *right_value)
{ {
GimpNumberPairEntryPrivate *priv; gdouble new_left_number;
gdouble new_left_number; gdouble new_right_number;
gdouble new_right_number; gboolean simplify = FALSE;
gboolean simplify = FALSE; gchar *end;
gchar *end;
priv = gimp_number_pair_entry_get_instance_private (entry);
/* skip over whitespace */ /* skip over whitespace */
while (g_unichar_isspace (g_utf8_get_char (text))) while (g_unichar_isspace (g_utf8_get_char (text)))
@ -1061,7 +999,7 @@ gimp_number_pair_entry_parse_text (GimpNumberPairEntry *entry,
/* check for the simplification char */ /* check for the simplification char */
if (g_utf8_get_char (text) == SIMPLIFICATION_CHAR) if (g_utf8_get_char (text) == SIMPLIFICATION_CHAR)
{ {
simplify = priv->allow_simplification; simplify = entry->allow_simplification;
text = g_utf8_next_char (text); text = g_utf8_next_char (text);
} }
@ -1101,30 +1039,27 @@ gimp_number_pair_entry_set_property (GObject *object,
GParamSpec *pspec) GParamSpec *pspec)
{ {
GimpNumberPairEntry *entry = GIMP_NUMBER_PAIR_ENTRY (object); GimpNumberPairEntry *entry = GIMP_NUMBER_PAIR_ENTRY (object);
GimpNumberPairEntryPrivate *priv;
priv = gimp_number_pair_entry_get_instance_private (entry);
switch (property_id) switch (property_id)
{ {
case PROP_LEFT_NUMBER: case PROP_LEFT_NUMBER:
gimp_number_pair_entry_set_values (entry, gimp_number_pair_entry_set_values (entry,
g_value_get_double (value), g_value_get_double (value),
priv->right_number); entry->right_number);
break; break;
case PROP_RIGHT_NUMBER: case PROP_RIGHT_NUMBER:
gimp_number_pair_entry_set_values (entry, gimp_number_pair_entry_set_values (entry,
priv->left_number, entry->left_number,
g_value_get_double (value)); g_value_get_double (value));
break; break;
case PROP_DEFAULT_LEFT_NUMBER: case PROP_DEFAULT_LEFT_NUMBER:
gimp_number_pair_entry_set_default_values (entry, gimp_number_pair_entry_set_default_values (entry,
g_value_get_double (value), g_value_get_double (value),
priv->default_right_number); entry->default_right_number);
break; break;
case PROP_DEFAULT_RIGHT_NUMBER: case PROP_DEFAULT_RIGHT_NUMBER:
gimp_number_pair_entry_set_default_values (entry, gimp_number_pair_entry_set_default_values (entry,
priv->default_left_number, entry->default_left_number,
g_value_get_double (value)); g_value_get_double (value));
break; break;
case PROP_USER_OVERRIDE: case PROP_USER_OVERRIDE:
@ -1132,26 +1067,26 @@ gimp_number_pair_entry_set_property (GObject *object,
g_value_get_boolean (value)); g_value_get_boolean (value));
break; break;
case PROP_SEPARATORS: case PROP_SEPARATORS:
g_free (priv->separators); g_free (entry->separators);
priv->num_separators = 0; entry->num_separators = 0;
if (g_value_get_string (value)) if (g_value_get_string (value))
priv->separators = g_utf8_to_ucs4 (g_value_get_string (value), -1, entry->separators = g_utf8_to_ucs4 (g_value_get_string (value), -1,
NULL, &priv->num_separators, NULL); NULL, &entry->num_separators, NULL);
else else
priv->separators = NULL; entry->separators = NULL;
break; break;
case PROP_DEFAULT_TEXT: case PROP_DEFAULT_TEXT:
gimp_number_pair_entry_set_default_text (entry, gimp_number_pair_entry_set_default_text (entry,
g_value_get_string (value)); g_value_get_string (value));
break; break;
case PROP_ALLOW_SIMPLIFICATION: case PROP_ALLOW_SIMPLIFICATION:
priv->allow_simplification = g_value_get_boolean (value); entry->allow_simplification = g_value_get_boolean (value);
break; break;
case PROP_MIN_VALID_VALUE: case PROP_MIN_VALID_VALUE:
priv->min_valid_value = g_value_get_double (value); entry->min_valid_value = g_value_get_double (value);
break; break;
case PROP_MAX_VALID_VALUE: case PROP_MAX_VALID_VALUE:
priv->max_valid_value = g_value_get_double (value); entry->max_valid_value = g_value_get_double (value);
break; break;
case PROP_RATIO: case PROP_RATIO:
gimp_number_pair_entry_set_ratio (entry, g_value_get_double (value)); gimp_number_pair_entry_set_ratio (entry, g_value_get_double (value));
@ -1171,45 +1106,42 @@ gimp_number_pair_entry_get_property (GObject *object,
GValue *value, GValue *value,
GParamSpec *pspec) GParamSpec *pspec)
{ {
GimpNumberPairEntry *entry = GIMP_NUMBER_PAIR_ENTRY (object); GimpNumberPairEntry *entry = GIMP_NUMBER_PAIR_ENTRY (object);
GimpNumberPairEntryPrivate *priv;
priv = gimp_number_pair_entry_get_instance_private (entry);
switch (property_id) switch (property_id)
{ {
case PROP_LEFT_NUMBER: case PROP_LEFT_NUMBER:
g_value_set_double (value, priv->left_number); g_value_set_double (value, entry->left_number);
break; break;
case PROP_RIGHT_NUMBER: case PROP_RIGHT_NUMBER:
g_value_set_double (value, priv->right_number); g_value_set_double (value, entry->right_number);
break; break;
case PROP_DEFAULT_LEFT_NUMBER: case PROP_DEFAULT_LEFT_NUMBER:
g_value_set_double (value, priv->default_left_number); g_value_set_double (value, entry->default_left_number);
break; break;
case PROP_DEFAULT_RIGHT_NUMBER: case PROP_DEFAULT_RIGHT_NUMBER:
g_value_set_double (value, priv->default_right_number); g_value_set_double (value, entry->default_right_number);
break; break;
case PROP_USER_OVERRIDE: case PROP_USER_OVERRIDE:
g_value_set_boolean (value, priv->user_override); g_value_set_boolean (value, entry->user_override);
break; break;
case PROP_SEPARATORS: case PROP_SEPARATORS:
g_value_take_string (value, g_value_take_string (value,
g_ucs4_to_utf8 (priv->separators, g_ucs4_to_utf8 (entry->separators,
priv->num_separators, entry->num_separators,
NULL, NULL, NULL)); NULL, NULL, NULL));
break; break;
case PROP_ALLOW_SIMPLIFICATION: case PROP_ALLOW_SIMPLIFICATION:
g_value_set_boolean (value, priv->allow_simplification); g_value_set_boolean (value, entry->allow_simplification);
break; break;
case PROP_DEFAULT_TEXT: case PROP_DEFAULT_TEXT:
g_value_set_string (value, priv->default_text); g_value_set_string (value, entry->default_text);
break; break;
case PROP_MIN_VALID_VALUE: case PROP_MIN_VALID_VALUE:
g_value_set_double (value, priv->min_valid_value); g_value_set_double (value, entry->min_valid_value);
break; break;
case PROP_MAX_VALID_VALUE: case PROP_MAX_VALID_VALUE:
g_value_set_double (value, priv->max_valid_value); g_value_set_double (value, entry->max_valid_value);
break; break;
case PROP_RATIO: case PROP_RATIO:
g_value_set_double (value, gimp_number_pair_entry_get_ratio (entry)); g_value_set_double (value, gimp_number_pair_entry_get_ratio (entry));
@ -1236,20 +1168,16 @@ gimp_number_pair_entry_set_default_values (GimpNumberPairEntry *entry,
gdouble left, gdouble left,
gdouble right) gdouble right)
{ {
GimpNumberPairEntryPrivate *priv;
g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry)); g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry));
priv = gimp_number_pair_entry_get_instance_private (entry); entry->default_left_number = left;
entry->default_right_number = right;
priv->default_left_number = left; if (! entry->user_override)
priv->default_right_number = right;
if (! priv->user_override)
{ {
gimp_number_pair_entry_set_values (entry, gimp_number_pair_entry_set_values (entry,
priv->default_left_number, entry->default_left_number,
priv->default_right_number); entry->default_right_number);
} }
} }
@ -1266,17 +1194,13 @@ gimp_number_pair_entry_get_default_values (GimpNumberPairEntry *entry,
gdouble *left, gdouble *left,
gdouble *right) gdouble *right)
{ {
GimpNumberPairEntryPrivate *priv;
g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry)); g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry));
priv = gimp_number_pair_entry_get_instance_private (entry);
if (left != NULL) if (left != NULL)
*left = priv->default_left_number; *left = entry->default_left_number;
if (right != NULL) if (right != NULL)
*right = priv->default_right_number; *right = entry->default_right_number;
} }
static gboolean static gboolean
@ -1284,12 +1208,8 @@ gimp_number_pair_entry_numbers_in_range (GimpNumberPairEntry *entry,
gdouble left_number, gdouble left_number,
gdouble right_number) gdouble right_number)
{ {
GimpNumberPairEntryPrivate *priv; return (left_number >= entry->min_valid_value &&
left_number <= entry->max_valid_value &&
priv = gimp_number_pair_entry_get_instance_private (entry); right_number >= entry->min_valid_value &&
right_number <= entry->max_valid_value);
return (left_number >= priv->min_valid_value &&
left_number <= priv->max_valid_value &&
right_number >= priv->min_valid_value &&
right_number <= priv->max_valid_value);
} }

View file

@ -32,25 +32,7 @@ G_BEGIN_DECLS
#define GIMP_TYPE_NUMBER_PAIR_ENTRY (gimp_number_pair_entry_get_type ()) #define GIMP_TYPE_NUMBER_PAIR_ENTRY (gimp_number_pair_entry_get_type ())
G_DECLARE_DERIVABLE_TYPE (GimpNumberPairEntry, gimp_number_pair_entry, GIMP, NUMBER_PAIR_ENTRY, GtkEntry) G_DECLARE_FINAL_TYPE (GimpNumberPairEntry, gimp_number_pair_entry, GIMP, NUMBER_PAIR_ENTRY, GtkEntry)
struct _GimpNumberPairEntryClass
{
GtkEntryClass parent_class;
void (* numbers_changed) (GimpNumberPairEntry *entry);
void (* ratio_changed) (GimpNumberPairEntry *entry);
/* Padding for future expansion */
void (* _gimp_reserved1) (void);
void (* _gimp_reserved2) (void);
void (* _gimp_reserved3) (void);
void (* _gimp_reserved4) (void);
void (* _gimp_reserved5) (void);
void (* _gimp_reserved6) (void);
void (* _gimp_reserved7) (void);
void (* _gimp_reserved8) (void);
};
GtkWidget * gimp_number_pair_entry_new (const gchar *separators, GtkWidget * gimp_number_pair_entry_new (const gchar *separators,

View file

@ -48,17 +48,19 @@ enum
}; };
typedef struct _GimpOffsetAreaPrivate struct _GimpOffsetArea
{ {
gint orig_width; GtkDrawingArea parent_instance;
gint orig_height;
gint width; gint orig_width;
gint height; gint orig_height;
gint offset_x; gint width;
gint offset_y; gint height;
gdouble display_ratio_x; gint offset_x;
gdouble display_ratio_y; gint offset_y;
} GimpOffsetAreaPrivate; gdouble display_ratio_x;
gdouble display_ratio_y;
};
static void gimp_offset_area_resize (GimpOffsetArea *area); static void gimp_offset_area_resize (GimpOffsetArea *area);
@ -72,8 +74,7 @@ static gboolean gimp_offset_area_draw (GtkWidget *widget,
cairo_t *cr); cairo_t *cr);
G_DEFINE_TYPE_WITH_PRIVATE (GimpOffsetArea, gimp_offset_area, G_DEFINE_TYPE (GimpOffsetArea, gimp_offset_area, GTK_TYPE_DRAWING_AREA)
GTK_TYPE_DRAWING_AREA)
#define parent_class gimp_offset_area_parent_class #define parent_class gimp_offset_area_parent_class
@ -89,7 +90,7 @@ gimp_offset_area_class_init (GimpOffsetAreaClass *klass)
g_signal_new ("offsets-changed", g_signal_new ("offsets-changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpOffsetAreaClass, offsets_changed), 0,
NULL, NULL, NULL, NULL,
_gimp_widgets_marshal_VOID__INT_INT, _gimp_widgets_marshal_VOID__INT_INT,
G_TYPE_NONE, 2, G_TYPE_NONE, 2,
@ -105,12 +106,8 @@ gimp_offset_area_class_init (GimpOffsetAreaClass *klass)
static void static void
gimp_offset_area_init (GimpOffsetArea *area) gimp_offset_area_init (GimpOffsetArea *area)
{ {
GimpOffsetAreaPrivate *private; area->display_ratio_x = 1.0;
area->display_ratio_y = 1.0;
private = gimp_offset_area_get_instance_private (area);
private->display_ratio_x = 1.0;
private->display_ratio_y = 1.0;
gtk_widget_add_events (GTK_WIDGET (area), gtk_widget_add_events (GTK_WIDGET (area),
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_PRESS_MASK |
@ -133,18 +130,15 @@ GtkWidget *
gimp_offset_area_new (gint orig_width, gimp_offset_area_new (gint orig_width,
gint orig_height) gint orig_height)
{ {
GimpOffsetArea *area; GimpOffsetArea *area;
GimpOffsetAreaPrivate *private;
g_return_val_if_fail (orig_width > 0, NULL); g_return_val_if_fail (orig_width > 0, NULL);
g_return_val_if_fail (orig_height > 0, NULL); g_return_val_if_fail (orig_height > 0, NULL);
area = g_object_new (GIMP_TYPE_OFFSET_AREA, NULL); area = g_object_new (GIMP_TYPE_OFFSET_AREA, NULL);
private = gimp_offset_area_get_instance_private (area); area->orig_width = area->width = orig_width;
area->orig_height = area->height = orig_height;
private->orig_width = private->width = orig_width;
private->orig_height = private->height = orig_height;
gimp_offset_area_resize (area); gimp_offset_area_resize (area);
@ -190,39 +184,35 @@ gimp_offset_area_set_size (GimpOffsetArea *area,
gint width, gint width,
gint height) gint height)
{ {
GimpOffsetAreaPrivate *private;
g_return_if_fail (GIMP_IS_OFFSET_AREA (area)); g_return_if_fail (GIMP_IS_OFFSET_AREA (area));
g_return_if_fail (width > 0 && height > 0); g_return_if_fail (width > 0 && height > 0);
private = gimp_offset_area_get_instance_private (area); if (area->width != width || area->height != height)
if (private->width != width || private->height != height)
{ {
gint offset_x; gint offset_x;
gint offset_y; gint offset_y;
private->width = width; area->width = width;
private->height = height; area->height = height;
if (private->orig_width <= private->width) if (area->orig_width <= area->width)
offset_x = CLAMP (private->offset_x, offset_x = CLAMP (area->offset_x,
0, private->width - private->orig_width); 0, area->width - area->orig_width);
else else
offset_x = CLAMP (private->offset_x, offset_x = CLAMP (area->offset_x,
private->width - private->orig_width, 0); area->width - area->orig_width, 0);
if (private->orig_height <= private->height) if (area->orig_height <= area->height)
offset_y = CLAMP (private->offset_y, offset_y = CLAMP (area->offset_y,
0, private->height - private->orig_height); 0, area->height - area->orig_height);
else else
offset_y = CLAMP (private->offset_y, offset_y = CLAMP (area->offset_y,
private->height - private->orig_height, 0); area->height - area->orig_height, 0);
if (offset_x != private->offset_x || offset_y != private->offset_y) if (offset_x != area->offset_x || offset_y != area->offset_y)
{ {
private->offset_x = offset_x; area->offset_x = offset_x;
private->offset_y = offset_y; area->offset_y = offset_y;
g_signal_emit (area, g_signal_emit (area,
gimp_offset_area_signals[OFFSETS_CHANGED], 0, gimp_offset_area_signals[OFFSETS_CHANGED], 0,
@ -247,27 +237,23 @@ gimp_offset_area_set_offsets (GimpOffsetArea *area,
gint offset_x, gint offset_x,
gint offset_y) gint offset_y)
{ {
GimpOffsetAreaPrivate *private;
g_return_if_fail (GIMP_IS_OFFSET_AREA (area)); g_return_if_fail (GIMP_IS_OFFSET_AREA (area));
private = gimp_offset_area_get_instance_private (area); if (area->offset_x != offset_x || area->offset_y != offset_y)
if (private->offset_x != offset_x || private->offset_y != offset_y)
{ {
if (private->orig_width <= private->width) if (area->orig_width <= area->width)
private->offset_x = CLAMP (offset_x, area->offset_x = CLAMP (offset_x,
0, private->width - private->orig_width); 0, area->width - area->orig_width);
else else
private->offset_x = CLAMP (offset_x, area->offset_x = CLAMP (offset_x,
private->width - private->orig_width, 0); area->width - area->orig_width, 0);
if (private->orig_height <= private->height) if (area->orig_height <= area->height)
private->offset_y = CLAMP (offset_y, area->offset_y = CLAMP (offset_y,
0, private->height - private->orig_height); 0, area->height - area->orig_height);
else else
private->offset_y = CLAMP (offset_y, area->offset_y = CLAMP (offset_y,
private->height - private->orig_height, 0); area->height - area->orig_height, 0);
gtk_widget_queue_draw (GTK_WIDGET (area)); gtk_widget_queue_draw (GTK_WIDGET (area));
} }
@ -276,25 +262,22 @@ gimp_offset_area_set_offsets (GimpOffsetArea *area,
static void static void
gimp_offset_area_resize (GimpOffsetArea *area) gimp_offset_area_resize (GimpOffsetArea *area)
{ {
GimpOffsetAreaPrivate *private; gint width;
gint width; gint height;
gint height; gdouble ratio;
gdouble ratio;
private = gimp_offset_area_get_instance_private (area); if (area->orig_width == 0 || area->orig_height == 0)
if (private->orig_width == 0 || private->orig_height == 0)
return; return;
if (private->orig_width <= private->width) if (area->orig_width <= area->width)
width = private->width; width = area->width;
else else
width = private->orig_width * 2 - private->width; width = area->orig_width * 2 - area->width;
if (private->orig_height <= private->height) if (area->orig_height <= area->height)
height = private->height; height = area->height;
else else
height = private->orig_height * 2 - private->height; height = area->orig_height * 2 - area->height;
ratio = (gdouble) DRAWING_AREA_SIZE / (gdouble) MAX (width, height); ratio = (gdouble) DRAWING_AREA_SIZE / (gdouble) MAX (width, height);
@ -309,23 +292,20 @@ static void
gimp_offset_area_size_allocate (GtkWidget *widget, gimp_offset_area_size_allocate (GtkWidget *widget,
GtkAllocation *allocation) GtkAllocation *allocation)
{ {
GimpOffsetArea *area = GIMP_OFFSET_AREA (widget); GimpOffsetArea *area = GIMP_OFFSET_AREA (widget);
GimpOffsetAreaPrivate *private; GdkPixbuf *pixbuf;
GdkPixbuf *pixbuf;
GTK_WIDGET_CLASS (parent_class)->size_allocate (widget, allocation); GTK_WIDGET_CLASS (parent_class)->size_allocate (widget, allocation);
private = gimp_offset_area_get_instance_private (area); area->display_ratio_x = ((gdouble) allocation->width /
((area->orig_width <= area->width) ?
area->width :
area->orig_width * 2 - area->width));
private->display_ratio_x = ((gdouble) allocation->width / area->display_ratio_y = ((gdouble) allocation->height /
((private->orig_width <= private->width) ? ((area->orig_height <= area->height) ?
private->width : area->height :
private->orig_width * 2 - private->width)); area->orig_height * 2 - area->height));
private->display_ratio_y = ((gdouble) allocation->height /
((private->orig_height <= private->height) ?
private->height :
private->orig_height * 2 - private->height));
pixbuf = g_object_get_data (G_OBJECT (area), "pixbuf"); pixbuf = g_object_get_data (G_OBJECT (area), "pixbuf");
@ -335,10 +315,10 @@ gimp_offset_area_size_allocate (GtkWidget *widget,
gint pixbuf_width; gint pixbuf_width;
gint pixbuf_height; gint pixbuf_height;
pixbuf_width = private->display_ratio_x * private->orig_width; pixbuf_width = area->display_ratio_x * area->orig_width;
pixbuf_width = MAX (pixbuf_width, 1); pixbuf_width = MAX (pixbuf_width, 1);
pixbuf_height = private->display_ratio_y * private->orig_height; pixbuf_height = area->display_ratio_y * area->orig_height;
pixbuf_height = MAX (pixbuf_height, 1); pixbuf_height = MAX (pixbuf_height, 1);
copy = g_object_get_data (G_OBJECT (area), "pixbuf-copy"); copy = g_object_get_data (G_OBJECT (area), "pixbuf-copy");
@ -383,14 +363,11 @@ gimp_offset_area_event (GtkWidget *widget,
static gint start_x = 0; static gint start_x = 0;
static gint start_y = 0; static gint start_y = 0;
GimpOffsetArea *area = GIMP_OFFSET_AREA (widget); GimpOffsetArea *area = GIMP_OFFSET_AREA (widget);
GimpOffsetAreaPrivate *private; gint offset_x;
gint offset_x; gint offset_y;
gint offset_y;
private = gimp_offset_area_get_instance_private (area); if (area->orig_width == 0 || area->orig_height == 0)
if (private->orig_width == 0 || private->orig_height == 0)
return FALSE; return FALSE;
switch (event->type) switch (event->type)
@ -400,8 +377,8 @@ gimp_offset_area_event (GtkWidget *widget,
{ {
gtk_grab_add (widget); gtk_grab_add (widget);
orig_offset_x = private->offset_x; orig_offset_x = area->offset_x;
orig_offset_y = private->offset_y; orig_offset_y = area->offset_y;
start_x = event->button.x; start_x = event->button.x;
start_y = event->button.y; start_y = event->button.y;
} }
@ -409,17 +386,17 @@ gimp_offset_area_event (GtkWidget *widget,
case GDK_MOTION_NOTIFY: case GDK_MOTION_NOTIFY:
offset_x = (orig_offset_x + offset_x = (orig_offset_x +
(event->motion.x - start_x) / private->display_ratio_x); (event->motion.x - start_x) / area->display_ratio_x);
offset_y = (orig_offset_y + offset_y = (orig_offset_y +
(event->motion.y - start_y) / private->display_ratio_y); (event->motion.y - start_y) / area->display_ratio_y);
if (private->offset_x != offset_x || private->offset_y != offset_y) if (area->offset_x != offset_x || area->offset_y != offset_y)
{ {
gimp_offset_area_set_offsets (area, offset_x, offset_y); gimp_offset_area_set_offsets (area, offset_x, offset_y);
g_signal_emit (area, g_signal_emit (area,
gimp_offset_area_signals[OFFSETS_CHANGED], 0, gimp_offset_area_signals[OFFSETS_CHANGED], 0,
private->offset_x, private->offset_y); area->offset_x, area->offset_y);
} }
break; break;
@ -443,32 +420,29 @@ static gboolean
gimp_offset_area_draw (GtkWidget *widget, gimp_offset_area_draw (GtkWidget *widget,
cairo_t *cr) cairo_t *cr)
{ {
GimpOffsetArea *area = GIMP_OFFSET_AREA (widget); GimpOffsetArea *area = GIMP_OFFSET_AREA (widget);
GimpOffsetAreaPrivate *private; GtkStyleContext *context = gtk_widget_get_style_context (widget);
GtkStyleContext *context = gtk_widget_get_style_context (widget); GtkAllocation allocation;
GtkAllocation allocation; GdkPixbuf *pixbuf;
GdkPixbuf *pixbuf; gint w, h;
gint w, h; gint x, y;
gint x, y;
private = gimp_offset_area_get_instance_private (area);
gtk_widget_get_allocation (widget, &allocation); gtk_widget_get_allocation (widget, &allocation);
x = (private->display_ratio_x * x = (area->display_ratio_x *
((private->orig_width <= private->width) ? ((area->orig_width <= area->width) ?
private->offset_x : area->offset_x :
private->offset_x + private->orig_width - private->width)); area->offset_x + area->orig_width - area->width));
y = (private->display_ratio_y * y = (area->display_ratio_y *
((private->orig_height <= private->height) ? ((area->orig_height <= area->height) ?
private->offset_y : area->offset_y :
private->offset_y + private->orig_height - private->height)); area->offset_y + area->orig_height - area->height));
w = private->display_ratio_x * private->orig_width; w = area->display_ratio_x * area->orig_width;
w = MAX (w, 1); w = MAX (w, 1);
h = private->display_ratio_y * private->orig_height; h = area->display_ratio_y * area->orig_height;
h = MAX (h, 1); h = MAX (h, 1);
pixbuf = g_object_get_data (G_OBJECT (widget), "pixbuf-copy"); pixbuf = g_object_get_data (G_OBJECT (widget), "pixbuf-copy");
@ -488,15 +462,15 @@ gimp_offset_area_draw (GtkWidget *widget,
gtk_render_frame (context, cr, x, y, w, h); gtk_render_frame (context, cr, x, y, w, h);
} }
if (private->orig_width > private->width || if (area->orig_width > area->width ||
private->orig_height > private->height) area->orig_height > area->height)
{ {
gint line_width; gint line_width;
if (private->orig_width > private->width) if (area->orig_width > area->width)
{ {
x = private->display_ratio_x * (private->orig_width - private->width); x = area->display_ratio_x * (area->orig_width - area->width);
w = private->display_ratio_x * private->width; w = area->display_ratio_x * area->width;
} }
else else
{ {
@ -504,10 +478,10 @@ gimp_offset_area_draw (GtkWidget *widget,
w = allocation.width + 2; w = allocation.width + 2;
} }
if (private->orig_height > private->height) if (area->orig_height > area->height)
{ {
y = private->display_ratio_y * (private->orig_height - private->height); y = area->display_ratio_y * (area->orig_height - area->height);
h = private->display_ratio_y * private->height; h = area->display_ratio_y * area->height;
} }
else else
{ {

View file

@ -32,26 +32,7 @@ G_BEGIN_DECLS
/* For information look into the C source or the html documentation */ /* For information look into the C source or the html documentation */
#define GIMP_TYPE_OFFSET_AREA (gimp_offset_area_get_type ()) #define GIMP_TYPE_OFFSET_AREA (gimp_offset_area_get_type ())
G_DECLARE_DERIVABLE_TYPE (GimpOffsetArea, gimp_offset_area, GIMP, OFFSET_AREA, GtkDrawingArea) G_DECLARE_FINAL_TYPE (GimpOffsetArea, gimp_offset_area, GIMP, OFFSET_AREA, GtkDrawingArea)
struct _GimpOffsetAreaClass
{
GtkDrawingAreaClass parent_class;
void (* offsets_changed) (GimpOffsetArea *offset_area,
gint offset_x,
gint offset_y);
/* Padding for future expansion */
void (* _gimp_reserved1) (void);
void (* _gimp_reserved2) (void);
void (* _gimp_reserved3) (void);
void (* _gimp_reserved4) (void);
void (* _gimp_reserved5) (void);
void (* _gimp_reserved6) (void);
void (* _gimp_reserved7) (void);
void (* _gimp_reserved8) (void);
};
GtkWidget * gimp_offset_area_new (gint orig_width, GtkWidget * gimp_offset_area_new (gint orig_width,

View file

@ -72,8 +72,10 @@ enum
}; };
typedef struct _GimpPageSelectorPrivate struct _GimpPageSelector
{ {
GtkBox parent_instance;
gint n_pages; gint n_pages;
GimpPageSelectorTarget target; GimpPageSelectorTarget target;
@ -84,7 +86,7 @@ typedef struct _GimpPageSelectorPrivate
GtkWidget *range_entry; GtkWidget *range_entry;
GdkPixbuf *default_thumbnail; GdkPixbuf *default_thumbnail;
} GimpPageSelectorPrivate; };
static void gimp_page_selector_finalize (GObject *object); static void gimp_page_selector_finalize (GObject *object);
@ -117,7 +119,7 @@ static GdkPixbuf * gimp_page_selector_add_frame (GtkWidget *widget,
GdkPixbuf *pixbuf); GdkPixbuf *pixbuf);
G_DEFINE_TYPE_WITH_PRIVATE (GimpPageSelector, gimp_page_selector, GTK_TYPE_BOX) G_DEFINE_TYPE (GimpPageSelector, gimp_page_selector, GTK_TYPE_BOX)
#define parent_class gimp_page_selector_parent_class #define parent_class gimp_page_selector_parent_class
@ -134,9 +136,6 @@ gimp_page_selector_class_init (GimpPageSelectorClass *klass)
object_class->get_property = gimp_page_selector_get_property; object_class->get_property = gimp_page_selector_get_property;
object_class->set_property = gimp_page_selector_set_property; object_class->set_property = gimp_page_selector_set_property;
klass->selection_changed = NULL;
klass->activate = NULL;
/** /**
* GimpPageSelector::selection-changed: * GimpPageSelector::selection-changed:
* @widget: the object which received the signal. * @widget: the object which received the signal.
@ -149,7 +148,7 @@ gimp_page_selector_class_init (GimpPageSelectorClass *klass)
g_signal_new ("selection-changed", g_signal_new ("selection-changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpPageSelectorClass, selection_changed), 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
@ -166,7 +165,7 @@ gimp_page_selector_class_init (GimpPageSelectorClass *klass)
g_signal_new ("activate", g_signal_new ("activate",
G_OBJECT_CLASS_TYPE (object_class), G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
G_STRUCT_OFFSET (GimpPageSelectorClass, activate), 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
widget_class->activate_signal = selector_signals[ACTIVATE]; widget_class->activate_signal = selector_signals[ACTIVATE];
@ -204,20 +203,17 @@ gimp_page_selector_class_init (GimpPageSelectorClass *klass)
static void static void
gimp_page_selector_init (GimpPageSelector *selector) gimp_page_selector_init (GimpPageSelector *selector)
{ {
GimpPageSelectorPrivate *priv; GtkWidget *vbox;
GtkWidget *vbox; GtkWidget *sw;
GtkWidget *sw; GtkWidget *hbox;
GtkWidget *hbox; GtkWidget *hbbox;
GtkWidget *hbbox; GtkWidget *button;
GtkWidget *button; GtkWidget *label;
GtkWidget *label; GtkWidget *combo;
GtkWidget *combo; GtkCellRenderer *renderer;
GtkCellRenderer *renderer;
priv = gimp_page_selector_get_instance_private (selector); selector->n_pages = 0;
selector->target = GIMP_PAGE_SELECTOR_TARGET_LAYERS;
priv->n_pages = 0;
priv->target = GIMP_PAGE_SELECTOR_TARGET_LAYERS;
gtk_orientable_set_orientation (GTK_ORIENTABLE (selector), gtk_orientable_set_orientation (GTK_ORIENTABLE (selector),
GTK_ORIENTATION_VERTICAL); GTK_ORIENTATION_VERTICAL);
@ -237,27 +233,27 @@ gimp_page_selector_init (GimpPageSelector *selector)
gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
gtk_widget_show (sw); gtk_widget_show (sw);
priv->store = gtk_list_store_new (4, selector->store = gtk_list_store_new (4,
G_TYPE_INT, G_TYPE_INT,
GDK_TYPE_PIXBUF, GDK_TYPE_PIXBUF,
G_TYPE_STRING, G_TYPE_STRING,
G_TYPE_BOOLEAN); G_TYPE_BOOLEAN);
priv->view = gtk_icon_view_new_with_model (GTK_TREE_MODEL (priv->store)); selector->view = gtk_icon_view_new_with_model (GTK_TREE_MODEL (selector->store));
gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (priv->view), gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (selector->view),
GTK_SELECTION_MULTIPLE); GTK_SELECTION_MULTIPLE);
gtk_container_add (GTK_CONTAINER (sw), priv->view); gtk_container_add (GTK_CONTAINER (sw), selector->view);
gtk_widget_show (priv->view); gtk_widget_show (selector->view);
renderer = gtk_cell_renderer_pixbuf_new (); renderer = gtk_cell_renderer_pixbuf_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (priv->view), renderer, FALSE); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (selector->view), renderer, FALSE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (priv->view), renderer, gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (selector->view), renderer,
"pixbuf", COLUMN_THUMBNAIL, "pixbuf", COLUMN_THUMBNAIL,
NULL); NULL);
renderer = gtk_cell_renderer_text_new (); renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (priv->view), renderer, FALSE); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (selector->view), renderer, FALSE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (priv->view), renderer, gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (selector->view), renderer,
"text", COLUMN_LABEL, "text", COLUMN_LABEL,
NULL); NULL);
g_object_set (renderer, g_object_set (renderer,
@ -267,22 +263,22 @@ gimp_page_selector_init (GimpPageSelector *selector)
"yalign", 0.0, "yalign", 0.0,
NULL); NULL);
g_signal_connect (priv->view, "selection-changed", g_signal_connect (selector->view, "selection-changed",
G_CALLBACK (gimp_page_selector_selection_changed), G_CALLBACK (gimp_page_selector_selection_changed),
selector); selector);
g_signal_connect (priv->view, "item-activated", g_signal_connect (selector->view, "item-activated",
G_CALLBACK (gimp_page_selector_item_activated), G_CALLBACK (gimp_page_selector_item_activated),
selector); selector);
/* Count label */ /* Count label */
priv->count_label = gtk_label_new (_("Nothing selected")); selector->count_label = gtk_label_new (_("Nothing selected"));
gtk_label_set_xalign (GTK_LABEL (priv->count_label), 0.0); gtk_label_set_xalign (GTK_LABEL (selector->count_label), 0.0);
gimp_label_set_attributes (GTK_LABEL (priv->count_label), gimp_label_set_attributes (GTK_LABEL (selector->count_label),
PANGO_ATTR_STYLE, PANGO_STYLE_ITALIC, PANGO_ATTR_STYLE, PANGO_STYLE_ITALIC,
-1); -1);
gtk_box_pack_start (GTK_BOX (vbox), priv->count_label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), selector->count_label, FALSE, FALSE, 0);
gtk_widget_show (priv->count_label); gtk_widget_show (selector->count_label);
/* Select all button & range entry */ /* Select all button & range entry */
@ -302,15 +298,15 @@ gimp_page_selector_init (GimpPageSelector *selector)
G_CALLBACK (gimp_page_selector_select_all), G_CALLBACK (gimp_page_selector_select_all),
selector); selector);
priv->range_entry = gtk_entry_new (); selector->range_entry = gtk_entry_new ();
gtk_widget_set_size_request (priv->range_entry, 80, -1); gtk_widget_set_size_request (selector->range_entry, 80, -1);
gtk_box_pack_end (GTK_BOX (hbox), priv->range_entry, TRUE, TRUE, 0); gtk_box_pack_end (GTK_BOX (hbox), selector->range_entry, TRUE, TRUE, 0);
gtk_widget_show (priv->range_entry); gtk_widget_show (selector->range_entry);
g_signal_connect (priv->range_entry, "focus-out-event", g_signal_connect (selector->range_entry, "focus-out-event",
G_CALLBACK (gimp_page_selector_range_focus_out), G_CALLBACK (gimp_page_selector_range_focus_out),
selector); selector);
g_signal_connect (priv->range_entry, "activate", g_signal_connect (selector->range_entry, "activate",
G_CALLBACK (gimp_page_selector_range_activate), G_CALLBACK (gimp_page_selector_range_activate),
selector); selector);
@ -318,7 +314,7 @@ gimp_page_selector_init (GimpPageSelector *selector)
gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0);
gtk_widget_show (label); gtk_widget_show (label);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), priv->range_entry); gtk_label_set_mnemonic_widget (GTK_LABEL (label), selector->range_entry);
/* Target combo */ /* Target combo */
@ -336,7 +332,7 @@ gimp_page_selector_init (GimpPageSelector *selector)
gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo); gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo);
priv->default_thumbnail = selector->default_thumbnail =
gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
"text-x-generic", 32, 0, NULL); "text-x-generic", 32, 0, NULL);
} }
@ -344,12 +340,9 @@ gimp_page_selector_init (GimpPageSelector *selector)
static void static void
gimp_page_selector_finalize (GObject *object) gimp_page_selector_finalize (GObject *object)
{ {
GimpPageSelector *selector = GIMP_PAGE_SELECTOR (object); GimpPageSelector *selector = GIMP_PAGE_SELECTOR (object);
GimpPageSelectorPrivate *priv;
priv = gimp_page_selector_get_instance_private (selector); g_clear_object (&selector->default_thumbnail);
g_clear_object (&priv->default_thumbnail);
G_OBJECT_CLASS (parent_class)->finalize (object); G_OBJECT_CLASS (parent_class)->finalize (object);
} }
@ -360,18 +353,15 @@ gimp_page_selector_get_property (GObject *object,
GValue *value, GValue *value,
GParamSpec *pspec) GParamSpec *pspec)
{ {
GimpPageSelector *selector = GIMP_PAGE_SELECTOR (object); GimpPageSelector *selector = GIMP_PAGE_SELECTOR (object);
GimpPageSelectorPrivate *priv;
priv = gimp_page_selector_get_instance_private (selector);
switch (property_id) switch (property_id)
{ {
case PROP_N_PAGES: case PROP_N_PAGES:
g_value_set_int (value, priv->n_pages); g_value_set_int (value, selector->n_pages);
break; break;
case PROP_TARGET: case PROP_TARGET:
g_value_set_enum (value, priv->target); g_value_set_enum (value, selector->target);
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@ -385,10 +375,7 @@ gimp_page_selector_set_property (GObject *object,
const GValue *value, const GValue *value,
GParamSpec *pspec) GParamSpec *pspec)
{ {
GimpPageSelector *selector = GIMP_PAGE_SELECTOR (object); GimpPageSelector *selector = GIMP_PAGE_SELECTOR (object);
GimpPageSelectorPrivate *priv;
priv = gimp_page_selector_get_instance_private (selector);
switch (property_id) switch (property_id)
{ {
@ -396,7 +383,7 @@ gimp_page_selector_set_property (GObject *object,
gimp_page_selector_set_n_pages (selector, g_value_get_int (value)); gimp_page_selector_set_n_pages (selector, g_value_get_int (value));
break; break;
case PROP_TARGET: case PROP_TARGET:
priv->target = g_value_get_enum (value); selector->target = g_value_get_enum (value);
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@ -435,39 +422,35 @@ void
gimp_page_selector_set_n_pages (GimpPageSelector *selector, gimp_page_selector_set_n_pages (GimpPageSelector *selector,
gint n_pages) gint n_pages)
{ {
GimpPageSelectorPrivate *priv;
g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector)); g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector));
g_return_if_fail (n_pages >= 0); g_return_if_fail (n_pages >= 0);
priv = gimp_page_selector_get_instance_private (selector); if (n_pages != selector->n_pages)
if (n_pages != priv->n_pages)
{ {
GtkTreeIter iter; GtkTreeIter iter;
gint i; gint i;
if (n_pages < priv->n_pages) if (n_pages < selector->n_pages)
{ {
for (i = n_pages; i < priv->n_pages; i++) for (i = n_pages; i < selector->n_pages; i++)
{ {
gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (priv->store), gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (selector->store),
&iter, NULL, n_pages); &iter, NULL, n_pages);
gtk_list_store_remove (priv->store, &iter); gtk_list_store_remove (selector->store, &iter);
} }
} }
else else
{ {
for (i = priv->n_pages; i < n_pages; i++) for (i = selector->n_pages; i < n_pages; i++)
{ {
gchar *text; gchar *text;
text = g_strdup_printf (_("Page %d"), i + 1); text = g_strdup_printf (_("Page %d"), i + 1);
gtk_list_store_append (priv->store, &iter); gtk_list_store_append (selector->store, &iter);
gtk_list_store_set (priv->store, &iter, gtk_list_store_set (selector->store, &iter,
COLUMN_PAGE_NO, i, COLUMN_PAGE_NO, i,
COLUMN_THUMBNAIL, priv->default_thumbnail, COLUMN_THUMBNAIL, selector->default_thumbnail,
COLUMN_LABEL, text, COLUMN_LABEL, text,
COLUMN_LABEL_SET, FALSE, COLUMN_LABEL_SET, FALSE,
-1); -1);
@ -476,7 +459,7 @@ gimp_page_selector_set_n_pages (GimpPageSelector *selector,
} }
} }
priv->n_pages = n_pages; selector->n_pages = n_pages;
g_object_notify (G_OBJECT (selector), "n-pages"); g_object_notify (G_OBJECT (selector), "n-pages");
} }
@ -493,13 +476,9 @@ gimp_page_selector_set_n_pages (GimpPageSelector *selector,
gint gint
gimp_page_selector_get_n_pages (GimpPageSelector *selector) gimp_page_selector_get_n_pages (GimpPageSelector *selector)
{ {
GimpPageSelectorPrivate *priv;
g_return_val_if_fail (GIMP_IS_PAGE_SELECTOR (selector), 0); g_return_val_if_fail (GIMP_IS_PAGE_SELECTOR (selector), 0);
priv = gimp_page_selector_get_instance_private (selector); return selector->n_pages;
return priv->n_pages;
} }
/** /**
@ -513,16 +492,12 @@ void
gimp_page_selector_set_target (GimpPageSelector *selector, gimp_page_selector_set_target (GimpPageSelector *selector,
GimpPageSelectorTarget target) GimpPageSelectorTarget target)
{ {
GimpPageSelectorPrivate *priv;
g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector)); g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector));
g_return_if_fail (target <= GIMP_PAGE_SELECTOR_TARGET_IMAGES); g_return_if_fail (target <= GIMP_PAGE_SELECTOR_TARGET_IMAGES);
priv = gimp_page_selector_get_instance_private (selector); if (target != selector->target)
if (target != priv->target)
{ {
priv->target = target; selector->target = target;
g_object_notify (G_OBJECT (selector), "target"); g_object_notify (G_OBJECT (selector), "target");
} }
@ -539,14 +514,10 @@ gimp_page_selector_set_target (GimpPageSelector *selector,
GimpPageSelectorTarget GimpPageSelectorTarget
gimp_page_selector_get_target (GimpPageSelector *selector) gimp_page_selector_get_target (GimpPageSelector *selector)
{ {
GimpPageSelectorPrivate *priv;
g_return_val_if_fail (GIMP_IS_PAGE_SELECTOR (selector), g_return_val_if_fail (GIMP_IS_PAGE_SELECTOR (selector),
GIMP_PAGE_SELECTOR_TARGET_LAYERS); GIMP_PAGE_SELECTOR_TARGET_LAYERS);
priv = gimp_page_selector_get_instance_private (selector); return selector->target;
return priv->target;
} }
/** /**
@ -565,22 +536,19 @@ gimp_page_selector_set_page_thumbnail (GimpPageSelector *selector,
gint page_no, gint page_no,
GdkPixbuf *thumbnail) GdkPixbuf *thumbnail)
{ {
GimpPageSelectorPrivate *priv; GtkTreeIter iter;
GtkTreeIter iter;
g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector)); g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector));
g_return_if_fail (thumbnail == NULL || GDK_IS_PIXBUF (thumbnail)); g_return_if_fail (thumbnail == NULL || GDK_IS_PIXBUF (thumbnail));
priv = gimp_page_selector_get_instance_private (selector); g_return_if_fail (page_no >= 0 && page_no < selector->n_pages);
g_return_if_fail (page_no >= 0 && page_no < priv->n_pages); gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (selector->store),
gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (priv->store),
&iter, NULL, page_no); &iter, NULL, page_no);
if (! thumbnail) if (! thumbnail)
{ {
thumbnail = g_object_ref (priv->default_thumbnail); thumbnail = g_object_ref (selector->default_thumbnail);
} }
else else
{ {
@ -588,7 +556,7 @@ gimp_page_selector_set_page_thumbnail (GimpPageSelector *selector,
thumbnail); thumbnail);
} }
gtk_list_store_set (priv->store, &iter, gtk_list_store_set (selector->store, &iter,
COLUMN_THUMBNAIL, thumbnail, COLUMN_THUMBNAIL, thumbnail,
-1); -1);
g_clear_object (&thumbnail); g_clear_object (&thumbnail);
@ -609,26 +577,23 @@ GdkPixbuf *
gimp_page_selector_get_page_thumbnail (GimpPageSelector *selector, gimp_page_selector_get_page_thumbnail (GimpPageSelector *selector,
gint page_no) gint page_no)
{ {
GimpPageSelectorPrivate *priv; GdkPixbuf *thumbnail;
GdkPixbuf *thumbnail; GtkTreeIter iter;
GtkTreeIter iter;
g_return_val_if_fail (GIMP_IS_PAGE_SELECTOR (selector), NULL); g_return_val_if_fail (GIMP_IS_PAGE_SELECTOR (selector), NULL);
priv = gimp_page_selector_get_instance_private (selector); g_return_val_if_fail (page_no >= 0 && page_no < selector->n_pages, NULL);
g_return_val_if_fail (page_no >= 0 && page_no < priv->n_pages, NULL); gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (selector->store),
gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (priv->store),
&iter, NULL, page_no); &iter, NULL, page_no);
gtk_tree_model_get (GTK_TREE_MODEL (priv->store), &iter, gtk_tree_model_get (GTK_TREE_MODEL (selector->store), &iter,
COLUMN_THUMBNAIL, &thumbnail, COLUMN_THUMBNAIL, &thumbnail,
-1); -1);
if (thumbnail) if (thumbnail)
g_object_unref (thumbnail); g_object_unref (thumbnail);
if (thumbnail == priv->default_thumbnail) if (thumbnail == selector->default_thumbnail)
return NULL; return NULL;
return thumbnail; return thumbnail;
@ -649,24 +614,21 @@ gimp_page_selector_set_page_label (GimpPageSelector *selector,
gint page_no, gint page_no,
const gchar *label) const gchar *label)
{ {
GimpPageSelectorPrivate *priv; GtkTreeIter iter;
GtkTreeIter iter; gchar *tmp;
gchar *tmp;
g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector)); g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector));
priv = gimp_page_selector_get_instance_private (selector); g_return_if_fail (page_no >= 0 && page_no < selector->n_pages);
g_return_if_fail (page_no >= 0 && page_no < priv->n_pages);
if (! label) if (! label)
tmp = g_strdup_printf (_("Page %d"), page_no + 1); tmp = g_strdup_printf (_("Page %d"), page_no + 1);
else else
tmp = (gchar *) label; tmp = (gchar *) label;
gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (priv->store), gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (selector->store),
&iter, NULL, page_no); &iter, NULL, page_no);
gtk_list_store_set (priv->store, &iter, gtk_list_store_set (selector->store, &iter,
COLUMN_LABEL, tmp, COLUMN_LABEL, tmp,
COLUMN_LABEL_SET, label != NULL, COLUMN_LABEL_SET, label != NULL,
-1); -1);
@ -690,20 +652,17 @@ gchar *
gimp_page_selector_get_page_label (GimpPageSelector *selector, gimp_page_selector_get_page_label (GimpPageSelector *selector,
gint page_no) gint page_no)
{ {
GimpPageSelectorPrivate *priv; GtkTreeIter iter;
GtkTreeIter iter; gchar *label;
gchar *label; gboolean label_set;
gboolean label_set;
g_return_val_if_fail (GIMP_IS_PAGE_SELECTOR (selector), NULL); g_return_val_if_fail (GIMP_IS_PAGE_SELECTOR (selector), NULL);
priv = gimp_page_selector_get_instance_private (selector); g_return_val_if_fail (page_no >= 0 && page_no < selector->n_pages, NULL);
g_return_val_if_fail (page_no >= 0 && page_no < priv->n_pages, NULL); gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (selector->store),
gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (priv->store),
&iter, NULL, page_no); &iter, NULL, page_no);
gtk_tree_model_get (GTK_TREE_MODEL (priv->store), &iter, gtk_tree_model_get (GTK_TREE_MODEL (selector->store), &iter,
COLUMN_LABEL, &label, COLUMN_LABEL, &label,
COLUMN_LABEL_SET, &label_set, COLUMN_LABEL_SET, &label_set,
-1); -1);
@ -728,13 +687,9 @@ gimp_page_selector_get_page_label (GimpPageSelector *selector,
void void
gimp_page_selector_select_all (GimpPageSelector *selector) gimp_page_selector_select_all (GimpPageSelector *selector)
{ {
GimpPageSelectorPrivate *priv;
g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector)); g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector));
priv = gimp_page_selector_get_instance_private (selector); gtk_icon_view_select_all (GTK_ICON_VIEW (selector->view));
gtk_icon_view_select_all (GTK_ICON_VIEW (priv->view));
} }
/** /**
@ -748,13 +703,9 @@ gimp_page_selector_select_all (GimpPageSelector *selector)
void void
gimp_page_selector_unselect_all (GimpPageSelector *selector) gimp_page_selector_unselect_all (GimpPageSelector *selector)
{ {
GimpPageSelectorPrivate *priv;
g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector)); g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector));
priv = gimp_page_selector_get_instance_private (selector); gtk_icon_view_unselect_all (GTK_ICON_VIEW (selector->view));
gtk_icon_view_unselect_all (GTK_ICON_VIEW (priv->view));
} }
/** /**
@ -770,21 +721,18 @@ void
gimp_page_selector_select_page (GimpPageSelector *selector, gimp_page_selector_select_page (GimpPageSelector *selector,
gint page_no) gint page_no)
{ {
GimpPageSelectorPrivate *priv; GtkTreeIter iter;
GtkTreeIter iter; GtkTreePath *path;
GtkTreePath *path;
g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector)); g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector));
priv = gimp_page_selector_get_instance_private (selector); g_return_if_fail (page_no >= 0 && page_no < selector->n_pages);
g_return_if_fail (page_no >= 0 && page_no < priv->n_pages); gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (selector->store),
gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (priv->store),
&iter, NULL, page_no); &iter, NULL, page_no);
path = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->store), &iter); path = gtk_tree_model_get_path (GTK_TREE_MODEL (selector->store), &iter);
gtk_icon_view_select_path (GTK_ICON_VIEW (priv->view), path); gtk_icon_view_select_path (GTK_ICON_VIEW (selector->view), path);
gtk_tree_path_free (path); gtk_tree_path_free (path);
} }
@ -802,21 +750,18 @@ void
gimp_page_selector_unselect_page (GimpPageSelector *selector, gimp_page_selector_unselect_page (GimpPageSelector *selector,
gint page_no) gint page_no)
{ {
GimpPageSelectorPrivate *priv; GtkTreeIter iter;
GtkTreeIter iter; GtkTreePath *path;
GtkTreePath *path;
g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector)); g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector));
priv = gimp_page_selector_get_instance_private (selector); g_return_if_fail (page_no >= 0 && page_no < selector->n_pages);
g_return_if_fail (page_no >= 0 && page_no < priv->n_pages); gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (selector->store),
gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (priv->store),
&iter, NULL, page_no); &iter, NULL, page_no);
path = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->store), &iter); path = gtk_tree_model_get_path (GTK_TREE_MODEL (selector->store), &iter);
gtk_icon_view_unselect_path (GTK_ICON_VIEW (priv->view), path); gtk_icon_view_unselect_path (GTK_ICON_VIEW (selector->view), path);
gtk_tree_path_free (path); gtk_tree_path_free (path);
} }
@ -834,22 +779,19 @@ gboolean
gimp_page_selector_page_is_selected (GimpPageSelector *selector, gimp_page_selector_page_is_selected (GimpPageSelector *selector,
gint page_no) gint page_no)
{ {
GimpPageSelectorPrivate *priv; GtkTreeIter iter;
GtkTreeIter iter; GtkTreePath *path;
GtkTreePath *path; gboolean selected;
gboolean selected;
g_return_val_if_fail (GIMP_IS_PAGE_SELECTOR (selector), FALSE); g_return_val_if_fail (GIMP_IS_PAGE_SELECTOR (selector), FALSE);
priv = gimp_page_selector_get_instance_private (selector); g_return_val_if_fail (page_no >= 0 && page_no < selector->n_pages, FALSE);
g_return_val_if_fail (page_no >= 0 && page_no < priv->n_pages, FALSE); gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (selector->store),
gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (priv->store),
&iter, NULL, page_no); &iter, NULL, page_no);
path = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->store), &iter); path = gtk_tree_model_get_path (GTK_TREE_MODEL (selector->store), &iter);
selected = gtk_icon_view_path_is_selected (GTK_ICON_VIEW (priv->view), selected = gtk_icon_view_path_is_selected (GTK_ICON_VIEW (selector->view),
path); path);
gtk_tree_path_free (path); gtk_tree_path_free (path);
@ -871,18 +813,15 @@ gint *
gimp_page_selector_get_selected_pages (GimpPageSelector *selector, gimp_page_selector_get_selected_pages (GimpPageSelector *selector,
gint *n_selected_pages) gint *n_selected_pages)
{ {
GimpPageSelectorPrivate *priv; GList *selected;
GList *selected; GList *list;
GList *list; gint *array;
gint *array; gint i;
gint i;
g_return_val_if_fail (GIMP_IS_PAGE_SELECTOR (selector), NULL); g_return_val_if_fail (GIMP_IS_PAGE_SELECTOR (selector), NULL);
g_return_val_if_fail (n_selected_pages != NULL, NULL); g_return_val_if_fail (n_selected_pages != NULL, NULL);
priv = gimp_page_selector_get_instance_private (selector); selected = gtk_icon_view_get_selected_items (GTK_ICON_VIEW (selector->view));
selected = gtk_icon_view_get_selected_items (GTK_ICON_VIEW (priv->view));
*n_selected_pages = g_list_length (selected); *n_selected_pages = g_list_length (selected);
array = g_new0 (gint, *n_selected_pages); array = g_new0 (gint, *n_selected_pages);
@ -921,17 +860,14 @@ void
gimp_page_selector_select_range (GimpPageSelector *selector, gimp_page_selector_select_range (GimpPageSelector *selector,
const gchar *range) const gchar *range)
{ {
GimpPageSelectorPrivate *priv; gchar **ranges;
gchar **ranges;
g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector)); g_return_if_fail (GIMP_IS_PAGE_SELECTOR (selector));
priv = gimp_page_selector_get_instance_private (selector);
if (! range) if (! range)
range = ""; range = "";
g_signal_handlers_block_by_func (priv->view, g_signal_handlers_block_by_func (selector->view,
gimp_page_selector_selection_changed, gimp_page_selector_selection_changed,
selector); selector);
@ -966,17 +902,17 @@ gimp_page_selector_select_range (GimpPageSelector *selector,
page_from = 1; page_from = 1;
if (sscanf (to, "%i", &page_to) != 1 && strlen (to) == 0) if (sscanf (to, "%i", &page_to) != 1 && strlen (to) == 0)
page_to = priv->n_pages; page_to = selector->n_pages;
if (page_from > 0 && if (page_from > 0 &&
page_to > 0 && page_to > 0 &&
page_from <= page_to && page_from <= page_to &&
page_from <= priv->n_pages) page_from <= selector->n_pages)
{ {
gint page_no; gint page_no;
page_from = MAX (page_from, 1) - 1; page_from = MAX (page_from, 1) - 1;
page_to = MIN (page_to, priv->n_pages) - 1; page_to = MIN (page_to, selector->n_pages) - 1;
for (page_no = page_from; page_no <= page_to; page_no++) for (page_no = page_from; page_no <= page_to; page_no++)
gimp_page_selector_select_page (selector, page_no); gimp_page_selector_select_page (selector, page_no);
@ -988,7 +924,7 @@ gimp_page_selector_select_range (GimpPageSelector *selector,
if (sscanf (range, "%i", &page_no) == 1 && if (sscanf (range, "%i", &page_no) == 1 &&
page_no >= 1 && page_no >= 1 &&
page_no <= priv->n_pages) page_no <= selector->n_pages)
{ {
gimp_page_selector_select_page (selector, page_no - 1); gimp_page_selector_select_page (selector, page_no - 1);
} }
@ -998,11 +934,11 @@ gimp_page_selector_select_range (GimpPageSelector *selector,
g_strfreev (ranges); g_strfreev (ranges);
} }
g_signal_handlers_unblock_by_func (priv->view, g_signal_handlers_unblock_by_func (selector->view,
gimp_page_selector_selection_changed, gimp_page_selector_selection_changed,
selector); selector);
gimp_page_selector_selection_changed (GTK_ICON_VIEW (priv->view), selector); gimp_page_selector_selection_changed (GTK_ICON_VIEW (selector->view), selector);
} }
/** /**
@ -1062,38 +998,35 @@ gimp_page_selector_get_selected_range (GimpPageSelector *selector)
} }
/* private functions */ /* selectorate functions */
static void static void
gimp_page_selector_selection_changed (GtkIconView *icon_view, gimp_page_selector_selection_changed (GtkIconView *icon_view,
GimpPageSelector *selector) GimpPageSelector *selector)
{ {
GimpPageSelectorPrivate *priv; GList *selected;
GList *selected; gint n_selected;
gint n_selected; gchar *range;
gchar *range;
priv = gimp_page_selector_get_instance_private (selector); selected = gtk_icon_view_get_selected_items (GTK_ICON_VIEW (selector->view));
selected = gtk_icon_view_get_selected_items (GTK_ICON_VIEW (priv->view));
n_selected = g_list_length (selected); n_selected = g_list_length (selected);
g_list_free_full (selected, (GDestroyNotify) gtk_tree_path_free); g_list_free_full (selected, (GDestroyNotify) gtk_tree_path_free);
if (n_selected == 0) if (n_selected == 0)
{ {
gtk_label_set_text (GTK_LABEL (priv->count_label), gtk_label_set_text (GTK_LABEL (selector->count_label),
_("Nothing selected")); _("Nothing selected"));
} }
else if (n_selected == 1) else if (n_selected == 1)
{ {
gtk_label_set_text (GTK_LABEL (priv->count_label), gtk_label_set_text (GTK_LABEL (selector->count_label),
_("One page selected")); _("One page selected"));
} }
else else
{ {
gchar *text; gchar *text;
if (n_selected == priv->n_pages) if (n_selected == selector->n_pages)
text = g_strdup_printf (ngettext ("%d page selected", text = g_strdup_printf (ngettext ("%d page selected",
"All %d pages selected", n_selected), "All %d pages selected", n_selected),
n_selected); n_selected);
@ -1103,15 +1036,15 @@ gimp_page_selector_selection_changed (GtkIconView *icon_view,
n_selected), n_selected),
n_selected); n_selected);
gtk_label_set_text (GTK_LABEL (priv->count_label), text); gtk_label_set_text (GTK_LABEL (selector->count_label), text);
g_free (text); g_free (text);
} }
range = gimp_page_selector_get_selected_range (selector); range = gimp_page_selector_get_selected_range (selector);
gtk_entry_set_text (GTK_ENTRY (priv->range_entry), range); gtk_entry_set_text (GTK_ENTRY (selector->range_entry), range);
g_free (range); g_free (range);
gtk_editable_set_position (GTK_EDITABLE (priv->range_entry), -1); gtk_editable_set_position (GTK_EDITABLE (selector->range_entry), -1);
g_signal_emit (selector, selector_signals[SELECTION_CHANGED], 0); g_signal_emit (selector, selector_signals[SELECTION_CHANGED], 0);
} }

View file

@ -29,25 +29,7 @@
G_BEGIN_DECLS G_BEGIN_DECLS
#define GIMP_TYPE_PAGE_SELECTOR (gimp_page_selector_get_type ()) #define GIMP_TYPE_PAGE_SELECTOR (gimp_page_selector_get_type ())
G_DECLARE_DERIVABLE_TYPE (GimpPageSelector, gimp_page_selector, GIMP, PAGE_SELECTOR, GtkBox) G_DECLARE_FINAL_TYPE (GimpPageSelector, gimp_page_selector, GIMP, PAGE_SELECTOR, GtkBox)
struct _GimpPageSelectorClass
{
GtkBoxClass parent_class;
void (* selection_changed) (GimpPageSelector *selector);
void (* activate) (GimpPageSelector *selector);
/* Padding for future expansion */
void (* _gimp_reserved1) (void);
void (* _gimp_reserved2) (void);
void (* _gimp_reserved3) (void);
void (* _gimp_reserved4) (void);
void (* _gimp_reserved5) (void);
void (* _gimp_reserved6) (void);
void (* _gimp_reserved7) (void);
void (* _gimp_reserved8) (void);
};
GtkWidget * gimp_page_selector_new (void); GtkWidget * gimp_page_selector_new (void);

View file

@ -76,7 +76,7 @@ enum
}; };
typedef struct _GimpPathEditorPrivate struct _GimpPathEditor
{ {
GtkWidget *upper_hbox; GtkWidget *upper_hbox;
@ -95,9 +95,7 @@ typedef struct _GimpPathEditorPrivate
GtkTreeViewColumn *writable_column; GtkTreeViewColumn *writable_column;
gint num_items; gint num_items;
} GimpPathEditorPrivate; };
#define GET_PRIVATE(obj) ((GimpPathEditorPrivate *) gimp_path_editor_get_instance_private ((GimpPathEditor *) (obj)))
static void gimp_path_editor_new_clicked (GtkWidget *widget, static void gimp_path_editor_new_clicked (GtkWidget *widget,
@ -115,7 +113,7 @@ static void gimp_path_editor_writable_toggled (GtkCellRendererToggle *toggle
GimpPathEditor *editor); GimpPathEditor *editor);
G_DEFINE_TYPE_WITH_PRIVATE (GimpPathEditor, gimp_path_editor, GTK_TYPE_BOX) G_DEFINE_TYPE (GimpPathEditor, gimp_path_editor, GTK_TYPE_BOX)
#define parent_class gimp_path_editor_parent_class #define parent_class gimp_path_editor_parent_class
@ -135,7 +133,7 @@ gimp_path_editor_class_init (GimpPathEditorClass *klass)
g_signal_new ("path-changed", g_signal_new ("path-changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpPathEditorClass, path_changed), 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
@ -150,43 +148,39 @@ gimp_path_editor_class_init (GimpPathEditorClass *klass)
g_signal_new ("writable-changed", g_signal_new ("writable-changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpPathEditorClass, writable_changed), 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
klass->path_changed = NULL;
klass->writable_changed = NULL;
} }
static void static void
gimp_path_editor_init (GimpPathEditor *editor) gimp_path_editor_init (GimpPathEditor *editor)
{ {
GimpPathEditorPrivate *priv = GET_PRIVATE (editor); GtkWidget *button_box;
GtkWidget *button_box; GtkWidget *button;
GtkWidget *button; GtkWidget *image;
GtkWidget *image; GtkWidget *scrolled_window;
GtkWidget *scrolled_window; GtkWidget *tv;
GtkWidget *tv; GtkTreeViewColumn *col;
GtkTreeViewColumn *col; GtkCellRenderer *renderer;
GtkCellRenderer *renderer;
priv->file_entry = NULL; editor->file_entry = NULL;
priv->sel_path = NULL; editor->sel_path = NULL;
priv->num_items = 0; editor->num_items = 0;
gtk_orientable_set_orientation (GTK_ORIENTABLE (editor), gtk_orientable_set_orientation (GTK_ORIENTABLE (editor),
GTK_ORIENTATION_VERTICAL); GTK_ORIENTATION_VERTICAL);
priv->upper_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); editor->upper_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
gtk_box_pack_start (GTK_BOX (editor), priv->upper_hbox, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (editor), editor->upper_hbox, FALSE, TRUE, 0);
gtk_widget_show (priv->upper_hbox); gtk_widget_show (editor->upper_hbox);
button_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); button_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_box_set_homogeneous (GTK_BOX (button_box), TRUE); gtk_box_set_homogeneous (GTK_BOX (button_box), TRUE);
gtk_box_pack_start (GTK_BOX (priv->upper_hbox), button_box, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (editor->upper_hbox), button_box, FALSE, TRUE, 0);
gtk_widget_show (button_box); gtk_widget_show (button_box);
priv->new_button = button = gtk_button_new (); editor->new_button = button = gtk_button_new ();
gtk_box_pack_start (GTK_BOX (button_box), button, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (button_box), button, TRUE, TRUE, 0);
gtk_widget_show (button); gtk_widget_show (button);
@ -199,11 +193,11 @@ gimp_path_editor_init (GimpPathEditor *editor)
G_CALLBACK (gimp_path_editor_new_clicked), G_CALLBACK (gimp_path_editor_new_clicked),
editor); editor);
gimp_help_set_help_data (priv->new_button, gimp_help_set_help_data (editor->new_button,
_("Add a new folder"), _("Add a new folder"),
NULL); NULL);
priv->up_button = button = gtk_button_new (); editor->up_button = button = gtk_button_new ();
gtk_widget_set_sensitive (button, FALSE); gtk_widget_set_sensitive (button, FALSE);
gtk_box_pack_start (GTK_BOX (button_box), button, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (button_box), button, TRUE, TRUE, 0);
gtk_widget_show (button); gtk_widget_show (button);
@ -217,11 +211,11 @@ gimp_path_editor_init (GimpPathEditor *editor)
G_CALLBACK (gimp_path_editor_move_clicked), G_CALLBACK (gimp_path_editor_move_clicked),
editor); editor);
gimp_help_set_help_data (priv->up_button, gimp_help_set_help_data (editor->up_button,
_("Move the selected folder up"), _("Move the selected folder up"),
NULL); NULL);
priv->down_button = button = gtk_button_new (); editor->down_button = button = gtk_button_new ();
gtk_widget_set_sensitive (button, FALSE); gtk_widget_set_sensitive (button, FALSE);
gtk_box_pack_start (GTK_BOX (button_box), button, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (button_box), button, TRUE, TRUE, 0);
gtk_widget_show (button); gtk_widget_show (button);
@ -235,11 +229,11 @@ gimp_path_editor_init (GimpPathEditor *editor)
G_CALLBACK (gimp_path_editor_move_clicked), G_CALLBACK (gimp_path_editor_move_clicked),
editor); editor);
gimp_help_set_help_data (priv->down_button, gimp_help_set_help_data (editor->down_button,
_("Move the selected folder down"), _("Move the selected folder down"),
NULL); NULL);
priv->delete_button = button = gtk_button_new (); editor->delete_button = button = gtk_button_new ();
gtk_widget_set_sensitive (button, FALSE); gtk_widget_set_sensitive (button, FALSE);
gtk_box_pack_start (GTK_BOX (button_box), button, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (button_box), button, TRUE, TRUE, 0);
gtk_widget_show (button); gtk_widget_show (button);
@ -253,7 +247,7 @@ gimp_path_editor_init (GimpPathEditor *editor)
G_CALLBACK (gimp_path_editor_delete_clicked), G_CALLBACK (gimp_path_editor_delete_clicked),
editor); editor);
gimp_help_set_help_data (priv->delete_button, gimp_help_set_help_data (editor->delete_button,
_("Remove the selected folder from the list"), _("Remove the selected folder from the list"),
NULL); NULL);
@ -266,12 +260,12 @@ gimp_path_editor_init (GimpPathEditor *editor)
gtk_box_pack_start (GTK_BOX (editor), scrolled_window, TRUE, TRUE, 2); gtk_box_pack_start (GTK_BOX (editor), scrolled_window, TRUE, TRUE, 2);
gtk_widget_show (scrolled_window); gtk_widget_show (scrolled_window);
priv->dir_list = gtk_list_store_new (NUM_COLUMNS, editor->dir_list = gtk_list_store_new (NUM_COLUMNS,
G_TYPE_STRING, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_STRING,
G_TYPE_BOOLEAN); G_TYPE_BOOLEAN);
tv = gtk_tree_view_new_with_model (GTK_TREE_MODEL (priv->dir_list)); tv = gtk_tree_view_new_with_model (GTK_TREE_MODEL (editor->dir_list));
g_object_unref (priv->dir_list); g_object_unref (editor->dir_list);
renderer = gtk_cell_renderer_toggle_new (); renderer = gtk_cell_renderer_toggle_new ();
@ -279,7 +273,7 @@ gimp_path_editor_init (GimpPathEditor *editor)
G_CALLBACK (gimp_path_editor_writable_toggled), G_CALLBACK (gimp_path_editor_writable_toggled),
editor); editor);
priv->writable_column = col = gtk_tree_view_column_new (); editor->writable_column = col = gtk_tree_view_column_new ();
gtk_tree_view_column_set_title (col, _("Writable")); gtk_tree_view_column_set_title (col, _("Writable"));
gtk_tree_view_column_pack_start (col, renderer, FALSE); gtk_tree_view_column_pack_start (col, renderer, FALSE);
gtk_tree_view_column_add_attribute (col, renderer, "active", COLUMN_WRITABLE); gtk_tree_view_column_add_attribute (col, renderer, "active", COLUMN_WRITABLE);
@ -299,8 +293,8 @@ gimp_path_editor_init (GimpPathEditor *editor)
gtk_container_add (GTK_CONTAINER (scrolled_window), tv); gtk_container_add (GTK_CONTAINER (scrolled_window), tv);
gtk_widget_show (tv); gtk_widget_show (tv);
priv->sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tv)); editor->sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tv));
g_signal_connect (priv->sel, "changed", g_signal_connect (editor->sel, "changed",
G_CALLBACK (gimp_path_editor_selection_changed), G_CALLBACK (gimp_path_editor_selection_changed),
editor); editor);
} }
@ -321,21 +315,19 @@ GtkWidget *
gimp_path_editor_new (const gchar *title, gimp_path_editor_new (const gchar *title,
const gchar *path) const gchar *path)
{ {
GimpPathEditor *editor; GimpPathEditor *editor;
GimpPathEditorPrivate *priv;
g_return_val_if_fail (title != NULL, NULL); g_return_val_if_fail (title != NULL, NULL);
editor = g_object_new (GIMP_TYPE_PATH_EDITOR, NULL); editor = g_object_new (GIMP_TYPE_PATH_EDITOR, NULL);
priv = GET_PRIVATE (editor);
priv->file_entry = gimp_file_entry_new (title, "", TRUE, TRUE); editor->file_entry = gimp_file_entry_new (title, "", TRUE, TRUE);
gtk_widget_set_sensitive (priv->file_entry, FALSE); gtk_widget_set_sensitive (editor->file_entry, FALSE);
gtk_box_pack_start (GTK_BOX (priv->upper_hbox), priv->file_entry, gtk_box_pack_start (GTK_BOX (editor->upper_hbox), editor->file_entry,
TRUE, TRUE, 0); TRUE, TRUE, 0);
gtk_widget_show (priv->file_entry); gtk_widget_show (editor->file_entry);
g_signal_connect (priv->file_entry, "filename-changed", g_signal_connect (editor->file_entry, "filename-changed",
G_CALLBACK (gimp_path_editor_file_entry_changed), G_CALLBACK (gimp_path_editor_file_entry_changed),
editor); editor);
@ -359,17 +351,14 @@ gimp_path_editor_new (const gchar *title,
gchar * gchar *
gimp_path_editor_get_path (GimpPathEditor *editor) gimp_path_editor_get_path (GimpPathEditor *editor)
{ {
GimpPathEditorPrivate *priv; GtkTreeModel *model;
GtkTreeModel *model; GString *path;
GString *path; GtkTreeIter iter;
GtkTreeIter iter; gboolean iter_valid;
gboolean iter_valid;
g_return_val_if_fail (GIMP_IS_PATH_EDITOR (editor), g_strdup ("")); g_return_val_if_fail (GIMP_IS_PATH_EDITOR (editor), g_strdup (""));
priv = GET_PRIVATE (editor); model = GTK_TREE_MODEL (editor->dir_list);
model = GTK_TREE_MODEL (priv->dir_list);
path = g_string_new (""); path = g_string_new ("");
@ -406,14 +395,12 @@ void
gimp_path_editor_set_path (GimpPathEditor *editor, gimp_path_editor_set_path (GimpPathEditor *editor,
const gchar *path) const gchar *path)
{ {
GimpPathEditorPrivate *priv; gchar *old_path;
gchar *old_path; GList *path_list;
GList *path_list; GList *list;
GList *list;
g_return_if_fail (GIMP_IS_PATH_EDITOR (editor)); g_return_if_fail (GIMP_IS_PATH_EDITOR (editor));
priv = GET_PRIVATE (editor);
old_path = gimp_path_editor_get_path (editor); old_path = gimp_path_editor_get_path (editor);
if (old_path && path && strcmp (old_path, path) == 0) if (old_path && path && strcmp (old_path, path) == 0)
@ -426,7 +413,7 @@ gimp_path_editor_set_path (GimpPathEditor *editor,
path_list = gimp_path_parse (path, 256, FALSE, NULL); path_list = gimp_path_parse (path, 256, FALSE, NULL);
gtk_list_store_clear (priv->dir_list); gtk_list_store_clear (editor->dir_list);
for (list = path_list; list; list = g_list_next (list)) for (list = path_list; list; list = g_list_next (list))
{ {
@ -436,16 +423,16 @@ gimp_path_editor_set_path (GimpPathEditor *editor,
utf8 = g_filename_to_utf8 (directory, -1, NULL, NULL, NULL); utf8 = g_filename_to_utf8 (directory, -1, NULL, NULL, NULL);
gtk_list_store_append (priv->dir_list, &iter); gtk_list_store_append (editor->dir_list, &iter);
gtk_list_store_set (priv->dir_list, &iter, gtk_list_store_set (editor->dir_list, &iter,
COLUMN_UTF8, utf8, COLUMN_UTF8, utf8,
COLUMN_DIRECTORY, directory, COLUMN_DIRECTORY, directory,
COLUMN_WRITABLE, FALSE, COLUMN_WRITABLE, FALSE,
-1); -1);
g_free (utf8); g_free (utf8);
priv->num_items++; editor->num_items++;
} }
gimp_path_free (path_list); gimp_path_free (path_list);
@ -456,17 +443,14 @@ gimp_path_editor_set_path (GimpPathEditor *editor,
gchar * gchar *
gimp_path_editor_get_writable_path (GimpPathEditor *editor) gimp_path_editor_get_writable_path (GimpPathEditor *editor)
{ {
GimpPathEditorPrivate *priv; GtkTreeModel *model;
GtkTreeModel *model; GString *path;
GString *path; GtkTreeIter iter;
GtkTreeIter iter; gboolean iter_valid;
gboolean iter_valid;
g_return_val_if_fail (GIMP_IS_PATH_EDITOR (editor), g_strdup ("")); g_return_val_if_fail (GIMP_IS_PATH_EDITOR (editor), g_strdup (""));
priv = GET_PRIVATE (editor); model = GTK_TREE_MODEL (editor->dir_list);
model = GTK_TREE_MODEL (priv->dir_list);
path = g_string_new (""); path = g_string_new ("");
@ -500,22 +484,19 @@ void
gimp_path_editor_set_writable_path (GimpPathEditor *editor, gimp_path_editor_set_writable_path (GimpPathEditor *editor,
const gchar *path) const gchar *path)
{ {
GimpPathEditorPrivate *priv; GtkTreeModel *model;
GtkTreeModel *model; GtkTreeIter iter;
GtkTreeIter iter; gboolean iter_valid;
gboolean iter_valid; GList *path_list;
GList *path_list; gboolean writable_changed = FALSE;
gboolean writable_changed = FALSE;
g_return_if_fail (GIMP_IS_PATH_EDITOR (editor)); g_return_if_fail (GIMP_IS_PATH_EDITOR (editor));
priv = GET_PRIVATE (editor); gtk_tree_view_column_set_visible (editor->writable_column, TRUE);
gtk_tree_view_column_set_visible (priv->writable_column, TRUE);
path_list = gimp_path_parse (path, 256, FALSE, NULL); path_list = gimp_path_parse (path, 256, FALSE, NULL);
model = GTK_TREE_MODEL (priv->dir_list); model = GTK_TREE_MODEL (editor->dir_list);
for (iter_valid = gtk_tree_model_get_iter_first (model, &iter); for (iter_valid = gtk_tree_model_get_iter_first (model, &iter);
iter_valid; iter_valid;
@ -537,7 +518,7 @@ gimp_path_editor_set_writable_path (GimpPathEditor *editor,
if (dir_writable != new_writable) if (dir_writable != new_writable)
{ {
gtk_list_store_set (priv->dir_list, &iter, gtk_list_store_set (editor->dir_list, &iter,
COLUMN_WRITABLE, new_writable, COLUMN_WRITABLE, new_writable,
-1); -1);
@ -555,17 +536,14 @@ gboolean
gimp_path_editor_get_dir_writable (GimpPathEditor *editor, gimp_path_editor_get_dir_writable (GimpPathEditor *editor,
const gchar *directory) const gchar *directory)
{ {
GimpPathEditorPrivate *priv; GtkTreeModel *model;
GtkTreeModel *model; GtkTreeIter iter;
GtkTreeIter iter; gboolean iter_valid;
gboolean iter_valid;
g_return_val_if_fail (GIMP_IS_PATH_EDITOR (editor), FALSE); g_return_val_if_fail (GIMP_IS_PATH_EDITOR (editor), FALSE);
g_return_val_if_fail (directory != NULL, FALSE); g_return_val_if_fail (directory != NULL, FALSE);
priv = GET_PRIVATE (editor); model = GTK_TREE_MODEL (editor->dir_list);
model = GTK_TREE_MODEL (priv->dir_list);
for (iter_valid = gtk_tree_model_get_iter_first (model, &iter); for (iter_valid = gtk_tree_model_get_iter_first (model, &iter);
iter_valid; iter_valid;
@ -597,17 +575,14 @@ gimp_path_editor_set_dir_writable (GimpPathEditor *editor,
const gchar *directory, const gchar *directory,
gboolean writable) gboolean writable)
{ {
GimpPathEditorPrivate *priv; GtkTreeModel *model;
GtkTreeModel *model; GtkTreeIter iter;
GtkTreeIter iter; gboolean iter_valid;
gboolean iter_valid;
g_return_if_fail (GIMP_IS_PATH_EDITOR (editor)); g_return_if_fail (GIMP_IS_PATH_EDITOR (editor));
g_return_if_fail (directory != NULL); g_return_if_fail (directory != NULL);
priv = GET_PRIVATE (editor); model = GTK_TREE_MODEL (editor->dir_list);
model = GTK_TREE_MODEL (priv->dir_list);
for (iter_valid = gtk_tree_model_get_iter_first (model, &iter); for (iter_valid = gtk_tree_model_get_iter_first (model, &iter);
iter_valid; iter_valid;
@ -623,7 +598,7 @@ gimp_path_editor_set_dir_writable (GimpPathEditor *editor,
if (! strcmp (dir, directory) && dir_writable != writable) if (! strcmp (dir, directory) && dir_writable != writable)
{ {
gtk_list_store_set (priv->dir_list, &iter, gtk_list_store_set (editor->dir_list, &iter,
COLUMN_WRITABLE, writable ? TRUE : FALSE, COLUMN_WRITABLE, writable ? TRUE : FALSE,
-1); -1);
@ -638,66 +613,63 @@ gimp_path_editor_set_dir_writable (GimpPathEditor *editor,
} }
/* private functions */ /* editorate functions */
static void static void
gimp_path_editor_new_clicked (GtkWidget *widget, gimp_path_editor_new_clicked (GtkWidget *widget,
GimpPathEditor *editor) GimpPathEditor *editor)
{ {
GimpPathEditorPrivate *priv = GET_PRIVATE (editor); if (editor->sel_path)
if (priv->sel_path)
{ {
g_signal_handlers_block_by_func (priv->sel, g_signal_handlers_block_by_func (editor->sel,
gimp_path_editor_selection_changed, gimp_path_editor_selection_changed,
editor); editor);
gtk_tree_selection_unselect_path (priv->sel, priv->sel_path); gtk_tree_selection_unselect_path (editor->sel, editor->sel_path);
g_signal_handlers_unblock_by_func (priv->sel, g_signal_handlers_unblock_by_func (editor->sel,
gimp_path_editor_selection_changed, gimp_path_editor_selection_changed,
editor); editor);
gtk_tree_path_free (priv->sel_path); gtk_tree_path_free (editor->sel_path);
priv->sel_path = NULL; editor->sel_path = NULL;
} }
gtk_widget_set_sensitive (priv->delete_button, FALSE); gtk_widget_set_sensitive (editor->delete_button, FALSE);
gtk_widget_set_sensitive (priv->up_button, FALSE); gtk_widget_set_sensitive (editor->up_button, FALSE);
gtk_widget_set_sensitive (priv->down_button, FALSE); gtk_widget_set_sensitive (editor->down_button, FALSE);
gtk_widget_set_sensitive (priv->file_entry, TRUE); gtk_widget_set_sensitive (editor->file_entry, TRUE);
gtk_editable_set_position gtk_editable_set_position
(GTK_EDITABLE (gimp_file_entry_get_entry (GIMP_FILE_ENTRY (priv->file_entry))), -1); (GTK_EDITABLE (gimp_file_entry_get_entry (GIMP_FILE_ENTRY (editor->file_entry))), -1);
gtk_widget_grab_focus gtk_widget_grab_focus
(gimp_file_entry_get_entry (GIMP_FILE_ENTRY (priv->file_entry))); (gimp_file_entry_get_entry (GIMP_FILE_ENTRY (editor->file_entry)));
} }
static void static void
gimp_path_editor_move_clicked (GtkWidget *widget, gimp_path_editor_move_clicked (GtkWidget *widget,
GimpPathEditor *editor) GimpPathEditor *editor)
{ {
GimpPathEditorPrivate *priv = GET_PRIVATE (editor); GtkTreePath *path;
GtkTreePath *path; GtkTreeModel *model;
GtkTreeModel *model; GtkTreeIter iter1, iter2;
GtkTreeIter iter1, iter2; gchar *utf81, *utf82;
gchar *utf81, *utf82; gchar *dir1, *dir2;
gchar *dir1, *dir2; gboolean writable1, writable2;
gboolean writable1, writable2;
if (priv->sel_path == NULL) if (editor->sel_path == NULL)
return; return;
path = gtk_tree_path_copy (priv->sel_path); path = gtk_tree_path_copy (editor->sel_path);
if (widget == priv->up_button) if (widget == editor->up_button)
gtk_tree_path_prev (path); gtk_tree_path_prev (path);
else else
gtk_tree_path_next (path); gtk_tree_path_next (path);
model = GTK_TREE_MODEL (priv->dir_list); model = GTK_TREE_MODEL (editor->dir_list);
gtk_tree_model_get_iter (model, &iter1, priv->sel_path); gtk_tree_model_get_iter (model, &iter1, editor->sel_path);
gtk_tree_model_get_iter (model, &iter2, path); gtk_tree_model_get_iter (model, &iter2, path);
gtk_tree_model_get (model, &iter1, gtk_tree_model_get (model, &iter1,
@ -711,12 +683,12 @@ gimp_path_editor_move_clicked (GtkWidget *widget,
COLUMN_WRITABLE, &writable2, COLUMN_WRITABLE, &writable2,
-1); -1);
gtk_list_store_set (priv->dir_list, &iter1, gtk_list_store_set (editor->dir_list, &iter1,
COLUMN_UTF8, utf82, COLUMN_UTF8, utf82,
COLUMN_DIRECTORY, dir2, COLUMN_DIRECTORY, dir2,
COLUMN_WRITABLE, writable2, COLUMN_WRITABLE, writable2,
-1); -1);
gtk_list_store_set (priv->dir_list, &iter2, gtk_list_store_set (editor->dir_list, &iter2,
COLUMN_UTF8, utf81, COLUMN_UTF8, utf81,
COLUMN_DIRECTORY, dir1, COLUMN_DIRECTORY, dir1,
COLUMN_WRITABLE, writable1, COLUMN_WRITABLE, writable1,
@ -728,7 +700,7 @@ gimp_path_editor_move_clicked (GtkWidget *widget,
g_free (dir2); g_free (dir2);
g_free (dir1); g_free (dir1);
gtk_tree_selection_select_iter (priv->sel, &iter2); gtk_tree_selection_select_iter (editor->sel, &iter2);
g_signal_emit (editor, gimp_path_editor_signals[PATH_CHANGED], 0); g_signal_emit (editor, gimp_path_editor_signals[PATH_CHANGED], 0);
} }
@ -737,53 +709,52 @@ static void
gimp_path_editor_delete_clicked (GtkWidget *widget, gimp_path_editor_delete_clicked (GtkWidget *widget,
GimpPathEditor *editor) GimpPathEditor *editor)
{ {
GimpPathEditorPrivate *priv = GET_PRIVATE (editor); GtkTreeIter iter;
GtkTreeIter iter; gboolean dir_writable;
gboolean dir_writable;
if (priv->sel_path == NULL) if (editor->sel_path == NULL)
return; return;
gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->dir_list), &iter, gtk_tree_model_get_iter (GTK_TREE_MODEL (editor->dir_list), &iter,
priv->sel_path); editor->sel_path);
gtk_tree_model_get (GTK_TREE_MODEL (priv->dir_list), &iter, gtk_tree_model_get (GTK_TREE_MODEL (editor->dir_list), &iter,
COLUMN_WRITABLE, &dir_writable, COLUMN_WRITABLE, &dir_writable,
-1); -1);
gtk_list_store_remove (priv->dir_list, &iter); gtk_list_store_remove (editor->dir_list, &iter);
priv->num_items--; editor->num_items--;
if (priv->num_items == 0) if (editor->num_items == 0)
{ {
gtk_tree_path_free (priv->sel_path); gtk_tree_path_free (editor->sel_path);
priv->sel_path = NULL; editor->sel_path = NULL;
g_signal_handlers_block_by_func (priv->file_entry, g_signal_handlers_block_by_func (editor->file_entry,
gimp_path_editor_file_entry_changed, gimp_path_editor_file_entry_changed,
editor); editor);
gimp_file_entry_set_filename (GIMP_FILE_ENTRY (priv->file_entry), ""); gimp_file_entry_set_filename (GIMP_FILE_ENTRY (editor->file_entry), "");
g_signal_handlers_unblock_by_func (priv->file_entry, g_signal_handlers_unblock_by_func (editor->file_entry,
gimp_path_editor_file_entry_changed, gimp_path_editor_file_entry_changed,
editor); editor);
gtk_widget_set_sensitive (priv->delete_button, FALSE); gtk_widget_set_sensitive (editor->delete_button, FALSE);
gtk_widget_set_sensitive (priv->up_button, FALSE); gtk_widget_set_sensitive (editor->up_button, FALSE);
gtk_widget_set_sensitive (priv->down_button, FALSE); gtk_widget_set_sensitive (editor->down_button, FALSE);
gtk_widget_set_sensitive (priv->file_entry, FALSE); gtk_widget_set_sensitive (editor->file_entry, FALSE);
} }
else else
{ {
gint *indices; gint *indices;
indices = gtk_tree_path_get_indices (priv->sel_path); indices = gtk_tree_path_get_indices (editor->sel_path);
if ((indices[0] == priv->num_items) && (indices[0] > 0)) if ((indices[0] == editor->num_items) && (indices[0] > 0))
gtk_tree_path_prev (priv->sel_path); gtk_tree_path_prev (editor->sel_path);
gtk_tree_selection_select_path (priv->sel, priv->sel_path); gtk_tree_selection_select_path (editor->sel, editor->sel_path);
} }
g_signal_emit (editor, gimp_path_editor_signals[PATH_CHANGED], 0); g_signal_emit (editor, gimp_path_editor_signals[PATH_CHANGED], 0);
@ -796,10 +767,9 @@ static void
gimp_path_editor_file_entry_changed (GtkWidget *widget, gimp_path_editor_file_entry_changed (GtkWidget *widget,
GimpPathEditor *editor) GimpPathEditor *editor)
{ {
GimpPathEditorPrivate *priv = GET_PRIVATE (editor); gchar *dir;
gchar *dir; gchar *utf8;
gchar *utf8; GtkTreeIter iter;
GtkTreeIter iter;
dir = gimp_file_entry_get_filename (GIMP_FILE_ENTRY (widget)); dir = gimp_file_entry_get_filename (GIMP_FILE_ENTRY (widget));
if (strcmp (dir, "") == 0) if (strcmp (dir, "") == 0)
@ -810,23 +780,23 @@ gimp_path_editor_file_entry_changed (GtkWidget *widget,
utf8 = g_filename_display_name (dir); utf8 = g_filename_display_name (dir);
if (priv->sel_path == NULL) if (editor->sel_path == NULL)
{ {
gtk_list_store_append (priv->dir_list, &iter); gtk_list_store_append (editor->dir_list, &iter);
gtk_list_store_set (priv->dir_list, &iter, gtk_list_store_set (editor->dir_list, &iter,
COLUMN_UTF8, utf8, COLUMN_UTF8, utf8,
COLUMN_DIRECTORY, dir, COLUMN_DIRECTORY, dir,
COLUMN_WRITABLE, FALSE, COLUMN_WRITABLE, FALSE,
-1); -1);
priv->num_items++; editor->num_items++;
gtk_tree_selection_select_iter (priv->sel, &iter); gtk_tree_selection_select_iter (editor->sel, &iter);
} }
else else
{ {
gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->dir_list), &iter, gtk_tree_model_get_iter (GTK_TREE_MODEL (editor->dir_list), &iter,
priv->sel_path); editor->sel_path);
gtk_list_store_set (priv->dir_list, &iter, gtk_list_store_set (editor->dir_list, &iter,
COLUMN_UTF8, utf8, COLUMN_UTF8, utf8,
COLUMN_DIRECTORY, dir, COLUMN_DIRECTORY, dir,
-1); -1);
@ -842,43 +812,42 @@ static void
gimp_path_editor_selection_changed (GtkTreeSelection *sel, gimp_path_editor_selection_changed (GtkTreeSelection *sel,
GimpPathEditor *editor) GimpPathEditor *editor)
{ {
GimpPathEditorPrivate *priv = GET_PRIVATE (editor); GtkTreeIter iter;
GtkTreeIter iter; gchar *directory;
gchar *directory; gint *indices;
gint *indices;
if (gtk_tree_selection_get_selected (sel, NULL, &iter)) if (gtk_tree_selection_get_selected (sel, NULL, &iter))
{ {
gtk_tree_model_get (GTK_TREE_MODEL (priv->dir_list), &iter, gtk_tree_model_get (GTK_TREE_MODEL (editor->dir_list), &iter,
COLUMN_DIRECTORY, &directory, COLUMN_DIRECTORY, &directory,
-1); -1);
g_signal_handlers_block_by_func (priv->file_entry, g_signal_handlers_block_by_func (editor->file_entry,
gimp_path_editor_file_entry_changed, gimp_path_editor_file_entry_changed,
editor); editor);
gimp_file_entry_set_filename (GIMP_FILE_ENTRY (priv->file_entry), gimp_file_entry_set_filename (GIMP_FILE_ENTRY (editor->file_entry),
directory); directory);
g_signal_handlers_unblock_by_func (priv->file_entry, g_signal_handlers_unblock_by_func (editor->file_entry,
gimp_path_editor_file_entry_changed, gimp_path_editor_file_entry_changed,
editor); editor);
g_free (directory); g_free (directory);
if (priv->sel_path) if (editor->sel_path)
gtk_tree_path_free (priv->sel_path); gtk_tree_path_free (editor->sel_path);
priv->sel_path = editor->sel_path =
gtk_tree_model_get_path (GTK_TREE_MODEL (priv->dir_list), &iter); gtk_tree_model_get_path (GTK_TREE_MODEL (editor->dir_list), &iter);
indices = gtk_tree_path_get_indices (priv->sel_path); indices = gtk_tree_path_get_indices (editor->sel_path);
gtk_widget_set_sensitive (priv->delete_button, TRUE); gtk_widget_set_sensitive (editor->delete_button, TRUE);
gtk_widget_set_sensitive (priv->up_button, (indices[0] > 0)); gtk_widget_set_sensitive (editor->up_button, (indices[0] > 0));
gtk_widget_set_sensitive (priv->down_button, gtk_widget_set_sensitive (editor->down_button,
(indices[0] < (priv->num_items - 1))); (indices[0] < (editor->num_items - 1)));
gtk_widget_set_sensitive (priv->file_entry, TRUE); gtk_widget_set_sensitive (editor->file_entry, TRUE);
} }
else else
{ {
@ -886,7 +855,7 @@ gimp_path_editor_selection_changed (GtkTreeSelection *sel,
gimp_path_editor_selection_changed, gimp_path_editor_selection_changed,
editor); editor);
gtk_tree_selection_select_path (priv->sel, priv->sel_path); gtk_tree_selection_select_path (editor->sel, editor->sel_path);
g_signal_handlers_unblock_by_func (sel, g_signal_handlers_unblock_by_func (sel,
gimp_path_editor_selection_changed, gimp_path_editor_selection_changed,
@ -899,21 +868,20 @@ gimp_path_editor_writable_toggled (GtkCellRendererToggle *toggle,
gchar *path_str, gchar *path_str,
GimpPathEditor *editor) GimpPathEditor *editor)
{ {
GimpPathEditorPrivate *priv = GET_PRIVATE (editor); GtkTreePath *path;
GtkTreePath *path; GtkTreeIter iter;
GtkTreeIter iter;
path = gtk_tree_path_new_from_string (path_str); path = gtk_tree_path_new_from_string (path_str);
if (gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->dir_list), &iter, path)) if (gtk_tree_model_get_iter (GTK_TREE_MODEL (editor->dir_list), &iter, path))
{ {
gboolean dir_writable; gboolean dir_writable;
gtk_tree_model_get (GTK_TREE_MODEL (priv->dir_list), &iter, gtk_tree_model_get (GTK_TREE_MODEL (editor->dir_list), &iter,
COLUMN_WRITABLE, &dir_writable, COLUMN_WRITABLE, &dir_writable,
-1); -1);
gtk_list_store_set (priv->dir_list, &iter, gtk_list_store_set (editor->dir_list, &iter,
COLUMN_WRITABLE, ! dir_writable, COLUMN_WRITABLE, ! dir_writable,
-1); -1);

View file

@ -32,25 +32,7 @@ G_BEGIN_DECLS
#define GIMP_TYPE_PATH_EDITOR (gimp_path_editor_get_type ()) #define GIMP_TYPE_PATH_EDITOR (gimp_path_editor_get_type ())
G_DECLARE_DERIVABLE_TYPE (GimpPathEditor, gimp_path_editor, GIMP, PATH_EDITOR, GtkBox) G_DECLARE_FINAL_TYPE (GimpPathEditor, gimp_path_editor, GIMP, PATH_EDITOR, GtkBox)
struct _GimpPathEditorClass
{
GtkBoxClass parent_class;
void (* path_changed) (GimpPathEditor *editor);
void (* writable_changed) (GimpPathEditor *editor);
/* Padding for future expansion */
void (* _gimp_reserved1) (void);
void (* _gimp_reserved2) (void);
void (* _gimp_reserved3) (void);
void (* _gimp_reserved4) (void);
void (* _gimp_reserved5) (void);
void (* _gimp_reserved6) (void);
void (* _gimp_reserved7) (void);
void (* _gimp_reserved8) (void);
};
/* For information look into the C source or the html documentation */ /* For information look into the C source or the html documentation */

File diff suppressed because it is too large Load diff

View file

@ -33,26 +33,7 @@ G_BEGIN_DECLS
#define GIMP_TYPE_SIZE_ENTRY (gimp_size_entry_get_type ()) #define GIMP_TYPE_SIZE_ENTRY (gimp_size_entry_get_type ())
G_DECLARE_DERIVABLE_TYPE (GimpSizeEntry, gimp_size_entry, GIMP, SIZE_ENTRY, GtkGrid) G_DECLARE_FINAL_TYPE (GimpSizeEntry, gimp_size_entry, GIMP, SIZE_ENTRY, GtkGrid)
struct _GimpSizeEntryClass
{
GtkGridClass parent_class;
void (* value_changed) (GimpSizeEntry *gse);
void (* refval_changed) (GimpSizeEntry *gse);
void (* unit_changed) (GimpSizeEntry *gse);
/* Padding for future expansion */
void (* _gimp_reserved1) (void);
void (* _gimp_reserved2) (void);
void (* _gimp_reserved3) (void);
void (* _gimp_reserved4) (void);
void (* _gimp_reserved5) (void);
void (* _gimp_reserved6) (void);
void (* _gimp_reserved7) (void);
void (* _gimp_reserved8) (void);
};
/* For information look into the C source or the html documentation */ /* For information look into the C source or the html documentation */