summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2019-05-27 15:40:53 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2019-06-02 09:50:17 +0000
commit39a54755e1a46bf7107d382ae2975b01d894f201 (patch)
tree8007ae249048bfdf58fa230d786a129df4f31570 /src
parentFix a bug on undo, backpoer from master (diff)
downloadinkscape-39a54755e1a46bf7107d382ae2975b01d894f201.tar.gz
inkscape-39a54755e1a46bf7107d382ae2975b01d894f201.zip
add improvements pointed by Thomas Holder
Diffstat (limited to 'src')
-rw-r--r--src/ui/dialog/selectordialog.cpp6
-rw-r--r--src/ui/dialog/styledialog.cpp190
-rw-r--r--src/ui/dialog/styledialog.h15
-rw-r--r--src/ui/icon-loader.cpp9
4 files changed, 101 insertions, 119 deletions
diff --git a/src/ui/dialog/selectordialog.cpp b/src/ui/dialog/selectordialog.cpp
index 529b7c06c..319ed1bda 100644
--- a/src/ui/dialog/selectordialog.cpp
+++ b/src/ui/dialog/selectordialog.cpp
@@ -422,10 +422,10 @@ void SelectorDialog::_readStyleElement()
content.erase(std::remove(content.begin(), content.end(), '\n'), content.end());
// Remove comments (/* xxx */)
- while(content.find("/*") != std::string::npos) {
+/* while(content.find("/*") != std::string::npos) {
size_t start = content.find("/*");
- content.erase(start, (content.find("*/", start) - start) +2);
- }
+ content.erase(start, (content.find("*\/", start) - start) +2);
+ } */
// First split into selector/value chunks.
// An attempt to use Glib::Regex failed. A C++11 version worked but
diff --git a/src/ui/dialog/styledialog.cpp b/src/ui/dialog/styledialog.cpp
index 961e04467..7a4624447 100644
--- a/src/ui/dialog/styledialog.cpp
+++ b/src/ui/dialog/styledialog.cpp
@@ -415,13 +415,9 @@ void StyleDialog::_readStyleElement()
_builder->get_widget("CSSSelectorContainer", CSSSelectorContainer);
Gtk::Label *CSSSelector;
_builder->get_widget("CSSSelector", CSSSelector);
- Gtk::Label *CSSSelectorAdd;
- _builder->get_widget("CSSSelectorAdd", CSSSelectorAdd);
Gtk::EventBox *CSSSelectorEventAdd;
_builder->get_widget("CSSSelectorEventAdd", CSSSelectorEventAdd);
CSSSelectorEventAdd->add_events(Gdk::BUTTON_RELEASE_MASK);
- Gtk::Label *CSSSelectorFilled;
- _builder->get_widget("CSSSelectorFilled", CSSSelectorFilled);
CSSSelector->set_text("element");
Gtk::TreeView *CSSTree;
_builder->get_widget("CSSTree", CSSTree);
@@ -433,33 +429,38 @@ void StyleDialog::_readStyleElement()
Gtk::TreeViewColumn *col = CSSTree->get_column(addCol);
if (col) {
col->add_attribute(active->property_active(), _mColumns._colActive);
- } */
+ } */
CSSSelectorEventAdd->signal_button_release_event().connect(
sigc::bind<Glib::RefPtr<Gtk::Builder>, Glib::ustring, gint>(
- sigc::mem_fun(*this, &StyleDialog::_addFirstRow), _builder, "style_properties", 0));
- CSSTree->set_headers_visible(false);
+ sigc::mem_fun(*this, &StyleDialog::_addRow), _builder, "style_properties", 0));
+ Inkscape::UI::Widget::IconRenderer * addRenderer = manage(new Inkscape::UI::Widget::IconRenderer());
+ addRenderer->add_icon("edit-delete");
+ int addCol = CSSTree->append_column("Delete row", *addRenderer) - 1;
+ Gtk::TreeViewColumn *col = CSSTree->get_column(addCol);
+ if (col) {
+ addRenderer->signal_activated().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_onPropDelete), store));
+ }
Gtk::CellRendererText *label = Gtk::manage(new Gtk::CellRendererText());
- CSSTree->set_reorderable(false);
+ label->property_placeholder_text() = _("property");
label->property_editable() = true;
label->signal_edited().connect(sigc::bind< Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_nameEdited), store));
- int addCol = CSSTree->append_column("CSS Selector", *label) - 1;
- Gtk::TreeViewColumn *col = CSSTree->get_column(addCol);
+ addCol = CSSTree->append_column("CSS Property", *label) - 1;
+ col = CSSTree->get_column(addCol);
if (col) {
col->add_attribute(label->property_text(), _mColumns._colName);
}
Gtk::CellRendererText *value = Gtk::manage(new Gtk::CellRendererText());
- CSSTree->set_reorderable(false);
+ value->property_placeholder_text() = _("value");
value->property_editable() = true;
value->signal_edited().connect(sigc::bind< Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_valueEdited), store));
CSSTree->set_focus_vadjustment(_scrolledWindow.get_vadjustment());
- addCol = CSSTree->append_column("CSS Selector", *value) - 1;
+ addCol = CSSTree->append_column("CSS Value", *value) - 1;
col = CSSTree->get_column(addCol);
if (col) {
col->add_attribute(value->property_text(), _mColumns._colValue);
col->add_attribute(value->property_strikethrough(), _mColumns._colStrike);
}
- bool contract = true;
std::map<Glib::ustring, Glib::ustring> attr_prop;
if (obj && obj->getRepr()->attribute("style")) {
Glib::ustring style = obj->getRepr()->attribute("style");
@@ -485,7 +486,6 @@ void StyleDialog::_readStyleElement()
row[_mColumns._colName] = iter->name;
row[_mColumns._colValue] = iter->get_value();
row[_mColumns._colStrike] = false;
- contract = false;
}
}
// We need to handle comments on SPStyle to activate
@@ -501,16 +501,8 @@ void StyleDialog::_readStyleElement()
contract = false;
}
} */
- if (contract) {
- CSSSelectorAdd->show();
- CSSSelectorFilled->hide();
- } else {
- CSSSelectorAdd->hide();
- CSSSelectorFilled->show();
- }
_styleBox.pack_start(*CSSSelectorContainer, Gtk::PACK_EXPAND_WIDGET);
bool hasattributes = false;
- contract = true;
Glib::RefPtr<Gtk::Builder> _builder;
try {
_builder = Gtk::Builder::create_from_file(gladefile);
@@ -523,14 +515,11 @@ void StyleDialog::_readStyleElement()
CSSSelector->set_text("element.attributes");
Gtk::Box *CSSSelectorContainer;
_builder->get_widget("CSSSelectorContainer", CSSSelectorContainer);
- Gtk::Label *CSSSelectorAdd;
- _builder->get_widget("CSSSelectorAdd", CSSSelectorAdd);
Gtk::EventBox *CSSSelectorEventAdd;
_builder->get_widget("CSSSelectorEventAdd", CSSSelectorEventAdd);
CSSSelectorEventAdd->add_events(Gdk::BUTTON_RELEASE_MASK);
- Gtk::Label *CSSSelectorFilled;
- _builder->get_widget("CSSSelectorFilled", CSSSelectorFilled);
Glib::RefPtr<Gtk::TreeStore> store = Gtk::TreeStore::create(_mColumns);
+ bool show = false;
for (auto iter : obj->style->properties()) {
if (iter->style_src != SP_STYLE_SRC_UNSET) {
if( iter->name != "font" && iter->name != "d" && iter->name != "marker") {
@@ -542,31 +531,30 @@ void StyleDialog::_readStyleElement()
CSSTree->set_model(store);
CSSSelectorEventAdd->signal_button_release_event().connect(
sigc::bind<Glib::RefPtr<Gtk::Builder>, Glib::ustring, gint>(
- sigc::mem_fun(*this, &StyleDialog::_addFirstRow), _builder, "style_properties", 0));
+ sigc::mem_fun(*this, &StyleDialog::_addRow), _builder, "style_properties", 0));
- // We need to handle comments on SPStyle to activate
- /* Gtk::CellRendererToggle *active = Gtk::manage(new Gtk::CellRendererToggle);
- int addCol = CSSTree->append_column("", *active) - 1;
+ Inkscape::UI::Widget::IconRenderer * addRenderer = manage(new Inkscape::UI::Widget::IconRenderer());
+ addRenderer->add_icon("edit-delete");
+ int addCol = CSSTree->append_column("Delete row", *addRenderer) - 1;
Gtk::TreeViewColumn *col = CSSTree->get_column(addCol);
if (col) {
- col->add_attribute(active->property_active(), _mColumns._colActive);
- } */
- CSSTree->set_headers_visible(false);
+ addRenderer->signal_activated().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_onPropDelete), store));
+ }
Gtk::CellRendererText *label = Gtk::manage(new Gtk::CellRendererText());
- CSSTree->set_reorderable(false);
+ label->property_placeholder_text() = _("property");
label->property_editable() = true;
label->signal_edited().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_nameEdited), store));
- int addCol = CSSTree->append_column("CSS Selector", *label) - 1;
- Gtk::TreeViewColumn *col = CSSTree->get_column(addCol);
+ addCol = CSSTree->append_column("CSS Property", *label) - 1;
+ col = CSSTree->get_column(addCol);
if (col) {
col->add_attribute(label->property_text(), _mColumns._colName);
}
Gtk::CellRendererText *value = Gtk::manage(new Gtk::CellRendererText());
- CSSTree->set_reorderable(false);
+ value->property_placeholder_text() = _("value");
value->property_editable() = true;
value->signal_edited().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_valueEdited), store));
CSSTree->set_focus_vadjustment(_scrolledWindow.get_vadjustment());
- addCol = CSSTree->append_column("CSS Selector", *value) - 1;
+ addCol = CSSTree->append_column("CSS Value", *value) - 1;
col = CSSTree->get_column(addCol);
if (col) {
col->add_attribute(value->property_text(), _mColumns._colValue);
@@ -584,15 +572,13 @@ void StyleDialog::_readStyleElement()
} else {
row[_mColumns._colStrike] = false;
}
- contract = false;
+ show = true;
hasattributes = true;
}
}
}
}
- if (!contract) {
- CSSSelectorAdd->hide();
- CSSSelectorFilled->show();
+ if (show) {
_styleBox.pack_start(*CSSSelectorContainer, Gtk::PACK_EXPAND_WIDGET);
}
}
@@ -641,29 +627,31 @@ void StyleDialog::_readStyleElement()
_builder->get_widget("CSSSelectorContainer", CSSSelectorContainer);
Gtk::Label *CSSSelector;
_builder->get_widget("CSSSelector", CSSSelector);
- Gtk::Label *CSSSelectorAdd;
- _builder->get_widget("CSSSelectorAdd", CSSSelectorAdd);
Gtk::EventBox *CSSSelectorEventAdd;
_builder->get_widget("CSSSelectorEventAdd", CSSSelectorEventAdd);
CSSSelectorEventAdd->add_events(Gdk::BUTTON_RELEASE_MASK);
- Gtk::Label *CSSSelectorFilled;
- _builder->get_widget("CSSSelectorFilled", CSSSelectorFilled);
CSSSelector->set_text(selector);
Gtk::TreeView *CSSTree;
_builder->get_widget("CSSTree", CSSTree);
Glib::RefPtr<Gtk::TreeStore> store = Gtk::TreeStore::create(_mColumns);
CSSTree->set_model(store);
- Gtk::CellRendererToggle *active = Gtk::manage(new Gtk::CellRendererToggle);
- int addCol = CSSTree->append_column("", *active) - 1;
+ Inkscape::UI::Widget::IconRenderer * addRenderer = manage(new Inkscape::UI::Widget::IconRenderer());
+ addRenderer->add_icon("edit-delete");
+ int addCol = CSSTree->append_column("Delete row", *addRenderer) - 1;
Gtk::TreeViewColumn *col = CSSTree->get_column(addCol);
if (col) {
+ addRenderer->signal_activated().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_onPropDelete), store));
+ }
+ Gtk::CellRendererToggle *active = Gtk::manage(new Gtk::CellRendererToggle);
+ addCol = CSSTree->append_column("Active Property", *active) - 1;
+ col = CSSTree->get_column(addCol);
+ if (col) {
col->add_attribute(active->property_active(), _mColumns._colActive);
active->signal_toggled().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_activeToggled), store));
}
//col->set_cell_data_func(*active, sigc::mem_fun(*this, &StyleDialog::_hideRootToggle));
- CSSTree->set_headers_visible(false);
Gtk::CellRendererText *label = Gtk::manage(new Gtk::CellRendererText());
- CSSTree->set_reorderable(false);
+ label->property_placeholder_text() = _("property");
label->property_editable() = true;
label->signal_edited().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_nameEdited), store));
addCol = CSSTree->append_column("CSS Selector", *label) - 1;
@@ -672,11 +660,11 @@ void StyleDialog::_readStyleElement()
col->add_attribute(label->property_text(), _mColumns._colName);
}
Gtk::CellRendererText *value = Gtk::manage(new Gtk::CellRendererText());
- CSSTree->set_reorderable(false);
value->property_editable() = true;
value->signal_edited().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_valueEdited), store));
+ value->property_placeholder_text() = _("value");
CSSTree->set_focus_vadjustment(_scrolledWindow.get_vadjustment());
- addCol = CSSTree->append_column("CSS Selector", *value) - 1;
+ addCol = CSSTree->append_column("CSS Value", *value) - 1;
col = CSSTree->get_column(addCol);
if (col) {
col->add_attribute(value->property_text(), _mColumns._colValue);
@@ -695,10 +683,9 @@ void StyleDialog::_readStyleElement()
}
}
std::map<Glib::ustring, Glib::ustring> attr_prop_styleshet = parseStyle(style);
- contract = true;
CSSSelectorEventAdd->signal_button_release_event().connect(
sigc::bind<Glib::RefPtr<Gtk::Builder>, Glib::ustring, gint>(
- sigc::mem_fun(*this, &StyleDialog::_addFirstRow), _builder, selector, selectorpos));
+ sigc::mem_fun(*this, &StyleDialog::_addRow), _builder, selector, selectorpos));
for (auto iter : obj->style->properties()) {
if (iter->style_src != SP_STYLE_SRC_UNSET) {
@@ -714,7 +701,6 @@ void StyleDialog::_readStyleElement()
} else {
row[_mColumns._colStrike] = false;
}
- contract = false;
}
}
}
@@ -729,30 +715,44 @@ void StyleDialog::_readStyleElement()
row[_mColumns._colName] = iter.first;
row[_mColumns._colValue] = iter.second;
row[_mColumns._colStrike] = true;
- contract = false;
}
}
- if (contract) {
- CSSSelectorAdd->show();
- CSSSelectorFilled->hide();
- } else {
- CSSSelectorAdd->hide();
- CSSSelectorFilled->show();
- }
_styleBox.pack_start(*CSSSelectorContainer, Gtk::PACK_EXPAND_WIDGET);
}
}
_mainBox.show_all_children();
+ if (obj) {
+ obj->style->readFromObject(obj);
+ obj->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
+ }
_updating = false;
}
/**
+ * @brief StyleDialog::_onPropDelete
+ * @param event
+ * @return true
+ * Delete the attribute from the style
+ */
+void
+StyleDialog::_onPropDelete(Glib::ustring path, Glib::RefPtr<Gtk::TreeStore> store)
+{
+ Gtk::TreeModel::Row row = *store->get_iter(path);
+ if (row) {
+ Glib::ustring selector = row[_mColumns._colSelector];
+ store->erase(row);
+ _writeStyleElement(store, selector);
+ }
+}
+
+/**
* @brief StyleDialog::parseStyle
*
* Convert a style string into a vector map. This should be moved to style.cpp
*
*/
-std::map<Glib::ustring, Glib::ustring> StyleDialog::parseStyle(Glib::ustring style_string)
+std::map<Glib::ustring, Glib::ustring>
+StyleDialog::parseStyle(Glib::ustring style_string)
{
std::map<Glib::ustring, Glib::ustring> ret;
@@ -777,7 +777,7 @@ std::map<Glib::ustring, Glib::ustring> StyleDialog::parseStyle(Glib::ustring sty
/**
* Update the content of the style element as selectors (or objects) are added/removed.
*/
-void StyleDialog::_writeStyleElement(Glib::RefPtr<Gtk::TreeStore> store)
+void StyleDialog::_writeStyleElement(Glib::RefPtr<Gtk::TreeStore> store, Glib::ustring selector)
{
if (_updating) {
return;
@@ -791,9 +791,9 @@ void StyleDialog::_writeStyleElement(Glib::RefPtr<Gtk::TreeStore> store)
return;
}
_updating = true;
- Glib::ustring selector = "";
gint selectorpos = 0;
std::string styleContent = "";
+ styleContent = "\n" + selector + " { \n";
for (auto& row: store->children()) {
selector = row[_mColumns._colSelector];
selectorpos = row[_mColumns._colSelectorPos];
@@ -801,9 +801,6 @@ void StyleDialog::_writeStyleElement(Glib::RefPtr<Gtk::TreeStore> store)
Glib::ustring closecomment = "" ;
if (selector != "style_properties" &&
selector != "attributes") {
- if (styleContent == "") {
- styleContent = "\n" + selector + " { \n";
- }
opencomment = row[_mColumns._colActive] ? " " : " /*";
closecomment = row[_mColumns._colActive] ? "\n" : "*/\n" ;
}
@@ -837,7 +834,7 @@ void StyleDialog::_writeStyleElement(Glib::RefPtr<Gtk::TreeStore> store)
obj->getRepr()->setAttribute(name.c_str(), value);
}
}
- } else if (!selector.empty()) { //styleshhetç
+ } else if (!selector.empty()) { //styleshet
// We could test if styleContent is empty and then delete the style node here but there is no
// harm in keeping it around ...
SP_ACTIVE_DOCUMENT->setStyleSheet(nullptr);
@@ -864,7 +861,7 @@ void StyleDialog::_writeStyleElement(Glib::RefPtr<Gtk::TreeStore> store)
/**
- * @brief AttrDialog::nameEdited
+ * @brief StyleDialog::nameEdited
* @param event
* @return
* Called when the name is edited in the TreeView editable column
@@ -874,39 +871,32 @@ void StyleDialog::_nameEdited (const Glib::ustring& path, const Glib::ustring& n
Gtk::TreeModel::Row row = *store->get_iter(path);
if(row) {
Glib::ustring value = row[_mColumns._colValue];
+ Glib::ustring selector = row[_mColumns._colSelector];
row[_mColumns._colName] = name;
if(name.empty() && value.empty()) {
store->erase(row);
}
- _writeStyleElement(store);
+ _writeStyleElement(store, selector);
}
}
-bool StyleDialog::_addFirstRow(GdkEventButton *evt, Glib::RefPtr<Gtk::Builder> builder, Glib::ustring selector, gint pos) {
- Gtk::Label *CSSSelectorAdd;
- builder->get_widget("CSSSelectorAdd", CSSSelectorAdd);
- Gtk::Label *CSSSelectorFilled;
- builder->get_widget("CSSSelectorFilled", CSSSelectorFilled);
+bool StyleDialog::_addRow(GdkEventButton *evt, Glib::RefPtr<Gtk::Builder> builder, Glib::ustring selector, gint pos) {
Gtk::TreeView *CSSTree;
builder->get_widget("CSSTree", CSSTree);
Glib::RefPtr< Gtk::TreeModel > model = CSSTree->get_model();
Glib::RefPtr< Gtk::TreeStore > store = Glib::RefPtr< Gtk::TreeStore >::cast_static(model);
- if ( CSSSelectorAdd->get_text() == " + }") {
- CSSSelectorAdd->hide();
- CSSSelectorFilled->show();
- Gtk::TreeModel::Row rowadded = *(store->append());
- rowadded[_mColumns._colSelector] = selector;
- rowadded[_mColumns._colSelectorPos] = pos;
- rowadded[_mColumns._colActive] = false;
- rowadded[_mColumns._colName] = " ";
- rowadded[_mColumns._colValue] = " ";
- rowadded[_mColumns._colStrike] = false;
- }
+ Gtk::TreeModel::Row rowadded = *(store->append());
+ rowadded[_mColumns._colSelector] = selector;
+ rowadded[_mColumns._colSelectorPos] = pos;
+ rowadded[_mColumns._colActive] = false;
+ rowadded[_mColumns._colName] = "";
+ rowadded[_mColumns._colValue] = "";
+ rowadded[_mColumns._colStrike] = false;
return false;
}
/**
- * @brief AttrDialog::valueEdited
+ * @brief StyleDialog::valueEdited
* @param event
* @return
* Called when the value is edited in the TreeView editable column
@@ -916,27 +906,12 @@ void StyleDialog::_valueEdited(const Glib::ustring& path, const Glib::ustring& v
Gtk::TreeModel::Row row = *store->get_iter(path);
if(row) {
row[_mColumns._colValue] = value;
+ Glib::ustring selector = row[_mColumns._colSelector];
Glib::ustring name = row[_mColumns._colName];
if(name.empty() && value.empty()) {
store->erase(row);
}
- Glib::ustring selector = row[_mColumns._colSelector];
- _writeStyleElement(store);
- Glib::RefPtr< Gtk::TreeStore > new_store = Glib::RefPtr< Gtk::TreeStore >::cast_static(_selectTree(selector));
- if (new_store) {
- Gtk::TreeIter iter = new_store->get_iter(path);
- ++iter;
- if (!iter && !value.empty()) {
- Gtk::TreeModel::Row rowadded = *(new_store->append());
- gint pos = row[_mColumns._colSelectorPos];
- rowadded[_mColumns._colSelector] = selector;
- rowadded[_mColumns._colSelectorPos] = pos;
- rowadded[_mColumns._colActive] = false;
- rowadded[_mColumns._colName] = "";
- rowadded[_mColumns._colValue] = "";
- rowadded[_mColumns._colStrike] = false;
- }
- }
+ _writeStyleElement(store, selector);
}
}
@@ -945,7 +920,8 @@ void StyleDialog::_activeToggled(const Glib::ustring& path, Glib::RefPtr<Gtk::Tr
Gtk::TreeModel::Row row = *store->get_iter(path);
if(row) {
row[_mColumns._colActive] = !row[_mColumns._colActive];
- _writeStyleElement(store);
+ Glib::ustring selector = row[_mColumns._colSelector];
+ _writeStyleElement(store, selector);
}
}
diff --git a/src/ui/dialog/styledialog.h b/src/ui/dialog/styledialog.h
index b94040e1d..d0412fa2e 100644
--- a/src/ui/dialog/styledialog.h
+++ b/src/ui/dialog/styledialog.h
@@ -72,19 +72,20 @@ public:
class ModelColumns : public Gtk::TreeModel::ColumnRecord {
public:
ModelColumns() {
- add(_colSelector);
- add(_colSelectorPos);
add(_colActive);
add(_colName);
add(_colValue);
add(_colStrike);
+ add(_colSelector);
+ add(_colSelectorPos);
}
- Gtk::TreeModelColumn<Glib::ustring> _colSelector; // Style or matching object id.
- Gtk::TreeModelColumn<gint> _colSelectorPos; // Position of the selector to hadle dup selectors
Gtk::TreeModelColumn<bool> _colActive; // Active or inative property
Gtk::TreeModelColumn<Glib::ustring> _colName; // Name of the property.
Gtk::TreeModelColumn<Glib::ustring> _colValue; // Value of the property.
Gtk::TreeModelColumn<bool> _colStrike; // Propery not used, overloaded
+ Gtk::TreeModelColumn<Glib::ustring> _colSelector; // Style or matching object id.
+ Gtk::TreeModelColumn<gint> _colSelectorPos; // Position of the selector to hadle dup selectors
+
};
ModelColumns _mColumns;
@@ -97,12 +98,12 @@ public:
Inkscape::XML::Node *_getStyleTextNode();
void _readStyleElement();
Glib::RefPtr< Gtk::TreeModel > _selectTree(Glib::ustring selector);
- void _writeStyleElement(Glib::RefPtr<Gtk::TreeStore> store);
+ void _writeStyleElement(Glib::RefPtr<Gtk::TreeStore> store, Glib::ustring selector);
void _activeToggled(const Glib::ustring& path, Glib::RefPtr<Gtk::TreeStore> store);
- bool _addFirstRow(GdkEventButton *evt, Glib::RefPtr<Gtk::Builder> _builder, Glib::ustring selector, gint pos);
+ bool _addRow(GdkEventButton *evt, Glib::RefPtr<Gtk::Builder> _builder, Glib::ustring selector, gint pos);
void _nameEdited(const Glib::ustring& path, const Glib::ustring& name, Glib::RefPtr<Gtk::TreeStore> store);
void _valueEdited(const Glib::ustring& path, const Glib::ustring& value, Glib::RefPtr<Gtk::TreeStore> store);
-
+ void _onPropDelete(Glib::ustring path, Glib::RefPtr<Gtk::TreeStore> store);
// Update watchers
void _addWatcherRecursive(Inkscape::XML::Node *node);
diff --git a/src/ui/icon-loader.cpp b/src/ui/icon-loader.cpp
index e2aaf5093..2b477f573 100644
--- a/src/ui/icon-loader.cpp
+++ b/src/ui/icon-loader.cpp
@@ -62,8 +62,13 @@ Glib::RefPtr<Gdk::Pixbuf> sp_get_icon_pixbuf(Glib::ustring icon_name, gint size)
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
if (prefs->getBool("/theme/symbolicIcons", false)) {
Gtk::IconInfo iconinfo = icon_theme->lookup_icon(icon_name + Glib::ustring("-symbolic"), size, Gtk::ICON_LOOKUP_FORCE_SIZE);
- bool was_sumbolic = false;
- _icon_pixbuf = iconinfo.load_symbolic(SP_ACTIVE_DESKTOP->getToplevel()->get_style_context(), was_sumbolic);
+ if (iconinfo) {
+ bool was_simbolic = false;
+ _icon_pixbuf = iconinfo.load_symbolic(SP_ACTIVE_DESKTOP->getToplevel()->get_style_context(), was_simbolic);
+ } else {
+ Gtk::IconInfo iconinfo = icon_theme->lookup_icon(icon_name, size, Gtk::ICON_LOOKUP_FORCE_SIZE);
+ _icon_pixbuf = iconinfo.load_icon();
+ }
} else {
Gtk::IconInfo iconinfo = icon_theme->lookup_icon(icon_name, size, Gtk::ICON_LOOKUP_FORCE_SIZE);
_icon_pixbuf = iconinfo.load_icon();