summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ui/dialog/xml-tree.cpp23
-rw-r--r--src/ui/dialog/xml-tree.h7
-rw-r--r--src/widgets/sp-xmlview-attr-list.cpp2
3 files changed, 27 insertions, 5 deletions
diff --git a/src/ui/dialog/xml-tree.cpp b/src/ui/dialog/xml-tree.cpp
index cdbb2257c..ae1ebf5ca 100644
--- a/src/ui/dialog/xml-tree.cpp
+++ b/src/ui/dialog/xml-tree.cpp
@@ -233,7 +233,7 @@ XmlTree::XmlTree (void) :
GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(attributes));
g_signal_connect (G_OBJECT(selection), "changed", G_CALLBACK (on_attr_select_row), this);
-
+ g_signal_connect( G_OBJECT(attributes), "row-value-changed", G_CALLBACK(on_attr_row_changed), this);
xml_element_new_button.signal_clicked().connect(sigc::mem_fun(*this, &XmlTree::cmd_new_element_node));
xml_text_new_button.signal_clicked().connect(sigc::mem_fun(*this, &XmlTree::cmd_new_text_node));
@@ -738,11 +738,12 @@ void XmlTree::on_attr_select_row(GtkTreeSelection *selection, gpointer data)
GtkTreeModel *model;
if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
-/* self->selected_attr = 0;
+ // Nothing selected
+ self->selected_attr = 0;
self->attr_reset_context(self->selected_attr);
self->xml_attribute_delete_button.set_sensitive(false);
- self->on_attr_unselect_row_clear_text();*/
+ self->on_attr_unselect_row_clear_text();
return;
}
@@ -763,6 +764,22 @@ void XmlTree::on_attr_select_row(GtkTreeSelection *selection, gpointer data)
}
+void XmlTree::on_attr_row_changed(SPXMLViewAttrList *attributes, const gchar * name, gpointer data)
+{
+ // Reselect the selected row if the data changes to refresh the attribute and value edit boxes.
+ GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(attributes));
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ const gchar *attr_name;
+ 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);
+ }
+ }
+}
+
void XmlTree::on_attr_unselect_row_clear_text()
{
attr_name.set_text("");
diff --git a/src/ui/dialog/xml-tree.h b/src/ui/dialog/xml-tree.h
index eeb828771..bf43f5ae8 100644
--- a/src/ui/dialog/xml-tree.h
+++ b/src/ui/dialog/xml-tree.h
@@ -126,11 +126,16 @@ private:
static void after_tree_move(GtkCTree *tree, GtkCTreeNode *node, GtkCTreeNode *new_parent, GtkCTreeNode *new_sibling, gpointer data);
/**
- * Callback functions for when attribute selection changes
+ * Callback for when attribute selection changes
*/
static void on_attr_select_row(GtkTreeSelection *selection, gpointer data);
/**
+ * Callback for when attribute list values change
+ */
+ static void on_attr_row_changed(SPXMLViewAttrList *attributes, const gchar * name, gpointer data);
+
+ /**
* Enable widgets based on current selections
*/
void on_tree_select_row_enable(GtkCTreeNode *node);
diff --git a/src/widgets/sp-xmlview-attr-list.cpp b/src/widgets/sp-xmlview-attr-list.cpp
index b2d22754d..1c92476fa 100644
--- a/src/widgets/sp-xmlview-attr-list.cpp
+++ b/src/widgets/sp-xmlview-attr-list.cpp
@@ -207,6 +207,6 @@ event_attr_changed (Inkscape::XML::Node * /*repr*/,
}
// send a "changed" signal so widget owners will know I've updated
- g_signal_emit_by_name(G_OBJECT (list), "row-value-changed", row );
+ g_signal_emit_by_name(G_OBJECT (list), "row-value-changed", name );
}