diff options
| author | Nathan Lee <2431820-nathanal@users.noreply.gitlab.com> | 2019-10-10 11:05:48 +0000 |
|---|---|---|
| committer | Nathan Lee <2431820-nathanal@users.noreply.gitlab.com> | 2019-10-11 11:21:28 +0000 |
| commit | 487f0940377b4fbf9ebae8ab2a53f2f992e60deb (patch) | |
| tree | 00ffcad1a7ebd3d958ec76f117f4e67457c4caed /src | |
| parent | Remove warnings of unhandled items on Mac check menu items, thanks to Nathan ... (diff) | |
| download | inkscape-487f0940377b4fbf9ebae8ab2a53f2f992e60deb.tar.gz inkscape-487f0940377b4fbf9ebae8ab2a53f2f992e60deb.zip | |
Reduce memory leak on editing text, etc.
Diffstat (limited to 'src')
| -rw-r--r-- | src/inkscape.cpp | 11 | ||||
| -rw-r--r-- | src/libnrtype/FontInstance.cpp | 2 | ||||
| -rw-r--r-- | src/libnrtype/font-lister.cpp | 20 | ||||
| -rw-r--r-- | src/style-internal.cpp | 2 | ||||
| -rw-r--r-- | src/ui/toolbar/text-toolbar.cpp | 6 | ||||
| -rw-r--r-- | src/ui/widget/color-icc-selector.cpp | 4 | ||||
| -rw-r--r-- | src/ui/widget/combo-box-entry-tool-item.cpp | 3 | ||||
| -rw-r--r-- | src/ui/widget/combo-tool-item.cpp | 4 | ||||
| -rw-r--r-- | src/widgets/paint-selector.cpp | 23 | ||||
| -rw-r--r-- | src/widgets/toolbox.cpp | 4 |
10 files changed, 55 insertions, 24 deletions
diff --git a/src/inkscape.cpp b/src/inkscape.cpp index f76ea3c22..030072df8 100644 --- a/src/inkscape.cpp +++ b/src/inkscape.cpp @@ -558,9 +558,9 @@ void Application::add_gtk_css() // Add style sheet (GTK3) auto const screen = Gdk::Screen::get_default(); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - const gchar *gtk_font_name = ""; - const gchar *gtkThemeName; - const gchar *gtkIconThemeName; + gchar *gtk_font_name = nullptr; + gchar *gtkThemeName = nullptr; + gchar *gtkIconThemeName = nullptr; Glib::ustring themeiconname; gboolean gtkApplicationPreferDarkTheme; GtkSettings *settings = gtk_settings_get_default(); @@ -587,6 +587,8 @@ void Application::add_gtk_css() g_object_get(settings, "gtk-font-name", >k_font_name, NULL); } + g_free(gtkThemeName); + g_free(gtkIconThemeName); Glib::ustring style = get_filename(UIS, "style.css"); if (!style.empty()) { @@ -613,7 +615,7 @@ void Application::add_gtk_css() } Gtk::StyleContext::add_provider_for_screen(screen, colorizeprovider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); - if (!strncmp(gtk_font_name, "Cantarell", 9)) { + if (gtk_font_name && !strncmp(gtk_font_name, "Cantarell", 9)) { auto provider = Gtk::CssProvider::create(); css_str = "#monoStrokeWidth,"; css_str += "#fillEmptySpace,"; @@ -631,6 +633,7 @@ void Application::add_gtk_css() } Gtk::StyleContext::add_provider_for_screen(screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } + g_free(gtk_font_name); } void Application::readStyleSheets(bool forceupd) diff --git a/src/libnrtype/FontInstance.cpp b/src/libnrtype/FontInstance.cpp index 4204bcd11..e0fa2bec8 100644 --- a/src/libnrtype/FontInstance.cpp +++ b/src/libnrtype/FontInstance.cpp @@ -958,6 +958,7 @@ void font_instance::FindFontMetrics() { // std::cout << "Math baseline: - bbox: y_min: " << acbox.yMin // << " y_max: " << acbox.yMax // << " math: " << math << std::endl; + FT_Done_Glyph(aglyph); } // Find hanging baseline... assume it is at top of 'म'. @@ -971,6 +972,7 @@ void font_instance::FindFontMetrics() { double hanging = (double)acbox.yMax/(double)theFace->units_per_EM; _baselines[ SP_CSS_BASELINE_HANGING ] = hanging; // std::cout << "Hanging baseline: प: " << hanging << std::endl; + FT_Done_Glyph(aglyph); } } #endif diff --git a/src/libnrtype/font-lister.cpp b/src/libnrtype/font-lister.cpp index 984741adc..30283e624 100644 --- a/src/libnrtype/font-lister.cpp +++ b/src/libnrtype/font-lister.cpp @@ -411,7 +411,10 @@ void FontLister::update_font_data_recursive(SPObject& r, std::map<Glib::ustring, if (font_family_char) { Glib::ustring font_family(font_family_char); pango_font_description_unset_fields( descr, PANGO_FONT_MASK_FAMILY); - Glib::ustring font_style = pango_font_description_to_string(descr); + + gchar* font_style_char = pango_font_description_to_string(descr); + Glib::ustring font_style(font_style_char); + g_free(font_style_char); if (!font_family.empty() && !font_style.empty()) { font_data[font_family].insert(font_style); @@ -908,6 +911,7 @@ void FontLister::fill_css(SPCSSAttr *css, Glib::ustring fontspec) sp_repr_css_unset_property(css, "font-variation-settings" ); } #endif + pango_font_description_free(desc); } @@ -1130,7 +1134,9 @@ gboolean font_lister_separator_func2(GtkTreeModel *model, GtkTreeIter *iter, gpo { gchar *text = nullptr; gtk_tree_model_get(model, iter, 0, &text, -1); // Column 0: FontList.family - return (text && strcmp(text, "#") == 0); + bool result = (text && strcmp(text, "#") == 0); + g_free(text); + return result; } // Draw system fonts in dark blue, missing fonts with red strikeout. @@ -1153,7 +1159,6 @@ void font_lister_cell_data_func2(GtkCellLayout * /*cell_layout*/, gboolean onSystem = false; gtk_tree_model_get(model, iter, 0, &family, 2, &onSystem, -1); gchar* family_escaped = g_markup_escape_text(family, -1); - //g_free(family); Glib::ustring markup; if (!onSystem) { @@ -1165,18 +1170,20 @@ void font_lister_cell_data_func2(GtkCellLayout * /*cell_layout*/, GtkTreeIter iter; gboolean valid; - gchar *family = nullptr; gboolean onSystem = true; gboolean found = false; for (valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter); valid; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter)) { - gtk_tree_model_get(model, &iter, 0, &family, 2, &onSystem, -1); - if (onSystem && familyNamesAreEqual(token, family)) { + gchar *token_family = nullptr; + gtk_tree_model_get(model, &iter, 0, &token_family, 2, &onSystem, -1); + if (onSystem && familyNamesAreEqual(token, token_family)) { found = true; + g_free(token_family); break; } + g_free(token_family); } if (found) { markup += g_markup_escape_text(token.c_str(), -1); @@ -1214,6 +1221,7 @@ void font_lister_cell_data_func2(GtkCellLayout * /*cell_layout*/, } g_object_set(G_OBJECT(cell), "markup", markup.c_str(), NULL); + g_free(family); g_free(family_escaped); } diff --git a/src/style-internal.cpp b/src/style-internal.cpp index 939d63e53..a1b2afd3d 100644 --- a/src/style-internal.cpp +++ b/src/style-internal.cpp @@ -1059,7 +1059,7 @@ SPIString::clear() { SPIBase::clear(); g_free( value ); value = nullptr; - if( value_default ) value = strdup( value_default ); + if( value_default ) value = g_strdup( value_default ); } void diff --git a/src/ui/toolbar/text-toolbar.cpp b/src/ui/toolbar/text-toolbar.cpp index 2488d8ec7..f2cf73257 100644 --- a/src/ui/toolbar/text-toolbar.cpp +++ b/src/ui/toolbar/text-toolbar.cpp @@ -212,7 +212,9 @@ namespace Toolbar { TextToolbar::TextToolbar(SPDesktop *desktop) : Toolbar(desktop) , _freeze(false) + , _text_style_from_prefs(false) , _outer(true) + , _updating(false) , _tracker(new UnitTracker(Inkscape::Util::UNIT_TYPE_LINEAR)) , _tracker_fs(new UnitTracker(Inkscape::Util::UNIT_TYPE_LINEAR)) , _cusor_numbers(0) @@ -657,7 +659,9 @@ TextToolbar::fontfamily_value_changed() } _freeze = true; - Glib::ustring new_family = _font_family_item->get_active_text(); + gchar *temp_family = _font_family_item->get_active_text(); + Glib::ustring new_family(temp_family); + g_free(temp_family); css_font_family_unquote( new_family ); // Remove quotes around font family names. // TODO: Think about how to handle handle multiple selections. While diff --git a/src/ui/widget/color-icc-selector.cpp b/src/ui/widget/color-icc-selector.cpp index 4862d6d03..31006052b 100644 --- a/src/ui/widget/color-icc-selector.cpp +++ b/src/ui/widget/color-icc-selector.cpp @@ -537,9 +537,7 @@ void ColorICCSelectorImpl::_profileSelected(GtkWidget * /*src*/, gpointer data) self->_switchToProfile(name); gtk_widget_set_tooltip_text(self->_profileSel, name); - if (name) { - g_free(name); - } + g_free(name); } } #endif // defined(HAVE_LIBLCMS2) diff --git a/src/ui/widget/combo-box-entry-tool-item.cpp b/src/ui/widget/combo-box-entry-tool-item.cpp index f3786c6f6..11dd8459d 100644 --- a/src/ui/widget/combo-box-entry-tool-item.cpp +++ b/src/ui/widget/combo-box-entry-tool-item.cpp @@ -475,6 +475,7 @@ ComboBoxEntryToolItem::get_active_row_from_text(ComboBoxEntryToolItem *action, // Case sensitive compare if( strcmp( target_text, text ) == 0 ){ found = true; + g_free(text); break; } } else { @@ -486,9 +487,11 @@ ComboBoxEntryToolItem::get_active_row_from_text(ComboBoxEntryToolItem *action, g_free( target_text_casefolded ); if( equal ) { found = true; + g_free(text); break; } } + g_free(text); } ++row; diff --git a/src/ui/widget/combo-tool-item.cpp b/src/ui/widget/combo-tool-item.cpp index 5e07efdf1..e9eee059d 100644 --- a/src/ui/widget/combo-tool-item.cpp +++ b/src/ui/widget/combo-tool-item.cpp @@ -126,12 +126,12 @@ ComboToolItem::populate_combobox() } Gtk::CellRendererPixbuf *renderer = new Gtk::CellRendererPixbuf; renderer->set_property ("stock_size", Gtk::ICON_SIZE_LARGE_TOOLBAR); - _combobox->pack_start (*renderer, false); + _combobox->pack_start (*Gtk::manage(renderer), false); _combobox->add_attribute (*renderer, "icon_name", columns.col_icon ); } else if (_use_pixbuf) { Gtk::CellRendererPixbuf *renderer = new Gtk::CellRendererPixbuf; //renderer->set_property ("stock_size", Gtk::ICON_SIZE_LARGE_TOOLBAR); - _combobox->pack_start (*renderer, false); + _combobox->pack_start (*Gtk::manage(renderer), false); _combobox->add_attribute (*renderer, "pixbuf", columns.col_pixbuf ); } diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp index e1a6c2b5b..e80951928 100644 --- a/src/widgets/paint-selector.cpp +++ b/src/widgets/paint-selector.cpp @@ -963,6 +963,8 @@ void SPPaintSelector::updateMeshList( SPMeshGradient *mesh ) gtk_tree_model_get (store, &iter, COMBO_COL_MESH, &meshid, -1); while (valid && strcmp(meshid, meshname) != 0) { valid = gtk_tree_model_iter_next (store, &iter); + g_free(meshid); + meshid = nullptr; gtk_tree_model_get (store, &iter, COMBO_COL_MESH, &meshid, -1); } @@ -971,6 +973,7 @@ void SPPaintSelector::updateMeshList( SPMeshGradient *mesh ) } g_object_set_data(G_OBJECT(combo), "update", GINT_TO_POINTER(FALSE)); + g_free(meshid); } } @@ -1068,9 +1071,11 @@ SPMeshGradient *SPPaintSelector::getMeshGradient() gchar *meshid = nullptr; gboolean stockid = FALSE; - gchar *label = nullptr; - gtk_tree_model_get (store, &iter, COMBO_COL_LABEL, &label, COMBO_COL_STOCK, &stockid, COMBO_COL_MESH, &meshid, -1); + // gchar *label = nullptr; + gtk_tree_model_get (store, &iter, COMBO_COL_STOCK, &stockid, COMBO_COL_MESH, &meshid, -1); + // gtk_tree_model_get (store, &iter, COMBO_COL_LABEL, &label, COMBO_COL_STOCK, &stockid, COMBO_COL_MESH, &meshid, -1); // std::cout << " .. meshid: " << (meshid?meshid:"null") << " label: " << (label?label:"null") << std::endl; + // g_free(label); if (meshid == nullptr) { return nullptr; } @@ -1090,11 +1095,12 @@ SPMeshGradient *SPPaintSelector::getMeshGradient() mesh = SP_MESHGRADIENT(mesh_obj); } g_free(mesh_name); - } else { std::cerr << "SPPaintSelector::getMeshGradient: Unexpected meshid value." << std::endl; } + g_free(meshid); + return mesh; } @@ -1298,8 +1304,11 @@ void SPPaintSelector::updatePatternList( SPPattern *pattern ) gtk_tree_model_get (store, &iter, COMBO_COL_PATTERN, &patid, -1); while (valid && strcmp(patid, patname) != 0) { valid = gtk_tree_model_iter_next (store, &iter); + g_free(patid); + patid = nullptr; gtk_tree_model_get (store, &iter, COMBO_COL_PATTERN, &patid, -1); } + g_free(patid); if (valid) { gtk_combo_box_set_active_iter(GTK_COMBO_BOX(combo), &iter); @@ -1433,12 +1442,12 @@ SPPattern *SPPaintSelector::getPattern() gchar *patid = nullptr; gboolean stockid = FALSE; - gchar *label = nullptr; + // gchar *label = nullptr; gtk_tree_model_get(store, &iter, - COMBO_COL_LABEL, &label, + // COMBO_COL_LABEL, &label, COMBO_COL_STOCK, &stockid, COMBO_COL_PATTERN, &patid, -1); - + // g_free(label); if (patid == nullptr) { return nullptr; } @@ -1465,6 +1474,8 @@ SPPattern *SPPaintSelector::getPattern() } } + g_free(patid); + return pat; } diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index fc5bad47a..365c0a76f 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -727,7 +727,9 @@ void update_aux_toolbox(SPDesktop * /*desktop*/, ToolBase *eventcontext, GtkWidg gchar const *tname = ( eventcontext ? eventcontext->getPrefsPath().c_str() //g_type_name(G_OBJECT_TYPE(eventcontext)) : nullptr ); - GtkWidget *stack = (GtkWidget *)gtk_container_get_children((GtkContainer *)toolbox)->data; + GList *list = gtk_container_get_children((GtkContainer *)toolbox); + GtkWidget *stack = (GtkWidget *)list->data; + g_list_free(list); gtk_stack_set_visible_child_name((GtkStack *)stack, tname); } |
