summaryrefslogtreecommitdiff
path: root/gladeui/glade-project.c
diff options
context:
space:
mode:
Diffstat (limited to 'gladeui/glade-project.c')
-rw-r--r--gladeui/glade-project.c74
1 files changed, 73 insertions, 1 deletions
diff --git a/gladeui/glade-project.c b/gladeui/glade-project.c
index c92e54ab..1fd6cb7d 100644
--- a/gladeui/glade-project.c
+++ b/gladeui/glade-project.c
@@ -158,6 +158,7 @@ struct _GladeProjectPrivate
*/
guint writing_preview : 1; /* During serialization, if we are serializing for a preview */
guint pointer_mode : 3; /* The currently effective GladePointerMode */
+ guint use_generic_name : 1; /* Whether to use generic names for new widgets or not */
};
typedef struct
@@ -197,6 +198,7 @@ enum
PROP_RESOURCE_PATH,
PROP_LICENSE,
PROP_CSS_PROVIDER_PATH,
+ PROP_USE_GENERIC_NAME,
N_PROPERTIES
};
@@ -405,6 +407,9 @@ glade_project_get_property (GObject *object,
case PROP_CSS_PROVIDER_PATH:
g_value_set_string (value, project->priv->css_provider_path);
break;
+ case PROP_USE_GENERIC_NAME:
+ g_value_set_boolean (value, project->priv->use_generic_name);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -439,6 +444,10 @@ glade_project_set_property (GObject *object,
glade_project_set_css_provider_path (GLADE_PROJECT (object),
g_value_get_string (value));
break;
+ case PROP_USE_GENERIC_NAME:
+ glade_project_set_use_generic_name (GLADE_PROJECT (object),
+ g_value_get_boolean (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1030,6 +1039,13 @@ glade_project_class_init (GladeProjectClass *klass)
NULL,
G_PARAM_READWRITE);
+ glade_project_props[PROP_USE_GENERIC_NAME] =
+ g_param_spec_boolean ("use-generic-name",
+ _("Use generic name"),
+ _("Whether to use generic names for objects in the project or leave them unnamed"),
+ FALSE,
+ G_PARAM_READWRITE);
+
/* Install all properties */
g_object_class_install_properties (object_class, N_PROPERTIES, glade_project_props);
}
@@ -1619,7 +1635,11 @@ glade_project_read_comment_properties (GladeProject *project,
if (gp_comment_strip_property (val, "interface-local-resource-path"))
glade_project_set_resource_path (project, val);
- else if (gp_comment_strip_property (val, "interface-css-provider-path"))
+ else if (gp_comment_strip_property (val, "interface-use-generic-name"))
+ {
+ glade_project_set_use_generic_name (project, !g_strcmp0 (val, "True"));
+ }
+ else if (gp_comment_strip_property (val, "interface-css-provider-path"))
{
if (g_path_is_absolute (val))
glade_project_set_css_provider_path (project, val);
@@ -2319,6 +2339,17 @@ glade_project_write_css_provider_path (GladeProject *project,
}
static void
+glade_project_write_use_generic_name (GladeProject *project,
+ GladeXmlContext *context,
+ GladeXmlNode *root)
+{
+ if (project->priv->use_generic_name)
+ glade_project_write_comment_property (project, context, root,
+ "interface-use-generic-name",
+ "True");
+}
+
+static void
glade_project_write_license_data (GladeProject *project,
GladeXmlContext *context,
GladeXmlNode *root)
@@ -2624,6 +2655,8 @@ glade_project_write (GladeProject *project)
glade_project_write_css_provider_path (project, context, root);
+ glade_project_write_use_generic_name (project, context, root);
+
glade_project_write_license_data (project, context, root);
/* Get sorted toplevels */
@@ -3493,6 +3526,41 @@ glade_project_verify_project_for_ui (GladeProject *project)
}
/**
+ * glade_project_get_use_generic_name:
+ * @project: a #GladeProject
+ *
+ */
+gboolean
+glade_project_get_use_generic_name (GladeProject *project)
+{
+ g_return_val_if_fail (GLADE_IS_PROJECT (project), FALSE);
+ return project->priv->use_generic_name;
+}
+
+/**
+ * glade_project_set_use_generic_name:
+ * @project: a #GladeProject
+ * @use_generic:
+ *
+ */
+void
+glade_project_set_use_generic_name (GladeProject *project, gboolean use_generic)
+{
+ g_return_if_fail (GLADE_IS_PROJECT (project));
+
+ if (project->priv->use_generic_name != use_generic)
+ {
+ gint major, minor;
+ glade_project_get_target_version (project, "gtk+", &major, &minor);
+
+ /* Id less object support was introducedin gtk 3.12 */
+ project->priv->use_generic_name = (major == 3 && minor < 12) ? TRUE : use_generic;
+ g_object_notify_by_pspec (G_OBJECT (project), glade_project_props[PROP_USE_GENERIC_NAME]);
+ }
+}
+
+
+/**
* glade_project_get_widget_by_name:
* @project: a #GladeProject
* @name: The user visible name of the widget we are looking for
@@ -4132,6 +4200,10 @@ glade_project_set_target_version (GladeProject *project,
g_hash_table_insert (project->priv->target_versions_minor,
g_strdup (catalog), GINT_TO_POINTER ((int) minor));
+ /* Gtk < 3.12 does not support IDless objects */
+ if (!g_strcmp0 (catalog, "gtk+") && major == 3 && minor < 12)
+ glade_project_set_use_generic_name (project, TRUE);
+
glade_project_verify_project_for_ui (project);
g_signal_emit (project, glade_project_signals[TARGETS_CHANGED], 0);