summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohn Smith <john.smith7545@yahoo.com>2012-04-11 13:15:03 +0000
committerJohn Smith <removethis.john.q.public@bigmail.com>2012-04-11 13:15:03 +0000
commit0013e55cc6f1d51657518c5f863e2c24b223065b (patch)
tree47eca27323e00dce6eab6b0a56aa4e39039941c8 /src
parentFix for 367607 : Replace deprecated sp_ctrl_set_arg and gtk_object_add_arg_ty... (diff)
downloadinkscape-0013e55cc6f1d51657518c5f863e2c24b223065b.tar.gz
inkscape-0013e55cc6f1d51657518c5f863e2c24b223065b.zip
Fix for 903676 : Replace GtkCList with GtkTreeView in XML Tree, 64bitLion crash fix
(bzr r11220)
Diffstat (limited to 'src')
-rw-r--r--src/ui/dialog/xml-tree.cpp40
-rw-r--r--src/widgets/sp-xmlview-attr-list.cpp42
-rw-r--r--src/widgets/sp-xmlview-attr-list.h4
3 files changed, 54 insertions, 32 deletions
diff --git a/src/ui/dialog/xml-tree.cpp b/src/ui/dialog/xml-tree.cpp
index 357114626..7efddc3cc 100644
--- a/src/ui/dialog/xml-tree.cpp
+++ b/src/ui/dialog/xml-tree.cpp
@@ -65,7 +65,6 @@ XmlTree::XmlTree (void) :
attributes (NULL),
content (NULL),
attr_name (),
- attr_value (),
status (""),
tree_toolbar(),
xml_element_new_button ( _("New element node")),
@@ -747,21 +746,27 @@ void XmlTree::on_attr_select_row(GtkTreeSelection *selection, gpointer data)
return;
}
- self->attr_value.grab_focus ();
-
- self->xml_attribute_delete_button.set_sensitive(true);
-
- const gchar *name;
- const gchar *value;
- gint attr;
- gtk_tree_model_get (model, &iter, 0, &name, 1, &value, 2, &attr, -1);
+ gchar *name = 0;
+ gchar *value = 0;
+ guint attr = 0;
+ gtk_tree_model_get (model, &iter, ATTR_COL_NAME, &name, ATTR_COL_VALUE, &value, ATTR_COL_ATTR, &attr, -1);
self->attr_name.set_text(name);
self->attr_value.get_buffer()->set_text(value);
- self->selected_attr = attr;
+ self->attr_value.grab_focus ();
+ self->xml_attribute_delete_button.set_sensitive(true);
+
+ self->selected_attr = attr;
self->attr_reset_context(self->selected_attr);
+ if (name) {
+ g_free(name);
+ }
+
+ if (value) {
+ g_free(value);
+ }
}
void XmlTree::on_attr_row_changed(SPXMLViewAttrList *attributes, const gchar * name, gpointer /*data*/)
@@ -770,14 +775,21 @@ void XmlTree::on_attr_row_changed(SPXMLViewAttrList *attributes, const gchar * n
GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(attributes));
GtkTreeIter iter;
GtkTreeModel *model;
- const gchar *attr_name;
+ gchar *attr_name = 0;
if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
gtk_tree_model_get (model, &iter, 0, &attr_name, -1);
- if (!strcmp(name, attr_name)) {
- gtk_tree_selection_unselect_all(selection);
- gtk_tree_selection_select_iter(selection, &iter);
+ if (gtk_list_store_iter_is_valid(GTK_LIST_STORE(model), &iter) ) {
+ if (!strcmp(name, attr_name)) {
+ gtk_tree_selection_unselect_all(selection);
+ gtk_tree_selection_select_iter(selection, &iter);
+ }
}
}
+
+ if (attr_name) {
+ g_free(attr_name);
+ attr_name = 0;
+ }
}
void XmlTree::on_attr_unselect_row_clear_text()
diff --git a/src/widgets/sp-xmlview-attr-list.cpp b/src/widgets/sp-xmlview-attr-list.cpp
index dcc34efa3..0b4dcce32 100644
--- a/src/widgets/sp-xmlview-attr-list.cpp
+++ b/src/widgets/sp-xmlview-attr-list.cpp
@@ -36,8 +36,6 @@ static Inkscape::XML::NodeEventVector repr_events = {
NULL /* order_changed */
};
-enum {COL_NAME=0, COL_VALUE, COL_ATTR};
-
GtkWidget *
sp_xmlview_attr_list_new (Inkscape::XML::Node * repr)
{
@@ -45,20 +43,24 @@ sp_xmlview_attr_list_new (Inkscape::XML::Node * repr)
attr_list = (SPXMLViewAttrList*)g_object_new (SP_TYPE_XMLVIEW_ATTR_LIST, NULL);
- attr_list->store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
+ attr_list->store = gtk_list_store_new (ATTR_N_COLS, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING );
gtk_tree_view_set_model (GTK_TREE_VIEW(attr_list), GTK_TREE_MODEL(attr_list->store));
+ // Attribute name column
+ int colpos = 0;
GtkCellRenderer *cell = gtk_cell_renderer_text_new ();
- gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(attr_list), COL_NAME, _("Attribute"), cell, "text", 0, NULL);
- GtkTreeViewColumn *column = gtk_tree_view_get_column (GTK_TREE_VIEW(attr_list), COL_NAME);
+ gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(attr_list), colpos, _("Name"), cell, "text", ATTR_COL_NAME, NULL);
+ GtkTreeViewColumn *column = gtk_tree_view_get_column (GTK_TREE_VIEW(attr_list), colpos);
gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
- gtk_tree_view_column_set_sort_column_id (column, COL_NAME);
- gtk_tree_sortable_set_sort_column_id ( GTK_TREE_SORTABLE(attr_list->store), COL_NAME, GTK_SORT_ASCENDING);
+ gtk_tree_view_column_set_sort_column_id (column, colpos);
+ gtk_tree_sortable_set_sort_column_id ( GTK_TREE_SORTABLE(attr_list->store), ATTR_COL_NAME, GTK_SORT_ASCENDING);
gtk_cell_renderer_set_padding (cell, 2, 0);
+ // Attribute value column
+ colpos = 1;
cell = gtk_cell_renderer_text_new ();
- gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(attr_list), COL_VALUE, _("Value"), cell, "text", COL_VALUE, NULL);
- column = gtk_tree_view_get_column (GTK_TREE_VIEW(attr_list), COL_VALUE);
+ gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(attr_list), colpos, _("Value"), cell, "text", ATTR_COL_VALUE, NULL);
+ column = gtk_tree_view_get_column (GTK_TREE_VIEW(attr_list), colpos);
gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
gtk_cell_renderer_set_padding (cell, 2, 0);
@@ -141,24 +143,28 @@ sp_xmlview_attr_list_destroy (GtkObject * object)
list = SP_XMLVIEW_ATTR_LIST (object);
+ g_object_unref(list->store);
sp_xmlview_attr_list_set_repr (list, NULL);
GTK_OBJECT_CLASS (parent_class)->destroy (object);
}
-void sp_xmlview_attr_list_select_row_by_key(SPXMLViewAttrList * list, gchar *name)
+void sp_xmlview_attr_list_select_row_by_key(SPXMLViewAttrList * list, const gchar *name)
{
GtkTreeIter iter;
- const gchar *n;
gboolean match = false;
gboolean valid = gtk_tree_model_get_iter_first( GTK_TREE_MODEL(list->store), &iter );
while ( valid ) {
- gtk_tree_model_get (GTK_TREE_MODEL(list->store), &iter, COL_NAME, &n, -1);
+ gchar *n = 0;
+ gtk_tree_model_get (GTK_TREE_MODEL(list->store), &iter, ATTR_COL_NAME, &n, -1);
if (!strcmp(n, name)) {
match = true;
break;
}
valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(list->store), &iter);
+ if (n) {
+ g_free(n);
+ }
}
if (match) {
@@ -181,29 +187,31 @@ event_attr_changed (Inkscape::XML::Node * /*repr*/,
list = SP_XMLVIEW_ATTR_LIST (data);
GtkTreeIter iter;
- const gchar *n;
gboolean valid = gtk_tree_model_get_iter_first( GTK_TREE_MODEL(list->store), &iter );
gboolean match = false;
while ( valid ) {
- gtk_tree_model_get (GTK_TREE_MODEL(list->store), &iter, COL_NAME, &n, -1);
+ gchar *n = 0;
+ gtk_tree_model_get (GTK_TREE_MODEL(list->store), &iter, ATTR_COL_NAME, &n, -1);
if (!strcmp(n, name)) {
match = true;
break;
}
row++;
valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(list->store), &iter);
+ if (n) {
+ g_free(n);
+ }
}
if (match) {
if (new_value) {
- gtk_list_store_set (list->store, &iter, COL_NAME, name, COL_VALUE, new_value, COL_ATTR, GINT_TO_POINTER (g_quark_from_string (name)), -1);
+ gtk_list_store_set (list->store, &iter, ATTR_COL_NAME, name, ATTR_COL_VALUE, new_value, ATTR_COL_ATTR, g_quark_from_string (name), -1);
} else {
gtk_list_store_remove (list->store, &iter);
}
} else if (new_value != NULL) {
gtk_list_store_append (list->store, &iter);
- gtk_list_store_set (list->store, &iter, COL_NAME, name, COL_VALUE, new_value, COL_ATTR, GINT_TO_POINTER (g_quark_from_string (name)), -1);
-
+ gtk_list_store_set (list->store, &iter, ATTR_COL_NAME, name, ATTR_COL_VALUE, new_value, ATTR_COL_ATTR, g_quark_from_string (name), -1);
}
// send a "changed" signal so widget owners will know I've updated
diff --git a/src/widgets/sp-xmlview-attr-list.h b/src/widgets/sp-xmlview-attr-list.h
index 485ea0114..8b1dae49b 100644
--- a/src/widgets/sp-xmlview-attr-list.h
+++ b/src/widgets/sp-xmlview-attr-list.h
@@ -45,7 +45,9 @@ GtkWidget * sp_xmlview_attr_list_new (Inkscape::XML::Node * repr);
#define SP_XMLVIEW_ATTR_LIST_GET_REPR(list) (SP_XMLVIEW_ATTR_LIST (list)->repr)
void sp_xmlview_attr_list_set_repr (SPXMLViewAttrList * list, Inkscape::XML::Node * repr);
-void sp_xmlview_attr_list_select_row_by_key(SPXMLViewAttrList * list, gchar *name);
+void sp_xmlview_attr_list_select_row_by_key(SPXMLViewAttrList * list, const gchar *name);
+/* Attribute list store columns */
+enum {ATTR_COL_NAME=0, ATTR_COL_ATTR=1, ATTR_COL_VALUE=2, ATTR_N_COLS=3 };
#endif