From 99f1284fda2bed050c1f8deef702aac61f4e6fe6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20R=C4=99korajski?= Date: Fri, 2 Apr 2021 17:29:24 +0200 Subject: [PATCH] - up to 1.0.2 --- gcc11.patch | 289 +++++++++++++++++++++++++++++++++++++++++++ glib-extern.patch | 19 +++ inkscape.spec | 14 ++- missing-atomic.patch | 19 +++ 4 files changed, 337 insertions(+), 4 deletions(-) create mode 100644 gcc11.patch create mode 100644 glib-extern.patch create mode 100644 missing-atomic.patch diff --git a/gcc11.patch b/gcc11.patch new file mode 100644 index 0000000..794fc70 --- /dev/null +++ b/gcc11.patch @@ -0,0 +1,289 @@ +diff --git a/src/extension/system.cpp b/src/extension/system.cpp +index 08de0b4..418f5ba 100644 +--- a/src/extension/system.cpp ++++ b/src/extension/system.cpp +@@ -174,7 +174,7 @@ open_internal(Extension *in_plug, gpointer in_data) + // skip all the rest if we already found a function to open it + // since they're ordered by preference now. + if (!*pimod) { +- gchar const *ext = dynamic_cast(in_plug)->get_extension(); ++ gchar const *ext = dynamic_cast(*in_plug).get_extension(); + + gchar *filenamelower = g_utf8_strdown(filename, -1); + gchar *extensionlower = g_utf8_strdown(ext, -1); +@@ -384,7 +384,7 @@ save_internal(Extension *in_plug, gpointer in_data) + // skip all the rest if we already found someone to save it + // since they're ordered by preference now. + if (!*pomod) { +- gchar const *ext = dynamic_cast(in_plug)->get_extension(); ++ gchar const *ext = dynamic_cast(*in_plug).get_extension(); + + gchar *filenamelower = g_utf8_strdown(filename, -1); + gchar *extensionlower = g_utf8_strdown(ext, -1); +diff --git a/src/object/object-set.cpp b/src/object/object-set.cpp +index bf41bb0..dafa2c1 100644 +--- a/src/object/object-set.cpp ++++ b/src/object/object-set.cpp +@@ -242,7 +242,7 @@ void ObjectSet::set(SPObject *object, bool persist_selection_context) { + _clear(); + _add(object); + if(dynamic_cast(this)) +- return dynamic_cast(this)->_emitChanged(persist_selection_context); ++ return dynamic_cast(*this)._emitChanged(persist_selection_context); + } + + void ObjectSet::setReprList(std::vector const &list) { +@@ -257,7 +257,7 @@ void ObjectSet::setReprList(std::vector const &list) { + } + _emitSignals(); + if(dynamic_cast(this)) +- return dynamic_cast(this)->_emitChanged();// ++ return dynamic_cast(*this)._emitChanged();// + } + + +diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp +index 88c5d8d..c4c3788 100644 +--- a/src/selection-chemistry.cpp ++++ b/src/selection-chemistry.cpp +@@ -680,7 +680,7 @@ static void sp_edit_select_all_full(SPDesktop *dt, bool force_all_layers, bool i + + switch (inlayer) { + case PREFS_SELECTION_LAYER: { +- if ( (onlysensitive && dynamic_cast(dt->currentLayer())->isLocked()) || ++ if ( (onlysensitive && dynamic_cast(*dt->currentLayer()).isLocked()) || + (onlyvisible && dt->itemIsHidden(dynamic_cast(dt->currentLayer()))) ) + return; + +@@ -775,7 +775,7 @@ Inkscape::XML::Node* ObjectSet::group() { + Geom::Affine item_t(Geom::identity()); + if (t_str) + sp_svg_transform_read(t_str, &item_t); +- item_t *= dynamic_cast(doc->getObjectByRepr(current->parent()))->i2doc_affine(); ++ item_t *= dynamic_cast(*doc->getObjectByRepr(current->parent())).i2doc_affine(); + // FIXME: when moving both clone and original from a transformed group (either by + // grouping into another parent, or by cut/paste) the transform from the original's + // parent becomes embedded into original itself, and this affects its clones. Fix +@@ -869,7 +869,7 @@ static void ungroup_impl(ObjectSet *set) + + SPItem *original = use; + while (dynamic_cast(original)) { +- original = dynamic_cast(original)->get_original(); ++ original = dynamic_cast(*original).get_original(); + } + + if (groups.find(original) != groups.end()) { +@@ -1651,7 +1651,8 @@ void ObjectSet::applyAffine(Geom::Affine const &affine, bool set_i2d, bool compe + && includes( sp_textpath_get_path_item(dynamic_cast(item->firstChild())) )); + + // ...both a flowtext and its frame? +- bool transform_flowtext_with_frame = (dynamic_cast(item) && includes( dynamic_cast(item)->get_frame(nullptr))); // (only the first frame is checked so far) ++ bool transform_flowtext_with_frame = (dynamic_cast(item) && includes( ++dynamic_cast(*item).get_frame(nullptr))); // (only the first frame is checked so far) + + // ...both an offset and its source? + bool transform_offset_with_source = (dynamic_cast(item) && dynamic_cast(item)->sourceHref) && includes( sp_offset_get_source(dynamic_cast(item)) ); +@@ -2048,19 +2049,21 @@ std::vector sp_get_same_fill_or_stroke_color(SPItem *sel, std::vectorstyle->getFillPaintServer() : iter->style->getStrokePaintServer(); + + if ((dynamic_cast(sel_server) || dynamic_cast(sel_server) || +- (dynamic_cast(sel_server) && dynamic_cast(sel_server)->getVector()->isSwatch())) ++ (dynamic_cast(sel_server) && dynamic_cast(*sel_server).getVector()->isSwatch())) + && + (dynamic_cast(iter_server) || dynamic_cast(iter_server) || +- (dynamic_cast(iter_server) && dynamic_cast(iter_server)->getVector()->isSwatch()))) { +- SPGradient *sel_vector = dynamic_cast(sel_server)->getVector(); +- SPGradient *iter_vector = dynamic_cast(iter_server)->getVector(); ++ (dynamic_cast(iter_server) && dynamic_cast(*iter_server).getVector()->isSwatch()))) { ++ SPGradient *sel_vector = dynamic_cast(*sel_server).getVector(); ++ SPGradient *iter_vector = dynamic_cast(*iter_server).getVector(); + if (sel_vector == iter_vector) { + match = true; + } + + } else if (dynamic_cast(sel_server) && dynamic_cast(iter_server)) { +- SPPattern *sel_pat = dynamic_cast(sel_server)->rootPattern(); +- SPPattern *iter_pat = dynamic_cast(iter_server)->rootPattern(); ++ SPPattern *sel_pat = dynamic_cast(*sel_server).rootPattern(); ++ SPPattern *iter_pat = dynamic_cast(*iter_server).rootPattern(); + if (sel_pat == iter_pat) { + match = true; + } +diff --git a/src/text-chemistry.cpp b/src/text-chemistry.cpp +index 151be25..cce1642 100644 +--- a/src/text-chemistry.cpp ++++ b/src/text-chemistry.cpp +@@ -134,7 +134,7 @@ text_put_on_path() + + if (SP_IS_TEXT(text)) { + // Replace any new lines (including sodipodi:role="line") by spaces. +- dynamic_cast(text)->remove_newlines(); ++ dynamic_cast(*text).remove_newlines(); + } + + Inkscape::Text::Layout const *layout = te_get_layout(text); +diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp +index cca4172..fe9638e 100644 +--- a/src/ui/clipboard.cpp ++++ b/src/ui/clipboard.cpp +@@ -334,7 +334,7 @@ void ClipboardManagerImpl::copySymbol(Inkscape::XML::Node* symbol, gchar const* + SPObject *cmobj = _clipboardSPDoc->getObjectByRepr(repr); + if (cmobj && !user_symbol) { // convert only stock symbols + if (!Geom::are_near(scale_units, 1.0, Geom::EPSILON)) { +- dynamic_cast(cmobj)->scaleChildItemsRec( ++ dynamic_cast(*cmobj).scaleChildItemsRec( + Geom::Scale(scale_units), Geom::Point(0, SP_ACTIVE_DESKTOP->getDocument()->getHeight().value("px")), + false); + } +diff --git a/src/ui/dialog/filedialogimpl-gtkmm.cpp b/src/ui/dialog/filedialogimpl-gtkmm.cpp +index 5874cac..f119c81 100644 +--- a/src/ui/dialog/filedialogimpl-gtkmm.cpp ++++ b/src/ui/dialog/filedialogimpl-gtkmm.cpp +@@ -639,7 +639,7 @@ void FileSaveDialogImplGtk::fileNameChanged() { + Glib::ustring::size_type pos = name.rfind('.'); + if ( pos == Glib::ustring::npos ) return; + Glib::ustring ext = name.substr( pos ).casefold(); +- if (extension && Glib::ustring(dynamic_cast(extension)->get_extension()).casefold() == ext ) return; ++ if (extension && Glib::ustring(dynamic_cast(*extension).get_extension()).casefold() == ext ) return; + if (knownExtensions.find(ext) == knownExtensions.end()) return; + fromCB = true; + fileTypeComboBox.set_active_text(knownExtensions[ext]->get_filetypename(true)); +diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp +index 9b1e130..d1e8efd 100644 +--- a/src/ui/dialog/filter-effects-dialog.cpp ++++ b/src/ui/dialog/filter-effects-dialog.cpp +@@ -477,8 +477,8 @@ private: + + for(int i = 0; i < cols; ++i) { + _tree.append_column_numeric_editable("", _columns.cols[i], "%.2f"); +- dynamic_cast( +- _tree.get_column_cell_renderer(i))->signal_edited().connect( ++ dynamic_cast( ++ *_tree.get_column_cell_renderer(i)).signal_edited().connect( + sigc::mem_fun(*this, &MatrixAttr::rebind)); + } + +@@ -575,7 +575,7 @@ public: + if(w == &_label) + return ""; + else +- return dynamic_cast(w)->get_as_attribute(); ++ return dynamic_cast(*w).get_as_attribute(); + } + + void clear_store() +@@ -2571,7 +2571,7 @@ void FilterEffectsDialog::PrimitiveList::on_drag_end(const Glib::RefPtr(get_parent())->get_vadjustment(); ++ auto a = dynamic_cast(*get_parent()).get_vadjustment(); + double v = a->get_value() + _autoscroll_y; + + if(v < 0) +@@ -2586,7 +2586,7 @@ bool FilterEffectsDialog::PrimitiveList::on_scroll_timeout() + + + if(_autoscroll_x) { +- auto a_h = dynamic_cast(get_parent())->get_hadjustment(); ++ auto a_h = dynamic_cast(*get_parent()).get_hadjustment(); + double h = a_h->get_value() + _autoscroll_x; + + if(h < 0) +diff --git a/src/ui/dialog/paint-servers.cpp b/src/ui/dialog/paint-servers.cpp +index ec49312..2c6852f 100644 +--- a/src/ui/dialog/paint-servers.cpp ++++ b/src/ui/dialog/paint-servers.cpp +@@ -283,7 +283,7 @@ Glib::RefPtr PaintServersDialog::get_pixbuf(SPDocument *document, G + preview_document->getRoot()->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); + preview_document->ensureUpToDate(); + +- Geom::OptRect dbox = dynamic_cast(rect)->visualBounds(); ++ Geom::OptRect dbox = dynamic_cast(*rect).visualBounds(); + + if (!dbox) { + return pixbuf; +diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp +index 000f7ba..0c4bce9 100644 +--- a/src/ui/dialog/svg-fonts-dialog.cpp ++++ b/src/ui/dialog/svg-fonts-dialog.cpp +@@ -826,13 +826,13 @@ Gtk::VBox* SvgFontsDialog::glyphs_tab(){ + glyph_from_path_button.set_label(_("Get curves from selection...")); + glyph_from_path_button.signal_clicked().connect(sigc::mem_fun(*this, &SvgFontsDialog::set_glyph_description_from_selected_path)); + +- dynamic_cast( _GlyphsList.get_column_cell_renderer(0))->signal_edited().connect( ++ dynamic_cast( *_GlyphsList.get_column_cell_renderer(0)).signal_edited().connect( + sigc::mem_fun(*this, &SvgFontsDialog::glyph_name_edit)); + +- dynamic_cast( _GlyphsList.get_column_cell_renderer(1))->signal_edited().connect( ++ dynamic_cast( *_GlyphsList.get_column_cell_renderer(1)).signal_edited().connect( + sigc::mem_fun(*this, &SvgFontsDialog::glyph_unicode_edit)); + +- dynamic_cast( _GlyphsList.get_column_cell_renderer(2))->signal_edited().connect( ++ dynamic_cast( *_GlyphsList.get_column_cell_renderer(2)).signal_edited().connect( + sigc::mem_fun(*this, &SvgFontsDialog::glyph_advance_edit)); + + _glyphs_observer.signal_changed().connect(sigc::mem_fun(*this, &SvgFontsDialog::update_glyphs)); +diff --git a/src/ui/widget/ink-flow-box.cpp b/src/ui/widget/ink-flow-box.cpp +index 8485dd9..4b1ebe2 100644 +--- a/src/ui/widget/ink-flow-box.cpp ++++ b/src/ui/widget/ink-flow-box.cpp +@@ -72,7 +72,7 @@ void InkFlowBox::on_toggle(gint pos, Gtk::ToggleButton *tbutton) + bool active = true; + for (auto child : tbutton->get_parent()->get_children()) { + if (tbutton != child) { +- dynamic_cast(child)->set_active(active); ++ dynamic_cast(*child).set_active(active); + active = false; + } + } +@@ -97,7 +97,7 @@ void InkFlowBox::on_global_toggle(Gtk::ToggleButton *tbutton) + bool active = true; + for (auto child : tbutton->get_parent()->get_children()) { + if (tbutton != child) { +- dynamic_cast(child)->set_active(active); ++ dynamic_cast(*child).set_active(active); + active = false; + } + } +diff --git a/src/ui/widget/spin-button-tool-item.cpp b/src/ui/widget/spin-button-tool-item.cpp +index b283939..b8c639c 100644 +--- a/src/ui/widget/spin-button-tool-item.cpp ++++ b/src/ui/widget/spin-button-tool-item.cpp +@@ -207,7 +207,7 @@ SpinButtonToolItem::process_tab(int increment) + if(dynamic_cast(tool_item)) { + // (1) The tool item is a SpinButtonToolItem, in which case, we just pass + // focus to its spin-button +- dynamic_cast(tool_item)->grab_button_focus(); ++ dynamic_cast(*tool_item).grab_button_focus(); + handled = true; + } + else if(dynamic_cast(tool_item->get_child())) { +diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp +index ebeb8ca..c25a217 100644 +--- a/src/widgets/desktop-widget.cpp ++++ b/src/widgets/desktop-widget.cpp +@@ -1848,7 +1848,7 @@ void SPDesktopWidget::namedviewModified(SPObject *obj, guint flags) + std::vector ch = Glib::wrap(GTK_CONTAINER(aux_toolbox))->get_children(); + for (auto i:ch) { + if (GTK_IS_CONTAINER(i->gobj())) { +- std::vector grch = dynamic_cast(i)->get_children(); ++ std::vector grch = dynamic_cast(*i).get_children(); + for (auto j:grch) { + + if (!GTK_IS_WIDGET(j->gobj())) // wasn't a widget +diff --git a/src/xml/repr-io.cpp b/src/xml/repr-io.cpp +index ac9794e..fc08250 100644 +--- a/src/xml/repr-io.cpp ++++ b/src/xml/repr-io.cpp +@@ -912,7 +912,7 @@ void sp_repr_write_stream( Node *repr, Writer &out, gint indent_level, + { + switch (repr->type()) { + case Inkscape::XML::TEXT_NODE: { +- if( dynamic_cast(repr)->is_CData() ) { ++ if( dynamic_cast(*repr).is_CData() ) { + // Preserve CDATA sections, not converting '&' to &, etc. + out.printf( "", repr->content() ); + } else { diff --git a/glib-extern.patch b/glib-extern.patch new file mode 100644 index 0000000..250c375 --- /dev/null +++ b/glib-extern.patch @@ -0,0 +1,19 @@ +diff -up inkscape-1.0.1_2020-09-07_3bc2e813f5/src/3rdparty/autotrace/autotrace.h.glib-extern inkscape-1.0.1_2020-09-07_3bc2e813f5/src/3rdparty/autotrace/autotrace.h +--- inkscape-1.0.1_2020-09-07_3bc2e813f5/src/3rdparty/autotrace/autotrace.h.glib-extern 2021-02-16 12:59:00.917852141 +0100 ++++ inkscape-1.0.1_2020-09-07_3bc2e813f5/src/3rdparty/autotrace/autotrace.h 2021-02-16 12:59:06.675894640 +0100 +@@ -22,6 +22,7 @@ + #define AUTOTRACE_H + + #include ++#include "types.h" + + #ifdef __cplusplus + extern "C" { +@@ -35,7 +36,6 @@ extern "C" { + * Typedefs + * ===================================================================== */ + +-#include "types.h" + #include "color.h" + + /* Third degree is the highest we deal with. */ diff --git a/inkscape.spec b/inkscape.spec index ecb6486..203b438 100644 --- a/inkscape.spec +++ b/inkscape.spec @@ -8,13 +8,16 @@ Summary: Scalable vector graphics editor Summary(pl.UTF-8): Edytor skalowalnej grafiki wektorowej Name: inkscape -Version: 1.0.1 -Release: 3 +Version: 1.0.2 +Release: 1 License: GPL v2+, LGPL v2.1+ Group: X11/Applications/Graphics # download: follow https://inkscape.org/release/ Source0: https://media.inkscape.org/dl/resources/file/%{name}-%{version}.tar.xz -# Source0-md5: daefc5212b72e49eff41a7681fd5e993 +# Source0-md5: ec90e0c1e4c7e3dba8f46b16c73462b3 +Patch0: gcc11.patch +Patch1: glib-extern.patch +Patch2: missing-atomic.patch URL: https://inkscape.org/ %{!?with_imagick:BuildRequires: GraphicsMagick-c++-devel} %{?with_imagick:BuildRequires: ImageMagick6-c++-devel < 7} @@ -106,7 +109,10 @@ Bash completion for inkscape arguments. Bashowe dopełnianie argumentów programu inkscape. %prep -%setup -q -n %{name}-%{version}_2020-09-07_3bc2e813f5 +%setup -q -n %{name}-%{version}_2021-01-15_e86c870879 +%patch0 -p1 +%patch1 -p1 +%patch2 -p1 %{__sed} -E -i -e '1s,#!\s*/usr/bin/env\s+python2(\s|$),#!%{__python}\1,' -e '1s,#!\s*/usr/bin/env\s+python(\s|$),#!%{__python}\1,' -e '1s,#!\s*/usr/bin/python(\s|$),#!%{__python}\1,' \ CMakeScripts/cmake_consistency_check.py \ diff --git a/missing-atomic.patch b/missing-atomic.patch new file mode 100644 index 0000000..cfbd8ef --- /dev/null +++ b/missing-atomic.patch @@ -0,0 +1,19 @@ +diff -up inkscape-1.0.1_2020-09-07_3bc2e813f5/src/ui/tool/node.cpp.missing-atomic inkscape-1.0.1_2020-09-07_3bc2e813f5/src/ui/tool/node.cpp +--- inkscape-1.0.1_2020-09-07_3bc2e813f5/src/ui/tool/node.cpp.missing-atomic 2021-02-16 13:35:58.455184020 +0100 ++++ inkscape-1.0.1_2020-09-07_3bc2e813f5/src/ui/tool/node.cpp 2021-02-16 13:36:11.411279411 +0100 +@@ -10,6 +10,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -31,6 +32,7 @@ + #include "ui/tools/node-tool.h" + #include "ui/tools-switch.h" + ++ + namespace { + + Inkscape::ControlType nodeTypeToCtrlType(Inkscape::UI::NodeType type) -- 2.43.0