summaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2016-06-11 15:34:03 +0000
committerjabiertxof <info@marker.es>2016-06-11 15:34:03 +0000
commitd6b2e2cdeb563026cc9f4633e687a607b095da87 (patch)
treeb25e3e95e5e96782232e65d0d9889fcb12c2f285 /src/ui
parentFixing satellites bug on erase (diff)
parentA little cleaning up of attributes. (diff)
downloadinkscape-d6b2e2cdeb563026cc9f4633e687a607b095da87.tar.gz
inkscape-d6b2e2cdeb563026cc9f4633e687a607b095da87.zip
update to trunk
(bzr r13645.1.147)
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/dialog/clonetiler.cpp3
-rw-r--r--src/ui/dialog/document-properties.cpp91
-rw-r--r--src/ui/dialog/document-properties.h18
-rw-r--r--src/ui/dialog/inkscape-preferences.cpp44
-rw-r--r--src/ui/tool/node.cpp2
-rw-r--r--src/ui/tools/measure-tool.cpp2
-rw-r--r--src/ui/tools/tool-base.cpp5
-rw-r--r--src/ui/widget/color-icc-selector.cpp17
8 files changed, 129 insertions, 53 deletions
diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp
index 9656878e0..b727c87ee 100644
--- a/src/ui/dialog/clonetiler.cpp
+++ b/src/ui/dialog/clonetiler.cpp
@@ -2266,7 +2266,8 @@ void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg)
clonetiler_remove (NULL, dlg, false);
- double scale_units = Inkscape::Util::Quantity::convert(1, "px", &desktop->getDocument()->getSVGUnit());
+ Geom::Scale scale = desktop->getDocument()->getDocumentScale().inverse();
+ double scale_units = scale[Geom::X]; // Use just x direction....
double shiftx_per_i = 0.01 * prefs->getDoubleLimited(prefs_path + "shiftx_per_i", 0, -10000, 10000);
double shifty_per_i = 0.01 * prefs->getDoubleLimited(prefs_path + "shifty_per_i", 0, -10000, 10000);
diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp
index 12eaba72a..589973162 100644
--- a/src/ui/dialog/document-properties.cpp
+++ b/src/ui/dialog/document-properties.cpp
@@ -283,7 +283,7 @@ inline void attach_all(Gtk::Table &table, Gtk::Widget *const arr[], unsigned con
} else {
#if WITH_GTKMM_3_0
arr[i+1]->set_hexpand();
-
+
if (yoptions & Gtk::EXPAND)
arr[i+1]->set_vexpand();
else
@@ -428,13 +428,30 @@ void DocumentProperties::build_snap()
#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
/// Populates the available color profiles combo box
void DocumentProperties::populate_available_profiles(){
- _combo_avail.remove_all(); // Clear any existing items in the combo box
+ _AvailableProfilesListStore->clear(); // Clear any existing items in the combo box
// Iterate through the list of profiles and add the name to the combo box.
- std::vector<std::pair<Glib::ustring, Glib::ustring> > pairs = ColorProfile::getProfileFilesWithNames();
- for ( std::vector<std::pair<Glib::ustring, Glib::ustring> >::const_iterator it = pairs.begin(); it != pairs.end(); ++it ) {
+ std::vector<std::pair<std::pair<Glib::ustring, bool>, Glib::ustring> > pairs = ColorProfile::getProfileFilesWithNames();
+ bool home = true; // initial value doesn't matter, it's just to avoid a compiler warning
+ for ( std::vector<std::pair<std::pair<Glib::ustring, bool>, Glib::ustring> >::const_iterator it = pairs.begin(); it != pairs.end(); ++it ) {
+ Gtk::TreeModel::Row row;
+ Glib::ustring file = it->first.first;
Glib::ustring name = it->second;
- _combo_avail.append(name);
+
+ // add a separator between profiles from the user's home directory and system profiles
+ if (it != pairs.begin() && it->first.second != home)
+ {
+ row = *(_AvailableProfilesListStore->append());
+ row[_AvailableProfilesListColumns.fileColumn] = "<separator>";
+ row[_AvailableProfilesListColumns.nameColumn] = "<separator>";
+ row[_AvailableProfilesListColumns.separatorColumn] = true;
+ }
+ home = it->first.second;
+
+ row = *(_AvailableProfilesListStore->append());
+ row[_AvailableProfilesListColumns.fileColumn] = file;
+ row[_AvailableProfilesListColumns.nameColumn] = name;
+ row[_AvailableProfilesListColumns.separatorColumn] = false;
}
}
@@ -442,7 +459,7 @@ void DocumentProperties::populate_available_profiles(){
* Cleans up name to remove disallowed characters.
* Some discussion at http://markmail.org/message/bhfvdfptt25kgtmj
* Allowed ASCII first characters: ':', 'A'-'Z', '_', 'a'-'z'
- * Allowed ASCII remaining chars add: '-', '.', '0'-'9',
+ * Allowed ASCII remaining chars add: '-', '.', '0'-'9',
*
* @param str the string to clean up.
*/
@@ -474,24 +491,23 @@ static void sanitizeName( Glib::ustring& str )
/// Links the selected color profile in the combo box to the document
void DocumentProperties::linkSelectedProfile()
{
-//store this profile in the SVG document (create <color-profile> element in the XML)
+ //store this profile in the SVG document (create <color-profile> element in the XML)
// TODO remove use of 'active' desktop
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
if (!desktop){
g_warning("No active desktop");
} else {
- // Find the index of the currently-selected row in the color profiles combobox
- int row = _combo_avail.get_active_row_number();
+ // Find the index of the currently-selected row in the color profiles combobox
+ Gtk::TreeModel::iterator iter = _AvailableProfilesList.get_active();
- if (row == -1){
+ if (!iter) {
g_warning("No color profile available.");
return;
}
- // Read the filename and description from the list of available profiles
- std::vector<std::pair<Glib::ustring, Glib::ustring> > pairs = ColorProfile::getProfileFilesWithNames();
- Glib::ustring file = pairs[row].first;
- Glib::ustring name = pairs[row].second;
+ // Read the filename and description from the list of available profiles
+ Glib::ustring file = (*iter)[_AvailableProfilesListColumns.fileColumn];
+ Glib::ustring name = (*iter)[_AvailableProfilesListColumns.nameColumn];
std::vector<SPObject *> current = SP_ACTIVE_DOCUMENT->getResourceList( "iccprofile" );
for (std::vector<SPObject *>::const_iterator it = current.begin(); it != current.end(); ++it) {
SPObject* obj = *it;
@@ -511,7 +527,7 @@ void DocumentProperties::linkSelectedProfile()
// Checks whether there is a defs element. Creates it when needed
Inkscape::XML::Node *defsRepr = sp_repr_lookup_name(xml_doc, "svg:defs");
- if (!defsRepr){
+ if (!defsRepr) {
defsRepr = xml_doc->createElement("svg:defs");
xml_doc->root()->addChild(defsRepr, NULL);
}
@@ -529,6 +545,20 @@ void DocumentProperties::linkSelectedProfile()
}
}
+struct _cmp {
+ bool operator()(const SPObject * const & a, const SPObject * const & b)
+ {
+ const Inkscape::ColorProfile &a_prof = reinterpret_cast<const Inkscape::ColorProfile &>(*a);
+ const Inkscape::ColorProfile &b_prof = reinterpret_cast<const Inkscape::ColorProfile &>(*b);
+ gchar *a_name_casefold = g_utf8_casefold(a_prof.name, -1 );
+ gchar *b_name_casefold = g_utf8_casefold(b_prof.name, -1 );
+ int result = g_strcmp0(a_name_casefold, b_name_casefold);
+ g_free(a_name_casefold);
+ g_free(b_name_casefold);
+ return result < 0;
+ }
+};
+
void DocumentProperties::populate_linked_profiles_box()
{
_LinkedProfilesListStore->clear();
@@ -536,7 +566,8 @@ void DocumentProperties::populate_linked_profiles_box()
if (! current.empty()) {
_emb_profiles_observer.set((*(current.begin()))->parent);
}
- for (std::vector<SPObject *>::const_iterator it = current.begin(); it != current.end(); ++it) {
+ std::set<SPObject *, _cmp> _current (current.begin(), current.end());
+ for (std::set<SPObject *, _cmp>::const_iterator it = _current.begin(); it != _current.end(); ++it) {
SPObject* obj = *it;
Inkscape::ColorProfile* prof = reinterpret_cast<Inkscape::ColorProfile*>(obj);
Gtk::TreeModel::Row row = *(_LinkedProfilesListStore->append());
@@ -629,6 +660,12 @@ void DocumentProperties::removeSelectedProfile(){
onColorProfileSelectRow();
}
+bool DocumentProperties::_AvailableProfilesList_separator(const Glib::RefPtr<Gtk::TreeModel>& model, const Gtk::TreeModel::iterator& iter)
+{
+ bool separator = (*iter)[_AvailableProfilesListColumns.separatorColumn];
+ return separator;
+}
+
void DocumentProperties::build_cms()
{
_page_cms->show();
@@ -694,9 +731,9 @@ void DocumentProperties::build_cms()
row++;
#if WITH_GTKMM_3_0
- _combo_avail.set_hexpand();
- _combo_avail.set_valign(Gtk::ALIGN_CENTER);
- _page_cms->table().attach(_combo_avail, 0, row, 1, 1);
+ _AvailableProfilesList.set_hexpand();
+ _AvailableProfilesList.set_valign(Gtk::ALIGN_CENTER);
+ _page_cms->table().attach(_AvailableProfilesList, 0, row, 1, 1);
_link_btn.set_halign(Gtk::ALIGN_CENTER);
_link_btn.set_valign(Gtk::ALIGN_CENTER);
@@ -708,11 +745,17 @@ void DocumentProperties::build_cms()
_unlink_btn.set_valign(Gtk::ALIGN_CENTER);
_page_cms->table().attach(_unlink_btn, 2, row, 1, 1);
#else
- _page_cms->table().attach(_combo_avail, 0, 1, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
+ _page_cms->table().attach(_AvailableProfilesList, 0, 1, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
_page_cms->table().attach(_link_btn, 1, 2, row, row + 1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0, 2, 0);
_page_cms->table().attach(_unlink_btn, 2, 3, row, row + 1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0, 0, 0);
#endif
+ // Set up the Avialable Profiles combo box
+ _AvailableProfilesListStore = Gtk::ListStore::create(_AvailableProfilesListColumns);
+ _AvailableProfilesList.set_model(_AvailableProfilesListStore);
+ _AvailableProfilesList.pack_start(_AvailableProfilesListColumns.nameColumn);
+ _AvailableProfilesList.set_row_separator_func(sigc::mem_fun(*this, &DocumentProperties::_AvailableProfilesList_separator));
+
populate_available_profiles();
//# Set up the Linked Profiles combo box
@@ -1693,7 +1736,7 @@ void DocumentProperties::onDocUnitChange()
// Disable changing of SVG Units. The intent here is to change the units in the UI, not the units in SVG.
// This code should be moved (and fixed) once we have an "SVG Units" setting that sets what units are used in SVG data.
-#if 0
+#if 0
// Set viewBox
if (doc->getRoot()->viewBox_set) {
gdouble scale = Inkscape::Util::Quantity::convert(1, old_doc_unit, doc_unit);
@@ -1703,12 +1746,12 @@ void DocumentProperties::onDocUnitChange()
Inkscape::Util::Quantity height = doc->getHeight();
doc->setViewBox(Geom::Rect::from_xywh(0, 0, width.value(doc_unit), height.value(doc_unit)));
}
-
+
// TODO: Fix bug in nodes tool instead of switching away from it
if (tools_active(getDesktop()) == TOOLS_NODES) {
tools_switch(getDesktop(), TOOLS_SELECT);
}
-
+
// Scale and translate objects
// set transform options to scale all things with the transform, so all things scale properly after the viewbox change.
/// \todo this "low-level" code of changing viewbox/unit should be moved somewhere else
@@ -1748,7 +1791,7 @@ void DocumentProperties::onDocUnitChange()
#endif
doc->setModifiedSinceSave();
-
+
DocumentUndo::done(doc, SP_VERB_NONE, _("Changed default display unit"));
}
diff --git a/src/ui/dialog/document-properties.h b/src/ui/dialog/document-properties.h
index 7340b67f5..7f91d9ea0 100644
--- a/src/ui/dialog/document-properties.h
+++ b/src/ui/dialog/document-properties.h
@@ -139,14 +139,26 @@ protected:
UI::Widget::RegisteredCheckButton _rcb_perp;
UI::Widget::RegisteredCheckButton _rcb_tang;
//---------------------------------------------------------------
- Gtk::ComboBoxText _combo_avail;
Gtk::Button _link_btn;
Gtk::Button _unlink_btn;
+ class AvailableProfilesColumns : public Gtk::TreeModel::ColumnRecord
+ {
+ public:
+ AvailableProfilesColumns()
+ { add(fileColumn); add(nameColumn); add(separatorColumn); }
+ Gtk::TreeModelColumn<Glib::ustring> fileColumn;
+ Gtk::TreeModelColumn<Glib::ustring> nameColumn;
+ Gtk::TreeModelColumn<bool> separatorColumn;
+ };
+ AvailableProfilesColumns _AvailableProfilesListColumns;
+ Glib::RefPtr<Gtk::ListStore> _AvailableProfilesListStore;
+ Gtk::ComboBox _AvailableProfilesList;
+ bool _AvailableProfilesList_separator(const Glib::RefPtr<Gtk::TreeModel>& model, const Gtk::TreeModel::iterator& iter);
class LinkedProfilesColumns : public Gtk::TreeModel::ColumnRecord
{
public:
LinkedProfilesColumns()
- { add(nameColumn); add(previewColumn); }
+ { add(nameColumn); add(previewColumn); }
Gtk::TreeModelColumn<Glib::ustring> nameColumn;
Gtk::TreeModelColumn<Glib::ustring> previewColumn;
};
@@ -218,7 +230,7 @@ private:
// callback methods for buttons on grids page.
void onNewGrid();
void onRemoveGrid();
-
+
// callback for document unit change
void onDocUnitChange();
};
diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp
index 30bbd95c9..6dd62d3bb 100644
--- a/src/ui/dialog/inkscape-preferences.cpp
+++ b/src/ui/dialog/inkscape-preferences.cpp
@@ -514,7 +514,7 @@ void InkscapePreferences::initPageTools()
this->AddPage(_page_dropper, _("Dropper"), iter_tools, PREFS_PAGE_TOOLS_DROPPER);
this->AddSelcueCheckbox(_page_dropper, "/tools/dropper", true);
this->AddGradientCheckbox(_page_dropper, "/tools/dropper", true);
-
+
//Connector
this->AddPage(_page_connector, _("Connector"), iter_tools, PREFS_PAGE_TOOLS_CONNECTOR);
this->AddSelcueCheckbox(_page_connector, "/tools/connector", true);
@@ -665,16 +665,16 @@ void InkscapePreferences::initPageUI()
_dockbar_style.init( "/options/dock/dockbarstyle", dockbarstyleLabels, dockbarstyleValues, G_N_ELEMENTS(dockbarstyleLabels), 0);
_page_ui.add_line(false, _("Dockbar style (requires restart):"), _dockbar_style, "",
_("Selects whether the vertical bars on the dockbar will show text labels, icons, or both"), false);
-
+
Glib::ustring switcherstyleLabels[] = {_("Text only"), _("Icons only"), _("Icons and text")}; /* see bug #1098437 */
int switcherstyleValues[] = {0, 1, 2};
-
+
/* switcher style */
_switcher_style.init( "/options/dock/switcherstyle", switcherstyleLabels, switcherstyleValues, G_N_ELEMENTS(switcherstyleLabels), 0);
_page_ui.add_line(false, _("Switcher style (requires restart):"), _switcher_style, "",
_("Selects whether the dockbar switcher will show text labels, icons, or both"), false);
}
-
+
// Windows
_win_save_geom.init ( _("Save and restore window geometry for each document"), "/options/savewindowgeometry/value", 1, true, 0);
_win_save_geom_prefs.init ( _("Remember and use last window's geometry"), "/options/savewindowgeometry/value", 2, false, &_win_save_geom);
@@ -689,7 +689,7 @@ void InkscapePreferences::initPageUI()
_win_native.init ( _("Native open/save dialogs"), "/options/desktopintegration/value", 1, true, 0);
_win_gtk.init ( _("GTK open/save dialogs"), "/options/desktopintegration/value", 0, false, &_win_native);
-
+
_win_hide_task.init ( _("Dialogs are hidden in taskbar"), "/options/dialogsskiptaskbar/value", true);
_win_save_viewport.init ( _("Save and restore documents viewport"), "/options/savedocviewport/value", true);
_win_zoom_resize.init ( _("Zoom when window is resized"), "/options/stickyzoom/value", false);
@@ -1005,9 +1005,9 @@ void InkscapePreferences::initPageIO()
_page_cms.add_group_header( _("Display adjustment"));
Glib::ustring tmpStr;
- std::vector<Glib::ustring> sources = ColorProfile::getBaseProfileDirs();
- for ( std::vector<Glib::ustring>::const_iterator it = sources.begin(); it != sources.end(); ++it ) {
- gchar* part = g_strdup_printf( "\n%s", it->c_str() );
+ std::vector<std::pair<Glib::ustring, bool> > sources = ColorProfile::getBaseProfileDirs();
+ for ( std::vector<std::pair<Glib::ustring, bool> >::const_iterator it = sources.begin(); it != sources.end(); ++it ) {
+ gchar* part = g_strdup_printf( "\n%s", it->first.c_str() );
tmpStr += part;
g_free(part);
}
@@ -1377,28 +1377,28 @@ void InkscapePreferences::initPageBehavior()
_mask_mask_remove.init ( _("Remove clippath/mask object after applying"), "/options/maskobject/remove", true);
_page_mask.add_line(false, "", _mask_mask_remove, "",
_("After applying, remove the object used as the clipping path or mask from the drawing"));
-
+
_page_mask.add_group_header( _("Before applying"));
-
+
_mask_grouping_none.init( _("Do not group clipped/masked objects"), "/options/maskobject/grouping", PREFS_MASKOBJECT_GROUPING_NONE, true, 0);
_mask_grouping_separate.init( _("Put every clipped/masked object in its own group"), "/options/maskobject/grouping", PREFS_MASKOBJECT_GROUPING_SEPARATE, false, &_mask_grouping_none);
_mask_grouping_all.init( _("Put all clipped/masked objects into one group"), "/options/maskobject/grouping", PREFS_MASKOBJECT_GROUPING_ALL, false, &_mask_grouping_none);
-
+
_page_mask.add_line(true, "", _mask_grouping_none, "",
_("Apply clippath/mask to every object"));
-
+
_page_mask.add_line(true, "", _mask_grouping_separate, "",
_("Apply clippath/mask to groups containing single object"));
-
+
_page_mask.add_line(true, "", _mask_grouping_all, "",
_("Apply clippath/mask to group containing all objects"));
-
+
_page_mask.add_group_header( _("After releasing"));
-
+
_mask_ungrouping.init ( _("Ungroup automatically created groups"), "/options/maskobject/ungrouping", true);
_page_mask.add_line(true, "", _mask_ungrouping, "",
_("Ungroup groups created when setting clip/mask"));
-
+
this->AddPage(_page_mask, _("Clippaths and masks"), iter_behavior, PREFS_PAGE_BEHAVIOR_MASKS);
@@ -1411,8 +1411,8 @@ void InkscapePreferences::initPageBehavior()
_("Update marker color when object color changes"));
this->AddPage(_page_markers, _("Markers"), iter_behavior, PREFS_PAGE_BEHAVIOR_MARKERS);
-
-
+
+
_page_cleanup.add_group_header( _("Document cleanup"));
_cleanup_swatches.init ( _("Remove unused swatches when doing a document cleanup"), "/options/cleanupswatches/value", false); // text label
_page_cleanup.add_line( true, "", _cleanup_swatches, "",
@@ -1896,15 +1896,15 @@ void InkscapePreferences::initPageSpellcheck()
/* the returned pointer should _not_ need to be deleted */
AspellDictInfoList *dlist = get_aspell_dict_info_list(config);
-
+
/* config is no longer needed */
delete_aspell_config(config);
-
+
AspellDictInfoEnumeration *dels = aspell_dict_info_list_elements(dlist);
-
+
languages.push_back(Glib::ustring(C_("Spellchecker language", "None")));
langValues.push_back(Glib::ustring(""));
-
+
const AspellDictInfo *entry;
int en_index = 0;
int i = 0;
diff --git a/src/ui/tool/node.cpp b/src/ui/tool/node.cpp
index d70147f80..9268d9730 100644
--- a/src/ui/tool/node.cpp
+++ b/src/ui/tool/node.cpp
@@ -526,7 +526,7 @@ Glib::ustring Handle::_getTip(unsigned state) const
snap_increment_degrees());
} else if(isBSpline){
return format_tip(C_("Path handle tip",
- "<b>Ctrl</b>: Move handle by his actual steps in BSpline Live Effect"));
+ "<b>Ctrl</b>: Snap handle to steps defined in BSpline Live Path Effect"));
}else{
return format_tip(C_("Path handle tip",
"<b>Ctrl</b>: snap rotation angle to %g° increments, click to retract"),
diff --git a/src/ui/tools/measure-tool.cpp b/src/ui/tools/measure-tool.cpp
index 287828d32..5900a2359 100644
--- a/src/ui/tools/measure-tool.cpp
+++ b/src/ui/tools/measure-tool.cpp
@@ -778,7 +778,7 @@ void MeasureTool::toPhantom()
measure_tmp_items.clear();
showCanvasItems(false, false, true);
doc->ensureUpToDate();
- DocumentUndo::done(desktop->getDocument(), SP_VERB_CONTEXT_MEASURE,_("Add Stored to measure tool"));
+ DocumentUndo::done(desktop->getDocument(), SP_VERB_CONTEXT_MEASURE,_("Keep last measure on the canvas, for reference"));
}
void MeasureTool::toItem()
diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp
index abac2c091..36fe26e76 100644
--- a/src/ui/tools/tool-base.cpp
+++ b/src/ui/tools/tool-base.cpp
@@ -683,6 +683,11 @@ bool ToolBase::root_handler(GdkEvent* event) {
}
break;
+ case GDK_KEY_Menu:
+ sp_event_root_menu_popup(desktop, NULL, event);
+ ret = TRUE;
+ break;
+
case GDK_KEY_F10:
if (MOD__SHIFT_ONLY(event)) {
sp_event_root_menu_popup(desktop, NULL, event);
diff --git a/src/ui/widget/color-icc-selector.cpp b/src/ui/widget/color-icc-selector.cpp
index 2e30a48b5..b422892fe 100644
--- a/src/ui/widget/color-icc-selector.cpp
+++ b/src/ui/widget/color-icc-selector.cpp
@@ -671,6 +671,20 @@ void ColorICCSelectorImpl::_switchToProfile(gchar const *name)
#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
+struct _cmp {
+ bool operator()(const SPObject * const & a, const SPObject * const & b)
+ {
+ const Inkscape::ColorProfile &a_prof = reinterpret_cast<const Inkscape::ColorProfile &>(*a);
+ const Inkscape::ColorProfile &b_prof = reinterpret_cast<const Inkscape::ColorProfile &>(*b);
+ gchar *a_name_casefold = g_utf8_casefold(a_prof.name, -1 );
+ gchar *b_name_casefold = g_utf8_casefold(b_prof.name, -1 );
+ int result = g_strcmp0(a_name_casefold, b_name_casefold);
+ g_free(a_name_casefold);
+ g_free(b_name_casefold);
+ return result < 0;
+ }
+};
+
void ColorICCSelectorImpl::_profilesChanged(std::string const &name)
{
GtkComboBox *combo = GTK_COMBO_BOX(_profileSel);
@@ -688,7 +702,8 @@ void ColorICCSelectorImpl::_profilesChanged(std::string const &name)
int index = 1;
std::vector<SPObject *> current = SP_ACTIVE_DOCUMENT->getResourceList("iccprofile");
- for (std::vector<SPObject *>::const_iterator it = current.begin(); it != current.end(); ++it) {
+ std::set<SPObject *, _cmp> _current(current.begin(), current.end());
+ for (std::set<SPObject *, _cmp>::const_iterator it = _current.begin(); it != _current.end(); ++it) {
SPObject *obj = *it;
Inkscape::ColorProfile *prof = reinterpret_cast<Inkscape::ColorProfile *>(obj);