X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fcanvas.cpp;h=b60734543b3c902ccee998ad3134ba53e19e0443;hb=0313f3153df081c11ff8a57d1ded6864142b21e2;hp=dcb702f2f47e5ca2941f01361eb0f8a6e619a37c;hpb=49739f508a1d2d1c15bead8cc1e6104a847513cd;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/canvas.cpp b/synfig-core/trunk/src/synfig/canvas.cpp index dcb702f..b607345 100644 --- a/synfig-core/trunk/src/synfig/canvas.cpp +++ b/synfig-core/trunk/src/synfig/canvas.cpp @@ -526,7 +526,7 @@ Canvas::surefind_canvas(const String &id) if(is_absolute_path(file_name)) external_canvas=open_canvas(file_name); else - external_canvas=open_canvas(get_file_path()+ETL_DIRECTORY_SEPERATOR+file_name); + external_canvas=open_canvas(get_file_path()+ETL_DIRECTORY_SEPARATOR+file_name); if(!external_canvas) throw Exception::FileNotFound(file_name); @@ -553,7 +553,7 @@ Canvas::surefind_canvas(const String &id) return new_child_canvas(id); } - // If the first character is the seperator, then + // If the first character is the separator, then // this references the root canvas. if(id[0]==':') return get_root()->surefind_canvas(string(id,1)); @@ -611,7 +611,7 @@ Canvas::find_canvas(const String &id)const if(is_absolute_path(file_name)) external_canvas=open_canvas(file_name); else - external_canvas=open_canvas(get_file_path()+ETL_DIRECTORY_SEPERATOR+file_name); + external_canvas=open_canvas(get_file_path()+ETL_DIRECTORY_SEPARATOR+file_name); if(!external_canvas) throw Exception::FileNotFound(file_name); @@ -636,7 +636,7 @@ Canvas::find_canvas(const String &id)const throw Exception::IDNotFound("Child Canvas in Parent Canvas: (child)"+id); } - // If the first character is the seperator, then + // If the first character is the separator, then // this references the root canvas. if(id.find_first_of(':')==0) return get_root()->find_canvas(string(id,1)); @@ -700,24 +700,22 @@ Canvas::insert(iterator iter,etl::handle x) //while(correct_canvas->is_inline())correct_canvas=correct_canvas->parent(); Layer::LooseHandle loose_layer(x); - x->signal_added_to_group().connect( - sigc::bind( - sigc::mem_fun( - *correct_canvas, - &Canvas::add_group_pair - ), - loose_layer - ) - ); - x->signal_removed_from_group().connect( - sigc::bind( - sigc::mem_fun( - *correct_canvas, - &Canvas::remove_group_pair - ), - loose_layer - ) - ); + add_connection(loose_layer, + sigc::connection::connection( + x->signal_added_to_group().connect( + sigc::bind( + sigc::mem_fun( + *correct_canvas, + &Canvas::add_group_pair), + loose_layer)))); + add_connection(loose_layer, + sigc::connection::connection( + x->signal_removed_from_group().connect( + sigc::bind( + sigc::mem_fun( + *correct_canvas, + &Canvas::remove_group_pair), + loose_layer)))); if(!x->get_group().empty()) @@ -749,8 +747,10 @@ Canvas::erase(Canvas::iterator iter) // is using these signals, so I'll just // leave these next two lines like they // are for now - darco 07-30-2004 - (*iter)->signal_added_to_group().clear(); - (*iter)->signal_removed_from_group().clear(); + + // so don't wipe them out entirely + // - dooglus 09-21-2007 + disconnect_connections(*iter); if(!op_flag_)remove_child(iter->get()); @@ -1077,12 +1077,12 @@ synfig::optimize_layers(Context context, Canvas::Handle op_canvas) }catch(int) { } #endif Layer::Handle new_layer(Layer::create("PasteCanvas")); - dynamic_cast(new_layer.get())->set_do_not_muck_with_time(true); + dynamic_cast(new_layer.get())->set_muck_with_time(false); Layer::ParamList param_list(paste_canvas->get_param_list()); //param_list.erase("canvas"); new_layer->set_param_list(param_list); dynamic_cast(new_layer.get())->set_sub_canvas(sub_canvas); - dynamic_cast(new_layer.get())->set_do_not_muck_with_time(false); + dynamic_cast(new_layer.get())->set_muck_with_time(true); layer=new_layer; } @@ -1179,6 +1179,21 @@ Canvas::remove_group_pair(String group, etl::handle layer) } void +Canvas::add_connection(Layer::LooseHandle layer, sigc::connection connection) +{ + connections_[layer].push_back(connection); +} + +void +Canvas::disconnect_connections(Layer::LooseHandle layer) +{ + std::vector::iterator iter; + for(iter=connections_[layer].begin();iter!=connections_[layer].end();++iter) + iter->disconnect(); + connections_[layer].clear(); +} + +void Canvas::rename_group(const String&old_name,const String&new_name) { if(is_inline() && parent_)