From 54d4e8e0f6ce402ee11eafef0d4245fb091becf2 Mon Sep 17 00:00:00 2001 From: Josh Andler Date: Fri, 13 Aug 2010 07:54:19 -0700 Subject: [PATCH] Revs 9706-9709 from trunk to fix Uniconvertor and 3 connector crashes --- share/extensions/uniconv-ext.py | 2 +- share/extensions/uniconv_output.py | 2 +- src/conn-avoid-ref.cpp | 7 ++++--- src/connector-context.cpp | 33 +++++++++++++++++++++++------- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/share/extensions/uniconv-ext.py b/share/extensions/uniconv-ext.py index d3d69546c..a7608bc56 100644 --- a/share/extensions/uniconv-ext.py +++ b/share/extensions/uniconv-ext.py @@ -57,7 +57,7 @@ if cmd == None: 'http://sk1project.org/modules.php?name=Products&product=uniconvertor\n'+\ 'and install into your Inkscape\'s Python location\n')) sys.exit(1) - cmd = 'python -c "import uniconvertor"' + cmd = 'python -c "import uniconvertor; uniconvertor.uniconv_run()"' run((cmd+' "%s" "%%s"') % sys.argv[1].replace("%","%%"), "UniConvertor") diff --git a/share/extensions/uniconv_output.py b/share/extensions/uniconv_output.py index f7746c2f4..720666103 100644 --- a/share/extensions/uniconv_output.py +++ b/share/extensions/uniconv_output.py @@ -123,7 +123,7 @@ def get_command(): 'http://sk1project.org/modules.php?name=Products&product=uniconvertor\n'+\ 'and install into your Inkscape\'s Python location\n')) sys.exit(1) - cmd = 'python -c "from uniconvertor import uniconv; uniconv();"' + cmd = 'python -c "import uniconvertor; uniconvertor.uniconv_run();"' return cmd diff --git a/src/conn-avoid-ref.cpp b/src/conn-avoid-ref.cpp index 88c84a84c..a918f8745 100644 --- a/src/conn-avoid-ref.cpp +++ b/src/conn-avoid-ref.cpp @@ -63,8 +63,8 @@ SPAvoidRef::~SPAvoidRef() const bool routerInstanceExists = (item->document->router != NULL); if (shapeRef && routerInstanceExists) { - Router *router = shapeRef->router(); - router->removeShape(shapeRef); + // Deleting the shapeRef will remove it completely from + // an existing Router instance. delete shapeRef; } shapeRef = NULL; @@ -329,7 +329,8 @@ void SPAvoidRef::handleSettingChange(void) { g_assert(shapeRef); - router->removeShape(shapeRef); + // Deleting the shapeRef will remove it completely from + // an existing Router instance. delete shapeRef; shapeRef = NULL; } diff --git a/src/connector-context.cpp b/src/connector-context.cpp index b0e192190..f7d18a33f 100644 --- a/src/connector-context.cpp +++ b/src/connector-context.cpp @@ -1756,12 +1756,22 @@ cc_set_active_conn(SPConnectorContext *cc, SPItem *item) if (cc->active_conn == item) { - // Just adjust handle positions. - Geom::Point startpt = *(curve->first_point()) * i2d; - sp_knot_set_position(cc->endpt_handle[0], startpt, 0); + if (curve->is_empty()) + { + // Connector is invisible because it is clipped to the boundary of + // two overlpapping shapes. + sp_knot_hide(cc->endpt_handle[0]); + sp_knot_hide(cc->endpt_handle[1]); + } + else + { + // Just adjust handle positions. + Geom::Point startpt = *(curve->first_point()) * i2d; + sp_knot_set_position(cc->endpt_handle[0], startpt, 0); - Geom::Point endpt = *(curve->last_point()) * i2d; - sp_knot_set_position(cc->endpt_handle[1], endpt, 0); + Geom::Point endpt = *(curve->last_point()) * i2d; + sp_knot_set_position(cc->endpt_handle[1], endpt, 0); + } return; } @@ -1824,6 +1834,13 @@ cc_set_active_conn(SPConnectorContext *cc, SPItem *item) G_CALLBACK(endpt_handler), cc); } + if (curve->is_empty()) + { + // Connector is invisible because it is clipped to the boundary + // of two overlpapping shapes. So, it doesn't need endpoints. + return; + } + Geom::Point startpt = *(curve->first_point()) * i2d; sp_knot_set_position(cc->endpt_handle[0], startpt, 0); @@ -1887,8 +1904,10 @@ static bool cc_item_is_shape(SPItem *item) bool cc_item_is_connector(SPItem *item) { if (SP_IS_PATH(item)) { - if (SP_PATH(item)->connEndPair.isAutoRoutingConn()) { - g_assert( SP_PATH(item)->original_curve ? !(SP_PATH(item)->original_curve->is_closed()) : !(SP_PATH(item)->curve->is_closed()) ); + bool closed = SP_PATH(item)->original_curve ? SP_PATH(item)->original_curve->is_closed() : SP_PATH(item)->curve->is_closed(); + if (SP_PATH(item)->connEndPair.isAutoRoutingConn() && !closed) { + // To be considered a connector, an object must be a non-closed + // path that is marked with a "inkscape:connector-type" attribute. return true; } } -- 2.30.2