static GParamSpec *builder_props[LAST_PROP];
-struct _GtkBuilderPrivate
+typedef struct
{
gchar *domain;
GHashTable *objects;
gchar *resource_prefix;
GType template_type;
GtkApplication *application;
-};
+} GtkBuilderPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (GtkBuilder, gtk_builder, G_TYPE_OBJECT)
static void
gtk_builder_init (GtkBuilder *builder)
{
- builder->priv = gtk_builder_get_instance_private (builder);
- builder->priv->domain = NULL;
- builder->priv->objects = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, g_object_unref);
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
+
+ priv = gtk_builder_get_instance_private (builder);
+ priv->domain = NULL;
+ priv->objects = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, g_object_unref);
}
static void
gtk_builder_finalize (GObject *object)
{
- GtkBuilderPrivate *priv = GTK_BUILDER (object)->priv;
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (GTK_BUILDER (object));
g_free (priv->domain);
g_free (priv->filename);
GParamSpec *pspec)
{
GtkBuilder *builder = GTK_BUILDER (object);
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
switch (prop_id)
{
case PROP_TRANSLATION_DOMAIN:
- g_value_set_string (value, builder->priv->domain);
+ g_value_set_string (value, priv->domain);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
ObjectProperties **parameters,
ObjectProperties **filtered_parameters)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
GSList *l;
DelayedProperty *property;
GError *error = NULL;
(G_PARAM_SPEC_VALUE_TYPE (prop->pspec) != GDK_TYPE_PAINTABLE) &&
(G_PARAM_SPEC_VALUE_TYPE (prop->pspec) != G_TYPE_FILE))
{
- GObject *object = g_hash_table_lookup (builder->priv->objects,
+ GObject *object = g_hash_table_lookup (priv->objects,
prop->text->str);
if (object)
property->value = g_strdup (prop->text->str);
property->line = prop->line;
property->col = prop->col;
- builder->priv->delayed_properties =
- g_slist_prepend (builder->priv->delayed_properties, property);
+ priv->delayed_properties = g_slist_prepend (priv->delayed_properties,
+ property);
continue;
}
}
const gchar *id,
GObject *object)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
+
object_set_name (object, id);
- g_hash_table_insert (builder->priv->objects, g_strdup (id), g_object_ref (object));
+ g_hash_table_insert (priv->objects, g_strdup (id), g_object_ref (object));
}
static void
GObject *target,
GSList *bindings)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
GSList *l;
for (l = bindings; l; l = l->next)
info->target = target;
}
- builder->priv->bindings = g_slist_concat (builder->priv->bindings, bindings);
+ priv->bindings = g_slist_concat (priv->bindings, bindings);
}
GObject *
ObjectInfo *info,
GError **error)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
ObjectProperties *parameters, *construct_parameters;
GObject *obj;
int i;
g_assert (info->type != G_TYPE_INVALID);
- if (builder->priv->template_type != 0 &&
- g_type_is_a (info->type, builder->priv->template_type))
+ if (priv->template_type != 0 &&
+ g_type_is_a (info->type, priv->template_type))
{
g_set_error (error,
GTK_BUILDER_ERROR,
GTK_BUILDER_ERROR_OBJECT_TYPE_REFUSED,
"Refused to build object of type '%s' because it "
"conforms to the template type '%s', avoiding infinite recursion.",
- g_type_name (info->type), g_type_name (builder->priv->template_type));
+ g_type_name (info->type), g_type_name (priv->template_type));
return NULL;
}
{
GObject *constructor;
- constructor = g_hash_table_lookup (builder->priv->objects, info->constructor);
+ constructor = g_hash_table_lookup (priv->objects, info->constructor);
if (constructor == NULL)
{
g_set_error (error,
_gtk_builder_add_signals (GtkBuilder *builder,
GSList *signals)
{
- builder->priv->signals = g_slist_concat (builder->priv->signals,
- g_slist_copy (signals));
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
+
+ priv->signals = g_slist_concat (priv->signals,
+ g_slist_copy (signals));
}
static void
gtk_builder_apply_delayed_properties (GtkBuilder *builder)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
GSList *l, *props;
/* take the list over from the builder->priv.
* g_slist_reverse does not copy the list, so the list now
* belongs to us (and we free it at the end of this function).
*/
- props = g_slist_reverse (builder->priv->delayed_properties);
- builder->priv->delayed_properties = NULL;
+ props = g_slist_reverse (priv->delayed_properties);
+ priv->delayed_properties = NULL;
for (l = props; l; l = l->next)
{
DelayedProperty *property = l->data;
GObject *object, *obj;
- object = g_hash_table_lookup (builder->priv->objects, property->object);
+ object = g_hash_table_lookup (priv->objects, property->object);
g_assert (object != NULL);
obj = _gtk_builder_lookup_object (builder, property->value, property->line, property->col);
static inline void
gtk_builder_create_bindings (GtkBuilder *builder)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
GSList *l;
- for (l = builder->priv->bindings; l; l = l->next)
+ for (l = priv->bindings; l; l = l->next)
{
BindingInfo *info = l->data;
GObject *source;
free_binding_info (info, NULL);
}
- g_slist_free (builder->priv->bindings);
- builder->priv->bindings = NULL;
+ g_slist_free (priv->bindings);
+ priv->bindings = NULL;
}
void
const gchar *filename,
GError **error)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
gchar *buffer;
gsize length;
GError *tmp_error;
return 0;
}
- g_free (builder->priv->filename);
- g_free (builder->priv->resource_prefix);
- builder->priv->filename = g_strdup (filename);
- builder->priv->resource_prefix = NULL;
+ g_free (priv->filename);
+ g_free (priv->resource_prefix);
+ priv->filename = g_strdup (filename);
+ priv->resource_prefix = NULL;
_gtk_builder_parser_parse_buffer (builder, filename,
buffer, length,
gchar **object_ids,
GError **error)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
gchar *buffer;
gsize length;
GError *tmp_error;
return 0;
}
- g_free (builder->priv->filename);
- g_free (builder->priv->resource_prefix);
- builder->priv->filename = g_strdup (filename);
- builder->priv->resource_prefix = NULL;
+ g_free (priv->filename);
+ g_free (priv->resource_prefix);
+ priv->filename = g_strdup (filename);
+ priv->resource_prefix = NULL;
_gtk_builder_parser_parse_buffer (builder, filename,
buffer, length,
gsize length,
GError **error)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
GError *tmp_error;
g_return_val_if_fail (GTK_IS_BUILDER (builder), 0);
tmp_error = NULL;
- g_free (builder->priv->filename);
- g_free (builder->priv->resource_prefix);
- builder->priv->filename = g_strdup (".");
- builder->priv->resource_prefix = NULL;
- builder->priv->template_type = template_type;
+ g_free (priv->filename);
+ g_free (priv->resource_prefix);
+ priv->filename = g_strdup (".");
+ priv->resource_prefix = NULL;
+ priv->template_type = template_type;
gtk_builder_expose_object (builder, g_type_name (template_type), G_OBJECT (widget));
_gtk_builder_parser_parse_buffer (builder, "<input>",
const gchar *resource_path,
GError **error)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
GError *tmp_error;
GBytes *data;
char *filename_for_errors;
return 0;
}
- g_free (builder->priv->filename);
- g_free (builder->priv->resource_prefix);
- builder->priv->filename = g_strdup (".");
+ g_free (priv->filename);
+ g_free (priv->resource_prefix);
+ priv->filename = g_strdup (".");
slash = strrchr (resource_path, '/');
if (slash != NULL)
- builder->priv->resource_prefix =
- g_strndup (resource_path, slash - resource_path + 1);
+ priv->resource_prefix = g_strndup (resource_path, slash - resource_path + 1);
else
- builder->priv->resource_prefix =
- g_strdup ("/");
+ priv->resource_prefix = g_strdup ("/");
filename_for_errors = g_strconcat ("<resource>", resource_path, NULL);
gchar **object_ids,
GError **error)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
GError *tmp_error;
GBytes *data;
char *filename_for_errors;
return 0;
}
- g_free (builder->priv->filename);
- g_free (builder->priv->resource_prefix);
- builder->priv->filename = g_strdup (".");
+ g_free (priv->filename);
+ g_free (priv->resource_prefix);
+ priv->filename = g_strdup (".");
slash = strrchr (resource_path, '/');
if (slash != NULL)
- builder->priv->resource_prefix =
- g_strndup (resource_path, slash - resource_path + 1);
+ priv->resource_prefix = g_strndup (resource_path, slash - resource_path + 1);
else
- builder->priv->resource_prefix =
- g_strdup ("/");
+ priv->resource_prefix = g_strdup ("/");
filename_for_errors = g_strconcat ("<resource>", resource_path, NULL);
gsize length,
GError **error)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
GError *tmp_error;
g_return_val_if_fail (GTK_IS_BUILDER (builder), 0);
tmp_error = NULL;
- g_free (builder->priv->filename);
- g_free (builder->priv->resource_prefix);
- builder->priv->filename = g_strdup (".");
- builder->priv->resource_prefix = NULL;
+ g_free (priv->filename);
+ g_free (priv->resource_prefix);
+ priv->filename = g_strdup (".");
+ priv->resource_prefix = NULL;
_gtk_builder_parser_parse_buffer (builder, "<input>",
buffer, length,
gchar **object_ids,
GError **error)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
GError *tmp_error;
g_return_val_if_fail (GTK_IS_BUILDER (builder), 0);
tmp_error = NULL;
- g_free (builder->priv->filename);
- g_free (builder->priv->resource_prefix);
- builder->priv->filename = g_strdup (".");
- builder->priv->resource_prefix = NULL;
+ g_free (priv->filename);
+ g_free (priv->resource_prefix);
+ priv->filename = g_strdup (".");
+ priv->resource_prefix = NULL;
_gtk_builder_parser_parse_buffer (builder, "<input>",
buffer, length,
gtk_builder_get_object (GtkBuilder *builder,
const gchar *name)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
+
g_return_val_if_fail (GTK_IS_BUILDER (builder), NULL);
g_return_val_if_fail (name != NULL, NULL);
- return g_hash_table_lookup (builder->priv->objects, name);
+ return g_hash_table_lookup (priv->objects, name);
}
/**
GSList *
gtk_builder_get_objects (GtkBuilder *builder)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
GSList *objects = NULL;
GObject *object;
GHashTableIter iter;
g_return_val_if_fail (GTK_IS_BUILDER (builder), NULL);
- g_hash_table_iter_init (&iter, builder->priv->objects);
+ g_hash_table_iter_init (&iter, priv->objects);
while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&object))
objects = g_slist_prepend (objects, object);
gtk_builder_set_translation_domain (GtkBuilder *builder,
const gchar *domain)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
gchar *new_domain;
g_return_if_fail (GTK_IS_BUILDER (builder));
new_domain = g_strdup (domain);
- g_free (builder->priv->domain);
- builder->priv->domain = new_domain;
+ g_free (priv->domain);
+ priv->domain = new_domain;
g_object_notify_by_pspec (G_OBJECT (builder), builder_props[PROP_TRANSLATION_DOMAIN]);
}
const gchar *
gtk_builder_get_translation_domain (GtkBuilder *builder)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
+
g_return_val_if_fail (GTK_IS_BUILDER (builder), NULL);
- return builder->priv->domain;
+ return priv->domain;
}
/**
const gchar *name,
GObject *object)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
+
g_return_if_fail (GTK_IS_BUILDER (builder));
g_return_if_fail (name && name[0]);
- g_return_if_fail (!g_hash_table_contains (builder->priv->objects, name));
+ g_return_if_fail (!g_hash_table_contains (priv->objects, name));
object_set_name (object, name);
- g_hash_table_insert (builder->priv->objects,
+ g_hash_table_insert (priv->objects,
g_strdup (name),
g_object_ref (object));
}
GtkBuilderConnectFunc func,
gpointer user_data)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
GSList *l;
GObject *object;
GObject *connect_object;
g_return_if_fail (GTK_IS_BUILDER (builder));
g_return_if_fail (func != NULL);
- if (!builder->priv->signals)
+ if (!priv->signals)
return;
- builder->priv->signals = g_slist_reverse (builder->priv->signals);
- for (l = builder->priv->signals; l; l = l->next)
+ priv->signals = g_slist_reverse (priv->signals);
+ for (l = priv->signals; l; l = l->next)
{
SignalInfo *signal = (SignalInfo*)l->data;
const gchar *signal_name;
signal_name = g_signal_name (signal->id);
- object = g_hash_table_lookup (builder->priv->objects,
- signal->object_name);
+ object = g_hash_table_lookup (priv->objects, signal->object_name);
g_assert (object != NULL);
connect_object = NULL;
if (signal->connect_object_name)
{
- connect_object = g_hash_table_lookup (builder->priv->objects,
+ connect_object = g_hash_table_lookup (priv->objects,
signal->connect_object_name);
if (!connect_object)
g_warning ("Could not lookup object %s on signal %s of object %s",
connect_object, signal->flags, user_data);
}
- g_slist_free_full (builder->priv->signals, (GDestroyNotify)_free_signal_info);
- builder->priv->signals = NULL;
+ g_slist_free_full (priv->signals, (GDestroyNotify)_free_signal_info);
+ priv->signals = NULL;
if (detailed_id)
g_string_free (detailed_id, TRUE);
GValue *value,
GError **error)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
gboolean ret = TRUE;
g_return_val_if_fail (string != NULL, FALSE);
GdkPixbuf *pixbuf = NULL;
GObject *object;
- object = g_hash_table_lookup (builder->priv->objects, string);
+ object = g_hash_table_lookup (priv->objects, string);
if (object)
{
{
GFile *file;
- if (g_hash_table_contains (builder->priv->objects, string))
+ if (g_hash_table_contains (priv->objects, string))
{
g_set_error (error,
GTK_BUILDER_ERROR,
gchar *
_gtk_builder_get_resource_path (GtkBuilder *builder, const gchar *string)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
+
if (g_str_has_prefix (string, "resource:///"))
return g_uri_unescape_string (string + 11, "/");
if (g_path_is_absolute (string) ||
- builder->priv->resource_prefix == NULL)
+ priv->resource_prefix == NULL)
return NULL;
- return g_build_path ("/", builder->priv->resource_prefix, string, NULL);
+ return g_build_path ("/", priv->resource_prefix, string, NULL);
}
gchar *
_gtk_builder_get_absolute_filename (GtkBuilder *builder,
const gchar *string)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
gchar *filename;
gchar *dirname = NULL;
if (g_path_is_absolute (string))
return g_strdup (string);
- if (builder->priv->filename &&
- strcmp (builder->priv->filename, ".") != 0)
+ if (priv->filename &&
+ strcmp (priv->filename, ".") != 0)
{
- dirname = g_path_get_dirname (builder->priv->filename);
+ dirname = g_path_get_dirname (priv->filename);
if (strcmp (dirname, ".") == 0)
{
GType
_gtk_builder_get_template_type (GtkBuilder *builder)
{
- return builder->priv->template_type;
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
+
+ return priv->template_type;
}
/**
const gchar *callback_name,
GCallback callback_symbol)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
+
g_return_if_fail (GTK_IS_BUILDER (builder));
g_return_if_fail (callback_name && callback_name[0]);
g_return_if_fail (callback_symbol != NULL);
- if (!builder->priv->callbacks)
- builder->priv->callbacks = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, NULL);
+ if (!priv->callbacks)
+ priv->callbacks = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, NULL);
- g_hash_table_insert (builder->priv->callbacks, g_strdup (callback_name), callback_symbol);
+ g_hash_table_insert (priv->callbacks, g_strdup (callback_name), callback_symbol);
}
/**
gtk_builder_lookup_callback_symbol (GtkBuilder *builder,
const gchar *callback_name)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
+
g_return_val_if_fail (GTK_IS_BUILDER (builder), NULL);
g_return_val_if_fail (callback_name && callback_name[0], NULL);
- if (!builder->priv->callbacks)
+ if (!priv->callbacks)
return NULL;
- return g_hash_table_lookup (builder->priv->callbacks, callback_name);
+ return g_hash_table_lookup (priv->callbacks, callback_name);
}
/**
gtk_builder_set_application (GtkBuilder *builder,
GtkApplication *application)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
+
g_return_if_fail (GTK_IS_BUILDER (builder));
g_return_if_fail (GTK_IS_APPLICATION (application));
- if (builder->priv->application)
- g_object_unref (builder->priv->application);
+ if (priv->application)
+ g_object_unref (priv->application);
- builder->priv->application = g_object_ref (application);
+ priv->application = g_object_ref (application);
}
/**
GtkApplication *
gtk_builder_get_application (GtkBuilder *builder)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
+
g_return_val_if_fail (GTK_IS_BUILDER (builder), NULL);
- if (!builder->priv->application)
+ if (!priv->application)
{
GApplication *application;
application = g_application_get_default ();
if (application && GTK_IS_APPLICATION (application))
- builder->priv->application = g_object_ref (GTK_APPLICATION (application));
+ priv->application = g_object_ref (GTK_APPLICATION (application));
}
- return builder->priv->application;
+ return priv->application;
}
/*< private >
GMarkupParseContext *context,
GError **error)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
gint line, col;
g_markup_parse_context_get_position (context, &line, &col);
- g_prefix_error (error, "%s:%d:%d ", builder->priv->filename, line, col);
+ g_prefix_error (error, "%s:%d:%d ", priv->filename, line, col);
}
/*< private >
const gchar *element_name,
GError **error)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
gint line, col;
g_markup_parse_context_get_position (context, &line, &col);
GTK_BUILDER_ERROR,
GTK_BUILDER_ERROR_UNHANDLED_TAG,
"%s:%d:%d Unsupported tag for %s: <%s>",
- builder->priv->filename, line, col,
+ priv->filename, line, col,
object, element_name);
}
const gchar *parent_name,
GError **error)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
const GSList *stack;
gint line, col;
const gchar *parent;
GTK_BUILDER_ERROR,
GTK_BUILDER_ERROR_INVALID_TAG,
"%s:%d:%d Can't use <%s> here",
- builder->priv->filename, line, col, element);
+ priv->filename, line, col, element);
return FALSE;
}
gint line,
gint col)
{
+ GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
GObject *obj;
GError *error = NULL;
- obj = g_hash_table_lookup (builder->priv->objects, name);
+ obj = g_hash_table_lookup (priv->objects, name);
error = (GError *) g_object_get_data (G_OBJECT (builder), "lookup-error");
if (!obj && !error)
g_set_error (&error,
GTK_BUILDER_ERROR, GTK_BUILDER_ERROR_INVALID_ID,
"%s:%d:%d Object with ID %s not found",
- builder->priv->filename, line, col, name);
+ priv->filename, line, col, name);
g_object_set_data_full (G_OBJECT (builder), "lookup-error",
error, (GDestroyNotify)g_error_free);
}