Revision: 2201
http://synfig.svn.sourceforge.net/synfig/?rev=2201&view=rev
Author: dooglus
Date: 2008-11-14 21:14:21 +0000 (Fri, 14 Nov 2008)
Log Message:
-----------
Fix 1814151: "Add a layer inside an exported canvas crash". Check the return
value of add_layer_to() in lots of places. There may be more to come, and the
function itself looks like it needs attention too.
Modified Paths:
--------------
synfig-studio/trunk/src/gtkmm/state_bline.cpp
synfig-studio/trunk/src/gtkmm/state_circle.cpp
synfig-studio/trunk/src/gtkmm/state_draw.cpp
synfig-studio/trunk/src/gtkmm/state_gradient.cpp
synfig-studio/trunk/src/gtkmm/state_polygon.cpp
synfig-studio/trunk/src/gtkmm/state_rectangle.cpp
synfig-studio/trunk/src/gtkmm/state_star.cpp
synfig-studio/trunk/src/gtkmm/state_text.cpp
Modified: synfig-studio/trunk/src/gtkmm/state_bline.cpp
===================================================================
--- synfig-studio/trunk/src/gtkmm/state_bline.cpp 2008-11-14 17:52:30 UTC
(rev 2200)
+++ synfig-studio/trunk/src/gtkmm/state_bline.cpp 2008-11-14 21:14:21 UTC
(rev 2201)
@@ -621,7 +621,11 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("curve_gradient",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ group.cancel();
+ throw String(_("Unable to create layer"));
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Gradient"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
@@ -680,7 +684,11 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("plant",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ group.cancel();
+ throw String(_("Unable to create layer"));
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Plant"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
@@ -739,7 +747,11 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("region",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ group.cancel();
+ throw String(_("Unable to create layer"));
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Region"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
@@ -809,7 +821,11 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("outline",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ group.cancel();
+ throw String(_("Unable to create layer"));
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Outline"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
Modified: synfig-studio/trunk/src/gtkmm/state_circle.cpp
===================================================================
--- synfig-studio/trunk/src/gtkmm/state_circle.cpp 2008-11-14 17:52:30 UTC
(rev 2200)
+++ synfig-studio/trunk/src/gtkmm/state_circle.cpp 2008-11-14 21:14:21 UTC
(rev 2201)
@@ -601,6 +601,12 @@
get_falloff() >= 0 && get_falloff() < CIRCLE_NUM_FALLOFF)
{
layer=get_canvas_interface()->add_layer_to("circle",canvas,depth);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_param("origin",p1);
@@ -670,7 +676,12 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("curve_gradient",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Gradient"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
@@ -739,7 +750,12 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("plant",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Plant"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
@@ -808,7 +824,12 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("region",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Region"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
@@ -886,7 +907,12 @@
if (get_layer_outline_flag())
{
Layer::Handle
layer(get_canvas_interface()->add_layer_to("outline",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Outline"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
Modified: synfig-studio/trunk/src/gtkmm/state_draw.cpp
===================================================================
--- synfig-studio/trunk/src/gtkmm/state_draw.cpp 2008-11-14 17:52:30 UTC
(rev 2200)
+++ synfig-studio/trunk/src/gtkmm/state_draw.cpp 2008-11-14 21:14:21 UTC
(rev 2201)
@@ -115,7 +115,7 @@
Duckmatic::Type old_duckmask;
void fill_last_stroke();
- void fill_last_stroke_and_unselect_other_layers();
+ Smach::event_result fill_last_stroke_and_unselect_other_layers();
Smach::event_result new_bline(std::list<synfig::BLinePoint> bline,bool
loop_bline_flag,float radius);
@@ -1038,7 +1038,15 @@
// fill_last_stroke() will take care of clearing the selection
if we're calling it
if(get_outline_flag() && get_region_flag())
- fill_last_stroke_and_unselect_other_layers();
+ {
+ if (fill_last_stroke_and_unselect_other_layers() ==
Smach::RESULT_ERROR)
+ {
+
get_canvas_view()->get_selection_manager()->set_selected_layers(layer_list);
+
get_canvas_view()->get_ui_interface()->error(_("Unable to create layer"));
+ group.cancel();
+ return Smach::RESULT_ERROR;
+ }
+ }
else
get_canvas_interface()->get_selection_manager()->clear_selected_layers();
@@ -1050,11 +1058,25 @@
if(get_outline_flag())
{
layer=get_canvas_interface()->add_layer_to("outline",canvas,depth);
+ if (!layer)
+ {
+
get_canvas_view()->get_selection_manager()->set_selected_layers(layer_list);
+
get_canvas_view()->get_ui_interface()->error(_("Unable to create layer"));
+ group.cancel();
+ return Smach::RESULT_ERROR;
+ }
layer->set_description(get_id()+_(" Outline"));
}
else
{
layer=get_canvas_interface()->add_layer_to("region",canvas,depth);
+ if (!layer)
+ {
+
get_canvas_view()->get_selection_manager()->set_selected_layers(layer_list);
+
get_canvas_view()->get_ui_interface()->error(_("Unable to create layer"));
+ group.cancel();
+ return Smach::RESULT_ERROR;
+ }
layer->set_description(get_id()+_(" Region"));
}
@@ -1774,7 +1796,12 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
layer=get_canvas_interface()->add_layer_to("region",canvas,depth);
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return Smach::RESULT_ERROR;
+ }
layer->set_param("color",synfigapp::Main::get_background_color());
if(get_feather())
{
@@ -1946,11 +1973,11 @@
}
}
-void
+Smach::event_result
StateDraw_Context::fill_last_stroke_and_unselect_other_layers()
{
if(!last_stroke)
- return;
+ return Smach::RESULT_OK;
synfigapp::Action::PassiveGrouper
group(get_canvas_interface()->get_instance().get(),_("Fill Stroke"));
@@ -1972,7 +1999,7 @@
get_canvas_interface()->get_selection_manager()->clear_selected_layers();
layer=get_canvas_interface()->add_layer_to("region", canvas, depth);
- assert(layer);
+ if (!layer) return Smach::RESULT_ERROR;
layer->set_param("color",synfigapp::Main::get_background_color());
layer->set_description(last_stroke_id + _(" Region"));
@@ -1992,9 +2019,10 @@
{
get_canvas_view()->get_ui_interface()->error(_("Unable to
create Region layer"));
group.cancel();
- return;
+ return Smach::RESULT_OK;
}
get_canvas_view()->get_selection_manager()->set_selected_layer(layer);
+ return Smach::RESULT_OK;
}
void
Modified: synfig-studio/trunk/src/gtkmm/state_gradient.cpp
===================================================================
--- synfig-studio/trunk/src/gtkmm/state_gradient.cpp 2008-11-14 17:52:30 UTC
(rev 2200)
+++ synfig-studio/trunk/src/gtkmm/state_gradient.cpp 2008-11-14 21:14:21 UTC
(rev 2201)
@@ -404,6 +404,12 @@
case GRADIENT_INTERPOLATION_LINEAR:
layer=get_canvas_interface()->add_layer_to("linear_gradient",canvas,depth);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer->set_param("p1",p1);
get_canvas_interface()->signal_layer_param_changed()(layer,"p1");
layer->set_param("p2",p2);
@@ -411,6 +417,12 @@
break;
case GRADIENT_RADIAL:
layer=get_canvas_interface()->add_layer_to("radial_gradient",canvas,depth);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer->set_param("center",p1);
get_canvas_interface()->signal_layer_param_changed()(layer,"center");
layer->set_param("radius",(p2-p1).mag());
@@ -418,6 +430,12 @@
break;
case GRADIENT_CONICAL:
layer=get_canvas_interface()->add_layer_to("conical_gradient",canvas,depth);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer->set_param("center",p1);
get_canvas_interface()->signal_layer_param_changed()(layer,"center");
{
@@ -428,6 +446,12 @@
break;
case GRADIENT_SPIRAL:
layer=get_canvas_interface()->add_layer_to("spiral_gradient",canvas,depth);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer->set_param("center",p1);
get_canvas_interface()->signal_layer_param_changed()(layer,"center");
layer->set_param("radius",(p2-p1).mag());
Modified: synfig-studio/trunk/src/gtkmm/state_polygon.cpp
===================================================================
--- synfig-studio/trunk/src/gtkmm/state_polygon.cpp 2008-11-14 17:52:30 UTC
(rev 2200)
+++ synfig-studio/trunk/src/gtkmm/state_polygon.cpp 2008-11-14 21:14:21 UTC
(rev 2201)
@@ -531,6 +531,12 @@
if (get_layer_polygon_flag())
{
layer=get_canvas_interface()->add_layer_to("polygon",canvas,depth);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_param("invert",get_invert());
@@ -609,7 +615,12 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("curve_gradient",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Gradient"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
@@ -668,7 +679,12 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("plant",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Plant"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
@@ -727,7 +743,12 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("region",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Region"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
@@ -795,7 +816,12 @@
if (get_layer_outline_flag())
{
Layer::Handle
layer(get_canvas_interface()->add_layer_to("outline",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Outline"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
Modified: synfig-studio/trunk/src/gtkmm/state_rectangle.cpp
===================================================================
--- synfig-studio/trunk/src/gtkmm/state_rectangle.cpp 2008-11-14 17:52:30 UTC
(rev 2200)
+++ synfig-studio/trunk/src/gtkmm/state_rectangle.cpp 2008-11-14 21:14:21 UTC
(rev 2201)
@@ -519,6 +519,12 @@
if (get_layer_rectangle_flag())
{
layer=get_canvas_interface()->add_layer_to("rectangle",canvas,depth);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_param("point1",p1);
@@ -552,7 +558,12 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("curve_gradient",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Gradient"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
@@ -611,7 +622,12 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("plant",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Plant"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
@@ -670,7 +686,12 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("region",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Region"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
@@ -738,7 +759,12 @@
if (get_layer_outline_flag())
{
Layer::Handle
layer(get_canvas_interface()->add_layer_to("outline",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Outline"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
Modified: synfig-studio/trunk/src/gtkmm/state_star.cpp
===================================================================
--- synfig-studio/trunk/src/gtkmm/state_star.cpp 2008-11-14 17:52:30 UTC
(rev 2200)
+++ synfig-studio/trunk/src/gtkmm/state_star.cpp 2008-11-14 21:14:21 UTC
(rev 2201)
@@ -634,6 +634,12 @@
if (get_layer_star_flag())
{
layer=get_canvas_interface()->add_layer_to("star",canvas,depth);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_param("origin",p1);
@@ -707,7 +713,12 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("curve_gradient",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Gradient"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
@@ -771,7 +782,12 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("plant",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Plant"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
@@ -835,7 +851,12 @@
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
Layer::Handle
layer(get_canvas_interface()->add_layer_to("region",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Region"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
@@ -908,7 +929,12 @@
if (get_layer_outline_flag())
{
Layer::Handle
layer(get_canvas_interface()->add_layer_to("outline",canvas,depth));
- assert(layer);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Outline"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
Modified: synfig-studio/trunk/src/gtkmm/state_text.cpp
===================================================================
--- synfig-studio/trunk/src/gtkmm/state_text.cpp 2008-11-14 17:52:30 UTC
(rev 2200)
+++ synfig-studio/trunk/src/gtkmm/state_text.cpp 2008-11-14 21:14:21 UTC
(rev 2201)
@@ -400,6 +400,12 @@
App::dialog_entry(_("Text Entry"), _("Enter text here:"), text);
layer=get_canvas_interface()->add_layer_to("text",canvas,depth);
+ if (!layer)
+ {
+ get_canvas_view()->get_ui_interface()->error(_("Unable to
create layer"));
+ group.cancel();
+ return;
+ }
layer_selection.push_back(layer);
layer->set_param("origin",point);
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl