56
56
#define DEFAULT_ICON_NAME "widget-gtk-frame"
58
#define GLADE_WIDGET_ADAPTOR_GET_PRIVATE(o) \
59
(G_TYPE_INSTANCE_GET_PRIVATE ((o), GLADE_TYPE_WIDGET_ADAPTOR, GladeWidgetAdaptorPrivate))
61
58
struct _GladeWidgetAdaptorPrivate
63
60
GType type; /* GType of the widget */
149
146
* no reason for it since the autogenerated class for GtWidget is GladeGtkWidgetAdaptor
150
147
* TODO: rename GladeWidgetAdaptor to GladeGObjectAdator or GladeObjectAdator
152
G_DEFINE_TYPE (GladeWidgetAdaptor, glade_widget_adaptor, G_TYPE_OBJECT);
149
G_DEFINE_TYPE_WITH_PRIVATE (GladeWidgetAdaptor, glade_widget_adaptor, G_TYPE_OBJECT);
154
151
/*******************************************************************************
233
glade_widget_adaptor_hash_find (gpointer key, gpointer value,
230
glade_widget_adaptor_hash_find (gpointer key,
234
232
gpointer user_data)
236
234
GladeWidgetAdaptor *adaptor = value;
260
static GladeInternalChild *
261
gwa_internal_child_find (GList *list, const gchar *name)
265
for (l = list; l; l = g_list_next (l))
267
GladeInternalChild *data = l->data;
269
if (strcmp (data->name, name) == 0)
274
GladeInternalChild *child;
275
if ((child = gwa_internal_child_find (data->children, name)))
262
283
/*******************************************************************************
263
284
Base Object Implementation detail
264
285
*******************************************************************************/
400
421
gwa_setup_introspected_props_from_pspecs (GladeWidgetAdaptor *adaptor,
402
gint n_specs, gboolean is_packing)
404
426
GladeWidgetAdaptor *parent_adaptor = gwa_get_parent_adaptor (adaptor);
405
427
GladePropertyClass *property_class;
435
457
gwa_setup_properties (GladeWidgetAdaptor *adaptor,
436
GObjectClass *object_class, gboolean is_packing)
458
GObjectClass *object_class,
438
461
GParamSpec **specs = NULL;
439
462
guint n_specs = 0;
586
glade_widget_adaptor_constructor (GType type,
587
guint n_construct_properties,
588
GObjectConstructParam * construct_properties)
609
glade_widget_adaptor_constructor (GType type,
610
guint n_construct_properties,
611
GObjectConstructParam *construct_properties)
590
613
GladeWidgetAdaptor *adaptor, *parent_adaptor;
591
614
GObject *ret_obj;
675
gwa_packing_default_free (GladePackingDefault * def)
698
gwa_packing_default_free (GladePackingDefault *def)
677
700
g_free (def->id);
678
701
g_free (def->value);
682
gwa_child_packing_free (GladeChildPacking * packing)
705
gwa_child_packing_free (GladeChildPacking *packing)
684
707
g_free (packing->parent_name);
884
907
*******************************************************************************/
885
908
static GladeWidget *
886
909
glade_widget_adaptor_object_create_widget (GladeWidgetAdaptor *adaptor,
887
const gchar *first_property_name,
910
const gchar *first_property_name,
890
913
return GLADE_WIDGET (g_object_new_valist (GLADE_TYPE_WIDGET,
891
914
first_property_name, var_args));
941
964
glade_widget_adaptor_object_set_property (GladeWidgetAdaptor *adaptor,
943
const gchar *property_name,
966
const gchar *property_name,
946
969
g_object_set_property (object, property_name, value);
950
973
glade_widget_adaptor_object_get_property (GladeWidgetAdaptor *adaptor,
952
const gchar *property_name,
975
const gchar *property_name,
955
978
g_object_get_property (object, property_name, value);
959
982
glade_widget_adaptor_object_action_activate (GladeWidgetAdaptor *adaptor,
961
const gchar *action_id)
984
const gchar *action_id)
963
986
g_message ("No action_activate() support in adaptor %s for action '%s'",
964
987
adaptor->priv->name, action_id);
968
991
glade_widget_adaptor_object_child_action_activate (GladeWidgetAdaptor *adaptor,
971
const gchar *action_id)
994
const gchar *action_id)
973
996
g_message ("No child_action_activate() support in adaptor %s for action '%s'",
974
997
adaptor->priv->name, action_id);
1052
1075
glade_widget_adaptor_object_write_widget (GladeWidgetAdaptor *adaptor,
1053
GladeWidget *widget,
1054
GladeXmlContext *context,
1076
GladeWidget *widget,
1077
GladeXmlContext *context,
1072
1095
glade_widget_adaptor_object_write_widget_after (GladeWidgetAdaptor *adaptor,
1073
GladeWidget *widget,
1074
GladeXmlContext *context,
1096
GladeWidget *widget,
1097
GladeXmlContext *context,
1081
1104
glade_widget_adaptor_object_read_child (GladeWidgetAdaptor *adaptor,
1082
GladeWidget *widget,
1105
GladeWidget *widget,
1085
1108
GladeXmlNode *widget_node, *packing_node, *iter_node;
1086
1109
GladeWidget *child_widget;
1158
1181
glade_widget_adaptor_object_write_child (GladeWidgetAdaptor *adaptor,
1159
GladeWidget *widget,
1160
GladeXmlContext *context,
1182
GladeWidget *widget,
1183
GladeXmlContext *context,
1163
1186
GladeXmlNode *child_node, *packing_node;
1260
1283
static GladeEditorProperty *
1261
1284
glade_widget_adaptor_object_create_eprop (GladeWidgetAdaptor *adaptor,
1262
1285
GladePropertyClass *klass,
1263
gboolean use_command)
1286
gboolean use_command)
1265
1288
GladeEditorProperty *eprop;
1266
1289
GParamSpec *pspec;
1290
1313
glade_widget_adaptor_object_string_from_value (GladeWidgetAdaptor *adaptor,
1291
1314
GladePropertyClass *klass,
1292
const GValue *value)
1315
const GValue *value)
1294
1317
return glade_property_class_make_string_from_gvalue (klass, value);
1301
1324
return (GladeEditable *) glade_editor_table_new (adaptor, type);
1328
glade_internal_child_append (GladeWidgetAdaptor *adaptor,
1335
for (l = list; l; l = g_list_next (l))
1337
GladeInternalChild *internal = l->data;
1340
child = glade_widget_adaptor_get_internal_child (adaptor,
1344
*children = g_list_prepend (*children, child);
1305
1349
glade_widget_adaptor_object_get_children (GladeWidgetAdaptor *adaptor,
1306
1350
GObject *object)
1308
GList *list = adaptor->priv->internal_children;
1309
GList *l, *children = NULL;
1311
for (l = list; l; l = g_list_next (l))
1352
GladeWidget *gwidget = glade_widget_get_from_gobject (object);
1353
GList *children = NULL;
1356
if (gwidget && (name = glade_widget_get_internal (gwidget)))
1313
GladeInternalChild *internal = l->data;
1316
child = glade_widget_adaptor_get_internal_child (adaptor,
1320
children = g_list_prepend (children, child);
1358
GladeWidget *parent = gwidget;
1360
/* Get non internal parent */
1361
while ((parent = glade_widget_get_parent (parent)) &&
1362
glade_widget_get_internal (parent));
1366
GladeWidgetAdaptor *padaptor = glade_widget_get_adaptor (parent);
1367
GladeInternalChild *internal;
1369
internal = gwa_internal_child_find (padaptor->priv->internal_children,
1372
if (internal && internal->children)
1373
glade_internal_child_append (padaptor, glade_widget_get_object (parent),
1374
internal->children, &children);
1380
glade_internal_child_append (adaptor, object,
1381
adaptor->priv->internal_children,
1323
1384
return children;
1448
1509
g_param_spec_pointer
1449
1510
("cursor", _("Cursor"),
1450
1511
_("A cursor for inserting widgets in the UI"), G_PARAM_READABLE));
1452
g_type_class_add_private (adaptor_class, sizeof (GladeWidgetAdaptorPrivate));
1455
1514
/*******************************************************************************
1625
1685
gwa_derived_class_init (GladeWidgetAdaptorClass *adaptor_class,
1626
GWADerivedClassData *data)
1686
GWADerivedClassData *data)
1628
1688
GladeXmlNode *node = data->node;
1629
1689
GModule *module = data->module;
1853
1913
static GladeChildPacking *
1854
1914
glade_widget_adaptor_get_child_packing (GladeWidgetAdaptor *child_adaptor,
1855
const gchar *parent_name)
1915
const gchar *parent_name)
2310
static GladeInternalChild *
2311
gwa_internal_child_find (GList *list, gchar *name)
2315
for (l = list; l; l = g_list_next (l))
2317
GladeInternalChild *data = l->data;
2319
if (strcmp (data->name, name) == 0)
2324
GladeInternalChild *child;
2325
if ((child = gwa_internal_child_find (data->children, name)))
2334
gwa_internal_children_update_from_node (GList *internal_children, GladeXmlNode *node)
2371
gwa_internal_children_update_from_node (GList *internal_children,
2336
2374
GList *retval = internal_children;
2337
2375
GladeXmlNode *child, *children;
2619
2657
GladeWidgetAdaptor *
2620
2658
glade_widget_adaptor_from_catalog (GladeCatalog *catalog,
2621
2659
GladeXmlNode *class_node,
2624
2662
GladeWidgetAdaptor *adaptor = NULL;
2625
2663
gchar *name, *generic_name, *icon_name, *adaptor_icon_name, *adaptor_name,
2884
2922
* @internal_object of name @internal_name
2887
glade_widget_adaptor_create_internal (GladeWidget *parent,
2888
GObject *internal_object,
2889
const gchar *internal_name,
2890
const gchar *parent_name,
2925
glade_widget_adaptor_create_internal (GladeWidget *parent,
2926
GObject *internal_object,
2927
const gchar *internal_name,
2928
const gchar *parent_name,
2892
2930
GladeCreateReason reason)
2894
2932
GladeWidgetAdaptor *adaptor;
2937
2975
* this macro returns the newly created #GladeWidget
2940
glade_widget_adaptor_create_widget_real (gboolean query,
2941
const gchar *first_property, ...)
2978
glade_widget_adaptor_create_widget_real (gboolean query,
2979
const gchar *first_property,
2943
2982
GladeWidgetAdaptor *adaptor;
2944
2983
GladeWidget *gwidget;
2992
search_adaptor_by_name (GType *type,
2993
GladeWidgetAdaptor *adaptor,
3031
search_adaptor_by_name (GType *type,
3032
GladeWidgetAdaptor *adaptor,
2994
3033
GladeAdaptorSearchPair *pair)
2996
3035
if (!strcmp (adaptor->priv->name, pair->name))
3247
3286
gwa_internal_children_create (GladeWidgetAdaptor *adaptor,
3248
GObject *parent_object,
3251
GladeCreateReason reason)
3287
GObject *parent_object,
3290
GladeCreateReason reason)
3253
3292
gchar *parent_name = adaptor->priv->generic_name;
3254
3293
GladeWidget *gobject = glade_widget_get_from_gobject (object);
3290
3329
glade_widget_adaptor_post_create (GladeWidgetAdaptor *adaptor,
3292
GladeCreateReason reason)
3331
GladeCreateReason reason)
3294
3333
g_return_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor));
3295
3334
g_return_if_fail (G_IS_OBJECT (object));
3327
3366
glade_widget_adaptor_get_internal_child (GladeWidgetAdaptor *adaptor,
3329
const gchar *internal_name)
3368
const gchar *internal_name)
3331
3370
g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL);
3332
3371
g_return_val_if_fail (G_IS_OBJECT (object), NULL);
3358
3397
glade_widget_adaptor_set_property (GladeWidgetAdaptor *adaptor,
3360
const gchar *property_name,
3361
const GValue *value)
3399
const gchar *property_name,
3400
const GValue *value)
3363
3402
g_return_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor));
3364
3403
g_return_if_fail (G_IS_OBJECT (object));
3385
3424
glade_widget_adaptor_get_property (GladeWidgetAdaptor *adaptor,
3387
const gchar *property_name,
3426
const gchar *property_name,
3390
3429
g_return_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor));
3391
3430
g_return_if_fail (G_IS_OBJECT (object));
3418
3457
glade_widget_adaptor_verify_property (GladeWidgetAdaptor *adaptor,
3420
const gchar *property_name,
3421
const GValue *value)
3459
const gchar *property_name,
3460
const GValue *value)
3423
3462
g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), FALSE);
3424
3463
g_return_val_if_fail (G_IS_OBJECT (object), FALSE);
3526
3565
glade_widget_adaptor_get_children (GladeWidgetAdaptor *adaptor,
3529
3568
g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL);
3530
3569
g_return_val_if_fail (G_IS_OBJECT (container), NULL);
3579
3618
glade_widget_adaptor_child_set_property (GladeWidgetAdaptor *adaptor,
3582
const gchar *property_name,
3583
const GValue *value)
3621
const gchar *property_name,
3622
const GValue *value)
3585
3624
g_return_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor));
3586
3625
g_return_if_fail (G_IS_OBJECT (container));
3614
3653
glade_widget_adaptor_child_get_property (GladeWidgetAdaptor *adaptor,
3617
const gchar *property_name,
3656
const gchar *property_name,
3620
3659
g_return_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor));
3621
3660
g_return_if_fail (G_IS_OBJECT (container));
3652
3691
glade_widget_adaptor_child_verify_property (GladeWidgetAdaptor *adaptor,
3655
const gchar *property_name,
3656
const GValue *value)
3694
const gchar *property_name,
3695
const GValue *value)
3658
3697
g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), FALSE);
3659
3698
g_return_val_if_fail (G_IS_OBJECT (container), FALSE);
3887
3926
glade_widget_adaptor_action_add (GladeWidgetAdaptor *adaptor,
3888
const gchar *action_path,
3927
const gchar *action_path,
3893
3932
g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), FALSE);
3894
3933
g_return_val_if_fail (action_path != NULL, FALSE);
3915
3954
glade_widget_adaptor_pack_action_add (GladeWidgetAdaptor *adaptor,
3916
const gchar *action_path,
3955
const gchar *action_path,
3921
3960
g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), FALSE);
3922
3961
g_return_val_if_fail (action_path != NULL, FALSE);
3961
4000
glade_widget_adaptor_action_remove (GladeWidgetAdaptor *adaptor,
3962
const gchar *action_path)
4001
const gchar *action_path)
3964
4003
g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), FALSE);
3965
4004
g_return_val_if_fail (action_path != NULL, FALSE);
3981
4020
glade_widget_adaptor_pack_action_remove (GladeWidgetAdaptor *adaptor,
3982
const gchar *action_path)
4021
const gchar *action_path)
3984
4023
g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), FALSE);
3985
4024
g_return_val_if_fail (action_path != NULL, FALSE);
4052
4091
glade_widget_adaptor_action_activate (GladeWidgetAdaptor *adaptor,
4054
const gchar *action_path)
4093
const gchar *action_path)
4056
4095
g_return_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor));
4057
4096
g_return_if_fail (G_IS_OBJECT (object));
4073
4112
glade_widget_adaptor_child_action_activate (GladeWidgetAdaptor *adaptor,
4076
const gchar *action_path)
4115
const gchar *action_path)
4078
4117
g_return_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor));
4079
4118
g_return_if_fail (G_IS_OBJECT (container));
4101
4140
glade_widget_adaptor_action_submenu (GladeWidgetAdaptor *adaptor,
4103
const gchar *action_path)
4142
const gchar *action_path)
4105
4144
g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL);
4106
4145
g_return_val_if_fail (G_IS_OBJECT (object), NULL);
4173
4212
glade_widget_adaptor_write_widget (GladeWidgetAdaptor *adaptor,
4174
GladeWidget *widget,
4175
GladeXmlContext *context,
4213
GladeWidget *widget,
4214
GladeXmlContext *context,
4178
4217
g_return_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor));
4179
4218
g_return_if_fail (GLADE_IS_WIDGET (widget));
4198
4237
glade_widget_adaptor_write_widget_after (GladeWidgetAdaptor *adaptor,
4199
GladeWidget *widget,
4200
GladeXmlContext *context,
4238
GladeWidget *widget,
4239
GladeXmlContext *context,
4203
4242
g_return_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor));
4204
4243
g_return_if_fail (GLADE_IS_WIDGET (widget));
4247
4286
glade_widget_adaptor_write_child (GladeWidgetAdaptor *adaptor,
4248
GladeWidget *widget,
4249
GladeXmlContext *context,
4287
GladeWidget *widget,
4288
GladeXmlContext *context,
4252
4291
g_return_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor));
4253
4292
g_return_if_fail (GLADE_IS_WIDGET (widget));
4272
4311
GladeEditorProperty *
4273
4312
glade_widget_adaptor_create_eprop (GladeWidgetAdaptor *adaptor,
4274
4313
GladePropertyClass *klass,
4275
gboolean use_command)
4314
gboolean use_command)
4277
4316
GladeEditorProperty *eprop;
4278
4317
g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL);
4305
4344
GladeEditorProperty *
4306
4345
glade_widget_adaptor_create_eprop_by_name (GladeWidgetAdaptor *adaptor,
4307
const gchar *property_id,
4309
gboolean use_command)
4346
const gchar *property_id,
4348
gboolean use_command)
4311
4350
GladePropertyClass *klass;
4312
4351
g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL);
4340
4379
glade_widget_adaptor_string_from_value (GladeWidgetAdaptor *adaptor,
4341
4380
GladePropertyClass *klass,
4342
const GValue *value)
4381
const GValue *value)
4344
4383
g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL);
4345
4384
g_return_val_if_fail (GLADE_IS_PROPERTY_CLASS (klass), NULL);