Revision: 2214
          http://synfig.svn.sourceforge.net/synfig/?rev=2214&view=rev
Author:   dooglus
Date:     2008-11-18 23:27:52 +0000 (Tue, 18 Nov 2008)

Log Message:
-----------
When a new document is made and saved, register it in the canvas map as if it 
had been loaded.  Previously only documents that were loaded from disk were 
entered into the map causing errors in some situations.

Modified Paths:
--------------
    synfig-core/trunk/src/synfig/canvas.cpp
    synfig-core/trunk/src/synfig/loadcanvas.cpp
    synfig-core/trunk/src/synfig/loadcanvas.h

Modified: synfig-core/trunk/src/synfig/canvas.cpp
===================================================================
--- synfig-core/trunk/src/synfig/canvas.cpp     2008-11-18 23:27:31 UTC (rev 
2213)
+++ synfig-core/trunk/src/synfig/canvas.cpp     2008-11-18 23:27:52 UTC (rev 
2214)
@@ -39,6 +39,7 @@
 #include "time.h"
 #include "context.h"
 #include "layer_pastecanvas.h"
+#include "loadcanvas.h"
 #include <sigc++/bind.h>
 
 #endif
@@ -956,8 +957,24 @@
                parent()->set_file_name(file_name);
        else
        {
+               String old_name(file_name_);
                file_name_=file_name;
-               signal_file_name_changed_();
+
+               // when a canvas is made, its name is ""
+               // then, before it's saved or even edited, it gets a name like 
"Synfig Animation 23", in the local language
+               // we don't want to register the canvas' filename in the canvas 
map until it gets a real filename
+               if (old_name != "")
+               {
+                       file_name_=file_name;
+                       std::map<synfig::String, etl::loose_handle<Canvas> 
>::iterator iter;
+                       
for(iter=get_open_canvas_map().begin();iter!=get_open_canvas_map().end();++iter)
+                               if(iter->second==this)
+                                       break;
+                       if (iter == get_open_canvas_map().end())
+                               CanvasParser::register_canvas_in_map(this, 
file_name);
+                       else
+                               signal_file_name_changed_();
+               }
        }
 }
 

Modified: synfig-core/trunk/src/synfig/loadcanvas.cpp
===================================================================
--- synfig-core/trunk/src/synfig/loadcanvas.cpp 2008-11-18 23:27:31 UTC (rev 
2213)
+++ synfig-core/trunk/src/synfig/loadcanvas.cpp 2008-11-18 23:27:52 UTC (rev 
2214)
@@ -2120,6 +2120,14 @@
        return canvas;
 }
 
+void
+CanvasParser::register_canvas_in_map(Canvas::Handle canvas, String as)
+{
+       get_open_canvas_map()[etl::absolute_path(as)]=canvas;
+       
canvas->signal_deleted().connect(sigc::bind(sigc::ptr_fun(_remove_from_open_canvas_map),canvas.get()));
+       
canvas->signal_file_name_changed().connect(sigc::bind(sigc::ptr_fun(_canvas_file_name_changed),canvas.get()));
+}
+
 Canvas::Handle
 CanvasParser::parse_from_file_as(const String &file_,const String &as_,String 
&errors)
 {
@@ -2139,9 +2147,7 @@
                {
                        Canvas::Handle 
canvas(parse_canvas(parser.get_document()->get_root_node(),0,false,as));
                        if (!canvas) return canvas;
-                       get_open_canvas_map()[etl::absolute_path(as)]=canvas;
-                       
canvas->signal_deleted().connect(sigc::bind(sigc::ptr_fun(_remove_from_open_canvas_map),canvas.get()));
-                       
canvas->signal_file_name_changed().connect(sigc::bind(sigc::ptr_fun(_canvas_file_name_changed),canvas.get()));
+                       register_canvas_in_map(canvas, as);
 
                        const ValueNodeList& 
value_node_list(canvas->value_node_list());
 

Modified: synfig-core/trunk/src/synfig/loadcanvas.h
===================================================================
--- synfig-core/trunk/src/synfig/loadcanvas.h   2008-11-18 23:27:31 UTC (rev 
2213)
+++ synfig-core/trunk/src/synfig/loadcanvas.h   2008-11-18 23:27:52 UTC (rev 
2214)
@@ -119,6 +119,8 @@
        const synfig::String& get_errors_text()const { return errors_text; }
        const synfig::String& get_warnings_text()const { return warnings_text; }
 
+       static void register_canvas_in_map(Canvas::Handle canvas, String as);
+
        //! \todo writeme
        Canvas::Handle parse_from_file_as(const String &filename,const String 
&as,String &errors);
 


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

Reply via email to