#include "gtkcontainer.h"
#include "gtkbuildable.h"
+#include "gtkbuilderprivate.h"
#include "gtkprivate.h"
#include "gtkmain.h"
#include "gtkmarshalers.h"
G_TYPE_NONE, 1,
GTK_TYPE_WIDGET);
container_signals[CHECK_RESIZE] =
- g_signal_new (I_("check_resize"),
+ g_signal_new (I_("check-resize"),
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GtkContainerClass, check_resize),
GObject *child,
const gchar *type)
{
- g_return_if_fail (GTK_IS_WIDGET (child));
-
- gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child));
+ if (type)
+ {
+ GTK_BUILDER_WARN_INVALID_CHILD_TYPE (buildable, type);
+ }
+ else if (GTK_IS_WIDGET (child) && GTK_WIDGET (child)->parent == NULL)
+ {
+ gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child));
+ }
+ else
+ g_warning ("Cannot add an object of type %s to a container of type %s",
+ g_type_name (G_OBJECT_TYPE (child)), g_type_name (G_OBJECT_TYPE (buildable)));
}
static void
GtkContainer *container;
GtkWidget *child;
gchar *child_prop_name;
+ gchar *context;
+ gboolean translatable;
} PackingPropertiesData;
static void
guint i;
if (strcmp (element_name, "property") == 0)
- for (i = 0; names[i]; i++)
- if (strcmp (names[i], "name") == 0)
- parser_data->child_prop_name = g_strdup (values[i]);
+ {
+ for (i = 0; names[i]; i++)
+ if (strcmp (names[i], "name") == 0)
+ parser_data->child_prop_name = g_strdup (values[i]);
+ else if (strcmp (names[i], "translatable") == 0)
+ {
+ if (!_gtk_builder_boolean_from_string (values[1],
+ &parser_data->translatable,
+ error))
+ return;
+ }
+ else if (strcmp (names[i], "comments") == 0)
+ ; /* for translators */
+ else if (strcmp (names[i], "context") == 0)
+ parser_data->context = g_strdup (values[1]);
+ else
+ g_warning ("Unsupported attribute for GtkContainer Child "
+ "property: %s\n", names[i]);
+ }
else if (strcmp (element_name, "packing") == 0)
return;
else
GError **error)
{
PackingPropertiesData *parser_data = (PackingPropertiesData*)user_data;
+ gchar* value;
if (!parser_data->child_prop_name)
return;
+
+ if (parser_data->translatable && text_len)
+ {
+ const gchar* domain;
+ domain = gtk_builder_get_translation_domain (parser_data->builder);
+
+ value = _gtk_builder_parser_translate (domain,
+ parser_data->context,
+ text);
+ }
+ else
+ {
+ value = g_strdup (text);
+ }
gtk_container_buildable_set_child_property (parser_data->container,
parser_data->builder,
parser_data->child,
parser_data->child_prop_name,
- text);
+ value);
g_free (parser_data->child_prop_name);
+ g_free (parser_data->context);
+ g_free (value);
parser_data->child_prop_name = NULL;
+ parser_data->context = NULL;
+ parser_data->translatable = FALSE;
}
static const GMarkupParser attributes_parser =
gtk_container_destroy (GtkObject *object)
{
GtkContainer *container = GTK_CONTAINER (object);
-
+
if (GTK_CONTAINER_RESIZE_PENDING (container))
_gtk_container_dequeue_resize_handler (container);
*/
if (container->has_focus_chain)
gtk_container_unset_focus_chain (container);
-
+
gtk_container_foreach (container, (GtkCallback) gtk_widget_destroy, NULL);
-
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
+
+ GTK_OBJECT_CLASS (parent_class)->destroy (object);
}
static void