Commit ed3bb937 authored by Tristan Van Berkom's avatar Tristan Van Berkom

Fixed property commands to not unify across separate groups, and also to



	* gladeui/glade-command.c: Fixed property commands to not unify across separate groups,
	and also to unify when they are not lists.

	* plugins/gtk+/glade-gtk.c, plugins/gtk+/gtk+.xml.in, plugins/gtk+/glade-model-data.c:
	  - Data properties now have DnD working
	  - Adding TreeViewColumn support
	  - Fixing liststore support to work for treestore


svn path=/trunk/; revision=1977
parent 47479fa1
2008-10-17 Tristan Van Berkom <tvb@gnome.org>
* gladeui/glade-command.c: Fixed property commands to not unify across separate groups,
and also to unify when they are not lists.
* plugins/gtk+/glade-gtk.c, plugins/gtk+/gtk+.xml.in, plugins/gtk+/glade-model-data.c:
- Data properties now have DnD working
- Adding TreeViewColumn support
- Fixing liststore support to work for treestore
2008-10-16 Juan Pablo Ugarte <juanpablougarte@gmail.com>
* plugins/gtk+/glade-attributes.c: applied proposed patch for bug #547431
......
......@@ -230,6 +230,13 @@ glade_command_unifies (GladeCommand *command,
GladeCommand *other)
{
g_return_val_if_fail (command, FALSE);
/* Cannot unify with a part of a command group.
* Unify atomic commands only
*/
if (command->group_id != 0 || (other && other->group_id != 0))
return FALSE;
return GLADE_COMMAND_GET_CLASS (command)->unifies (command, other);
}
......@@ -620,6 +627,7 @@ glade_command_set_properties_list (GladeProject *project, GList *props)
GCSetPropData *sdata;
GList *list;
gboolean success;
gboolean multiple;
g_return_if_fail (GLADE_IS_PROJECT (project));
g_return_if_fail (props);
......@@ -635,16 +643,20 @@ glade_command_set_properties_list (GladeProject *project, GList *props)
}
me->sdata = props;
cmd->description = NULL;
cmd->description =
glade_command_set_property_description
(me, glade_project_get_format (project));
multiple = g_list_length (me->sdata) > 1;
if (multiple)
glade_command_push_group (cmd->description);
glade_command_push_group (glade_command_set_property_description
(me, glade_project_get_format (project)));
glade_command_check_group (GLADE_COMMAND (me));
/* Push onto undo stack only if it executes successfully. */
success = glade_command_set_property_execute (GLADE_COMMAND (me));
glade_command_pop_group ();
if (success)
glade_project_push_undo (GLADE_PROJECT (project),
......@@ -652,6 +664,9 @@ glade_command_set_properties_list (GladeProject *project, GList *props)
else
/* No leaks on my shift! */
g_object_unref (G_OBJECT (me));
if (multiple)
glade_command_pop_group ();
}
......
......@@ -524,16 +524,8 @@ glade_project_push_undo_impl (GladeProject *project, GladeCommand *cmd)
priv->prev_redo_item != NULL)
{
GladeCommand *cmd1 = priv->prev_redo_item->data;
gboolean is_atomic = FALSE;
/* Cannot unify with a part of a command group.
* Unify atomic commands only
*/
if (cmd1->group_id == 0 || cmd->group_id == 0 ||
cmd->group_id != cmd1->group_id)
is_atomic = TRUE;
if (is_atomic && glade_command_unifies (cmd1, cmd))
if (glade_command_unifies (cmd1, cmd))
{
glade_command_collapse (cmd1, cmd);
g_object_unref (cmd);
......
......@@ -1656,8 +1656,11 @@ glade_property_class_compare (GladePropertyClass *klass,
{
gchar *val1, *val2;
/* This has got to change... */
/* So boxed types are compared by string and the backend is required to generate
* unique strings for values for this purpose.
*
* NOTE: We could add a pclass option to use the string compare vs. boxed compare...
*/
val1 = glade_widget_adaptor_string_from_value (klass->handle, klass, value1, fmt);
val2 = glade_widget_adaptor_string_from_value (klass->handle, klass, value2, fmt);
......@@ -1668,9 +1671,6 @@ glade_property_class_compare (GladePropertyClass *klass,
g_free (val1);
g_free (val2);
/* boxed always changed... XXX */
return -1;
}
else
{
......
......@@ -1961,7 +1961,7 @@ glade_utils_enum_string_from_value (GType enum_type, gint value)
g_value_init (&gvalue, enum_type);
g_value_set_enum (&gvalue, value);
string = glade_utils_string_from_value (&gvalue, NULL);
string = glade_utils_string_from_value (&gvalue, GLADE_PROJECT_FORMAT_GTKBUILDER);
g_value_unset (&gvalue);
return string;
......@@ -2103,8 +2103,8 @@ glade_utils_value_from_string (GType type,
/**
* glade_utils_string_from_value:
* @value: the value to convert
* @project: the #GladeProject to look for formats of object names when needed
* @value: a #GValue to convert
* @fmt: the #GladeProjectFormat to honor
*
* Serializes #GValue into a string
* (using glade conversion routines)
......@@ -2113,15 +2113,12 @@ glade_utils_value_from_string (GType type,
*/
gchar *
glade_utils_string_from_value (const GValue *value,
GladeProject *project)
GladeProjectFormat fmt)
{
GladeProjectFormat fmt;
GladePropertyClass *pclass;
g_return_val_if_fail (value != NULL, NULL);
fmt = project ? glade_project_get_format (project) : GLADE_PROJECT_FORMAT_GTKBUILDER;
if ((pclass = pclass_from_gtype (G_VALUE_TYPE (value))) != NULL)
return glade_property_class_make_string_from_gvalue (pclass, value, fmt);
......
......@@ -143,7 +143,7 @@ GValue *glade_utils_value_from_string (GType type,
GladeWidget *widget);
gchar *glade_utils_string_from_value (const GValue *value,
GladeProject *project);
GladeProjectFormat fmt);
GtkListStore *glade_utils_liststore_from_enum_type (GType enum_type, gboolean include_empty);
......
......@@ -580,9 +580,7 @@ column_name_edited (GtkCellRendererText *cell,
if (data_tree)
{
data_tree = glade_model_data_tree_copy (data_tree);
glade_model_data_column_rename (data_tree, old_column_name, column_name);
glade_command_set_property (property, data_tree);
glade_model_data_tree_free (data_tree);
}
......
......@@ -6098,7 +6098,7 @@ glade_gtk_menu_item_constructor (GType type,
GList *
glade_gtk_menu_item_get_children (GladeWidgetAdaptor *adaptor,
GObject *object)
GObject *object)
{
GList *list = NULL;
GtkWidget *child;
......@@ -7253,9 +7253,6 @@ glade_gtk_label_set_attributes (GObject *object, const GValue *value)
attribute = NULL;
g_print ("Setting an attribute...\n");
switch (gattr->type)
{
/* PangoAttrLanguage */
......@@ -7268,7 +7265,6 @@ glade_gtk_label_set_attributes (GObject *object, const GValue *value)
attribute = pango_attr_style_new (g_value_get_enum (&(gattr->value)));
break;
case PANGO_ATTR_WEIGHT:
g_print ("XX Setting weight\n");
attribute = pango_attr_weight_new (g_value_get_enum (&(gattr->value)));
break;
case PANGO_ATTR_VARIANT:
......@@ -7420,10 +7416,6 @@ glade_gtk_label_read_attributes (GladeWidget *widget,
if ((attrs_node =
glade_xml_search_child (node, GLADE_TAG_ATTRIBUTES)) != NULL)
{
g_print ("got attributes node...\n");
/* Generic attributes parsing */
glade_gtk_parse_attributes (widget, attrs_node);
}
......@@ -7808,7 +7800,7 @@ glade_gtk_combo_get_internal_child (GladeWidgetAdaptor *adaptor,
}
GList *
glade_gtk_combo_get_children (GtkCombo *combo)
glade_gtk_combo_get_children (GladeWidgetAdaptor *adaptor, GtkCombo *combo)
{
GList *list = NULL;
......@@ -8590,7 +8582,7 @@ glade_gtk_size_group_set_property (GladeWidgetAdaptor *adaptor,
property_name, value);
}
/*--------------------------- GtkListStore ---------------------------------*/
/*--------------------------- GtkListStore/GtkTreeStore ---------------------------------*/
#define GLADE_TAG_COLUMNS "columns"
#define GLADE_TAG_COLUMN "column"
......@@ -8733,33 +8725,51 @@ glade_gtk_store_string_from_value (GladeWidgetAdaptor *adaptor,
const GValue *value,
GladeProjectFormat fmt)
{
GString *string;
if (GLADE_IS_PARAM_SPEC_COLUMN_TYPES (klass->pspec))
{
GString *val = g_string_new ("");
gchar *retval;
GList *l;
string = g_string_new ("");
for (l = g_value_get_boxed (value); l; l = g_list_next (l))
{
GladeColumnType *data = l->data;
g_string_append_printf (val, (g_list_next (l)) ? "%s|" : "%s",
g_type_name (data->type));
g_string_append_printf (string, (g_list_next (l)) ? "%s:%s|" : "%s:%s",
g_type_name (data->type), data->column_name);
}
retval = val->str;
g_string_free (val, FALSE);
return retval;
return g_string_free (string, FALSE);
}
else if (GLADE_IS_PARAM_SPEC_MODEL_DATA (klass->pspec))
{
GNode *node;
GladeModelData *data;
GNode *data_tree, *row, *iter;
gint rownum;
gchar *str;
gboolean is_last;
node = g_value_get_boxed (value);
if (node && node->children && node->children->children)
return g_strdup_printf (_("Data available"));
else
return g_strdup_printf (_("No data"));
/* Return a unique string for the backend to compare */
data_tree = g_value_get_boxed (value);
if (!data_tree || !data_tree->children)
return g_strdup ("");
string = g_string_new ("");
for (rownum = 0, row = data_tree->children; row;
rownum++, row = row->next)
{
for (iter = row->children; iter; iter = iter->next)
{
data = iter->data;
str = glade_utils_string_from_value (&data->value, fmt);
is_last = !row->next && !iter->next;
g_string_append_printf (string, !is_last ? "%s[%d]:%s|" : "%s[%d]:%s",
data->name, rownum, str);
g_free (str);
}
}
return g_string_free (string, FALSE);
}
else
return GWA_GET_CLASS
......@@ -8841,7 +8851,7 @@ glade_gtk_store_write_data (GladeWidget *widget,
data = iter->data;
string = glade_utils_string_from_value (&data->value,
widget->project);
glade_project_get_format (widget->project));
/* XXX Log error: data col j exceeds columns on row i */
if (!g_list_nth (columns, colnum))
......@@ -9053,3 +9063,44 @@ glade_gtk_store_read_widget (GladeWidgetAdaptor *adaptor,
glade_gtk_store_read_columns (widget, node);
glade_gtk_store_read_data (widget, node);
}
/*--------------------------- GtkTreeView ---------------------------------*/
GList *
glade_gtk_treeview_get_children (GladeWidgetAdaptor *adaptor,
GtkTreeView *view)
{
return gtk_tree_view_get_columns (view);
}
void
glade_gtk_treeview_add_child (GladeWidgetAdaptor *adaptor,
GObject *container,
GObject *child)
{
GtkTreeView *view = GTK_TREE_VIEW (container);
GtkTreeViewColumn *column;
if (!GTK_IS_TREE_VIEW_COLUMN (child))
return;
column = GTK_TREE_VIEW_COLUMN (child);
gtk_tree_view_append_column (view, column);
}
void
glade_gtk_treeview_remove_child (GladeWidgetAdaptor *adaptor,
GObject *container,
GObject *child)
{
GtkTreeView *view = GTK_TREE_VIEW (container);
GtkTreeViewColumn *column;
if (!GTK_IS_TREE_VIEW_COLUMN (child))
return;
column = GTK_TREE_VIEW_COLUMN (child);
gtk_tree_view_remove_column (view, column);
}
......@@ -213,8 +213,6 @@ glade_model_data_column_rename (GNode *node,
for (row = node->children; row; row = row->next)
{
g_print ("Setting new name %s for old name %s at index %d\n",
new_name, column_name, idx);
iter = g_node_nth_child (row, idx);
data = iter->data;
g_free (data->name);
......@@ -362,6 +360,22 @@ clear_view (GladeEditorProperty *eprop)
}
static gboolean
update_data_tree_idle (GladeEditorProperty *eprop)
{
GladeEPropModelData *eprop_data = GLADE_EPROP_MODEL_DATA (eprop);
GValue value = { 0, };
g_value_init (&value, GLADE_TYPE_MODEL_DATA_TREE);
g_value_take_boxed (&value, eprop_data->pending_data_tree);
glade_editor_property_commit (eprop, &value);
g_value_unset (&value);
eprop_data->pending_data_tree = NULL;
return FALSE;
}
/* User pressed add: append row and commit values */
static void
glade_eprop_model_data_add_clicked (GtkWidget *button,
......@@ -396,42 +410,89 @@ glade_eprop_model_data_add_clicked (GtkWidget *button,
/* User pressed delete: remove selected row and commit values */
static void
glade_eprop_model_data_delete_clicked (GtkWidget *button,
GladeEditorProperty *eprop)
GladeEditorProperty *eprop)
{
GtkTreeIter iter;
GladeEPropModelData *eprop_data = GLADE_EPROP_MODEL_DATA (eprop);
GNode *data_tree = NULL, *row;
gint rownum = -1;
/* NOTE: This will trigger row-deleted below... */
if (gtk_tree_selection_get_selected (eprop_data->selection, NULL, &iter))
gtk_list_store_remove (GTK_LIST_STORE (eprop_data->store), &iter);
if (!gtk_tree_selection_get_selected (eprop_data->selection, NULL, &iter))
return;
gtk_tree_model_get (GTK_TREE_MODEL (eprop_data->store), &iter,
COLUMN_ROW, &rownum,
-1);
g_assert (rownum >= 0);
/* if theres a sected row, theres data... */
glade_property_get (eprop->property, &data_tree);
g_assert (data_tree);
data_tree = glade_model_data_tree_copy (data_tree);
row = g_node_nth_child (data_tree, rownum);
g_node_unlink (row);
glade_model_data_tree_free (row);
if (eprop_data->pending_data_tree)
glade_model_data_tree_free (eprop_data->pending_data_tree);
eprop_data->pending_data_tree = data_tree;
g_idle_add ((GSourceFunc)update_data_tree_idle, eprop);
}
static void
eprop_treeview_row_deleted (GtkTreeModel *tree_model,
GtkTreePath *path,
GladeEditorProperty *eprop)
static gboolean
data_changed_idle (GladeEditorProperty *eprop)
{
/* User deleted a row: commit values from treeview to property */
#if 0
GtkTreeIter iter;
GladeEPropModelData *eprop_data = GLADE_EPROP_MODEL_DATA (eprop);
GNode *data_tree = NULL, *row;
GladeEPropModelData *eprop_data = GLADE_EPROP_MODEL_DATA (eprop);
GNode *data_tree = NULL, *new_tree, *row;
GtkTreeIter iter;
gint rownum;
glade_property_get (eprop->property, &data_tree);
g_assert (data_tree);
new_tree = g_node_new (NULL);
if (gtk_tree_selection_get_selected (eprop_types->selection, NULL, &iter))
if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (eprop_data->store), &iter))
{
do
{
gtk_tree_model_get (GTK_TREE_MODEL (eprop_data->store), &iter,
COLUMN_ROW, &rownum, -1);
if ((row = g_node_nth_child (data_tree, rownum)) != NULL)
{
/* Make a new tree by copying row by row... */
row = glade_model_data_tree_copy (row);
g_node_append (new_tree, row);
}
}
while (gtk_tree_model_iter_next (GTK_TREE_MODEL (eprop_data->store), &iter));
}
for (row = data_tree->children; row; row = row->next
/* Were already in an idle, no need to idle from here... */
if (eprop_data->pending_data_tree)
glade_model_data_tree_free (eprop_data->pending_data_tree);
eprop_data->pending_data_tree = new_tree;
update_data_tree_idle (eprop);
return FALSE;
}
g_value_init (&value, GLADE_TYPE_MODEL_DATA_TREE);
g_value_take_boxed (&value, node);
glade_editor_property_commit (eprop, &value);
g_value_unset (&value);
static void
eprop_treeview_row_deleted (GtkTreeModel *tree_model,
GtkTreePath *path,
GladeEditorProperty *eprop)
{
if (eprop->loading) return;
#endif
g_idle_add ((GSourceFunc)data_changed_idle, eprop);
}
......@@ -440,7 +501,6 @@ glade_eprop_model_data_finalize (GObject *object)
{
/* Chain up */
GObjectClass *parent_class = g_type_class_peek_parent (G_OBJECT_GET_CLASS (object));
GladeEPropModelData *eprop_data = GLADE_EPROP_MODEL_DATA (object);
if (eprop_data->store)
......@@ -493,21 +553,6 @@ eprop_model_data_generate_store (GladeEditorProperty *eprop)
}
return store;
}
static gboolean
update_data_tree_idle (GladeEditorProperty *eprop)
{
GladeEPropModelData *eprop_data = GLADE_EPROP_MODEL_DATA (eprop);
GValue value = { 0, };
g_value_init (&value, GLADE_TYPE_MODEL_DATA_TREE);
g_value_take_boxed (&value, eprop_data->pending_data_tree);
glade_editor_property_commit (eprop, &value);
g_value_unset (&value);
eprop_data->pending_data_tree = NULL;
return FALSE;
}
static void
value_toggled (GtkCellRendererToggle *cell,
......@@ -780,7 +825,7 @@ glade_eprop_model_data_load (GladeEditorProperty *eprop,
gtk_tree_view_set_model (eprop_data->view, GTK_TREE_MODEL (eprop_data->store));
g_object_unref (G_OBJECT (eprop_data->store));
g_signal_connect (eprop_data->store, "row-deleted",
g_signal_connect (G_OBJECT (eprop_data->store), "row-deleted",
G_CALLBACK (eprop_treeview_row_deleted),
eprop);
}
......
......@@ -927,6 +927,11 @@ embedded in another object</_tooltip>
</glade-widget-class>
<glade-widget-class name="GtkTreeView" generic-name="treeview" _title="Tree View">
<post-create-function>empty</post-create-function>
<get-children-function>glade_gtk_treeview_get_children</get-children-function>
<add-child-function>glade_gtk_treeview_add_child</add-child-function>
<remove-child-function>glade_gtk_treeview_remove_child</remove-child-function>
<properties>
<property id="level-indentation" since="2.12"/>
<property id="show-expanders" since="2.12"/>
......@@ -944,9 +949,6 @@ embedded in another object</_tooltip>
</properties>
</glade-widget-class>
<glade-widget-class name="GtkTreeViewColumn" generic-name="treeviewcolumn" _title="Tree View Column">
</glade-widget-class>
<glade-widget-class name="GtkIconView" generic-name="iconview" _title="Icon View">
<properties>
<property id="selection-mode">
......@@ -1046,7 +1048,7 @@ embedded in another object</_tooltip>
<post-create-function>glade_gtk_table_post_create</post-create-function>
<child-set-property-function>glade_gtk_table_set_child_property</child-set-property-function>
<child-verify-function>glade_gtk_table_child_verify_property</child-verify-function>
<get-children-function>glade_gtk_table_get_children</get-children-function>
<get-children-function>glade_gtk_table_get_children</get-children-function>
<add-child-function>glade_gtk_table_add_child</add-child-function>
<remove-child-function>glade_gtk_table_remove_child</remove-child-function>
<replace-child-function>glade_gtk_table_replace_child</replace-child-function>
......@@ -1799,7 +1801,7 @@ embedded in another object</_tooltip>
<properties>
<property id="columns" since="2.12" _name="Columns" save="False" construct-only="True">
<spec>glade_standard_column_types_spec</spec>
<_tooltip>Set column types for this model</_tooltip>
<_tooltip>Enter a list of column types for this data store</_tooltip>
</property>
<property id="data" since="2.12" _name="Data" save="False">
<spec>glade_standard_model_data_spec</spec>
......@@ -1812,16 +1814,16 @@ embedded in another object</_tooltip>
libglade-unsupported="True" toplevel="True">
<set-property-function>glade_gtk_store_set_property</set-property-function>
<create-editor-property-function>glade_gtk_store_create_eprop</create-editor-property-function>
<string-from-value-function>glade_gtk_store_from_value</string-from-value-function>
<string-from-value-function>glade_gtk_store_string_from_value</string-from-value-function>
<write-widget-function>glade_gtk_store_write_widget</write-widget-function>
<read-widget-function>glade_gtk_store_read_widget</read-widget-function>
<properties>
<property id="columns" since="2.12" _name="Columns" save="False">
<spec>glade_standard_model_data_spec</spec>
<_tooltip>Set column types for this model</_tooltip>
<property id="columns" since="2.12" _name="Columns" save="False" construct-only="True">
<spec>glade_standard_column_types_spec</spec>
<_tooltip>Enter a list of column types for this data store</_tooltip>
</property>
<property id="data" since="2.12" _name="Data" save="False">
<spec>glade_standard_strv_spec</spec>
<spec>glade_standard_model_data_spec</spec>
<_tooltip>Enter a list of values to be applied on each row</_tooltip>
</property>
</properties>
......@@ -1834,6 +1836,26 @@ embedded in another object</_tooltip>
<glade-widget-class name="GtkTreeSelection" generic-name="treeselection" _title="Tree Selection"
libglade-unsupported="True" toplevel="True"/>
<glade-widget-class name="GtkTreeViewColumn" generic-name="treeviewcolumn" _title="Tree View Column"
libglade-unsupported="True"/>
<glade-widget-class name="GtkCellRendererText" generic-name="cellrenderertext" _title="Text Renderer"
libglade-unsupported="True"/>
<glade-widget-class name="GtkCellRendererAccel" generic-name="cellrendereraccel" _title="Accelerator Renderer"
libglade-unsupported="True"/>
<glade-widget-class name="GtkCellRendererCombo" generic-name="cellrenderercombo" _title="Combo Renderer"
libglade-unsupported="True"/>
<glade-widget-class name="GtkCellRendererSpin" generic-name="cellrendererspin" _title="Spin Renderer"
libglade-unsupported="True"/>
<glade-widget-class name="GtkCellRendererPixbuf" generic-name="cellrendererpixbuf" _title="Pixbuf Renderer"
libglade-unsupported="True"/>
<glade-widget-class name="GtkCellRendererProgress" generic-name="cellrendererprogress" _title="Progress Renderer"
libglade-unsupported="True"/>
<glade-widget-class name="GtkCellRendererToggle" generic-name="cellrenderertoggle" _title="Toggle Renderer"
libglade-unsupported="True"/>
<glade-widget-class name="GtkStatusIcon" generic-name="statusicon" _title="Status Icon"
libglade-unsupported="True" toplevel="True"/>
......@@ -1909,7 +1931,6 @@ embedded in another object</_tooltip>
<glade-widget-class-ref name="GtkLabel"/>
<glade-widget-class-ref name="GtkAccelLabel"/>
<glade-widget-class-ref name="GtkEntry"/>
<glade-widget-class-ref name="GtkTextView"/>
<glade-widget-class-ref name="GtkHScale"/>
<glade-widget-class-ref name="GtkVScale"/>
......@@ -1920,9 +1941,6 @@ embedded in another object</_tooltip>
<glade-widget-class-ref name="GtkComboBoxEntry"/>
<glade-widget-class-ref name="GtkProgressBar"/>
<glade-widget-class-ref name="GtkTreeView"/>
<glade-widget-class-ref name="GtkIconView"/>
<glade-widget-class-ref name="GtkHandleBox"/>
<glade-widget-class-ref name="GtkStatusbar"/>
......@@ -1953,7 +1971,7 @@ embedded in another object</_tooltip>
<glade-widget-class-ref name="GtkRecentAction"/>
</glade-widget-group>
<glade-widget-group name="gtk-mvc" title="Tree Model">
<glade-widget-group name="gtk-model" title="Tree Model">
<default-palette-state expanded="False"/>
......@@ -1964,10 +1982,28 @@ embedded in another object</_tooltip>
<glade-widget-class-ref name="GtkTreeSelection"/>
</glade-widget-group>
<glade-widget-group name="gtk-view" title="Tree View">
<default-palette-state expanded="False"/>
<glade-widget-class-ref name="GtkTreeView"/>
<glade-widget-class-ref name="GtkIconView"/>
<glade-widget-class-ref name="GtkTreeViewColumn"/>
<glade-widget-class-ref name="GtkCellRendererText"/>
<glade-widget-class-ref name="GtkCellRendererAccel"/>
<glade-widget-class-ref name="GtkCellRendererCombo"/>
<glade-widget-class-ref name="GtkCellRendererSpin"/>
<glade-widget-class-ref name="GtkCellRendererPixbuf"/>
<glade-widget-class-ref name="GtkCellRendererProgress"/>
<glade-widget-class-ref name="GtkCellRendererToggle"/>
</glade-widget-group>
<glade-widget-group name="gtk-text" _title="Text Manipulation">
<default-palette-state expanded="False"/>
<glade-widget-class-ref name="GtkTextView"/>
<glade-widget-class-ref name="GtkTextBuffer"/>
<glade-widget-class-ref name="GtkTextTag"/>
<glade-widget-class-ref name="GtkTextTagTable"/>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment