Add a patch from Gerald Young (Yoyobuae) to fix building on Win32 after the mutex...
[synfig.git] / synfig-studio / trunk / src / gtkmm / app.cpp
index 69aa237..653c19b 100644 (file)
@@ -7,6 +7,7 @@
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
 **     Copyright (c) 2007, 2008 Chris Moore
+**     Copyright (c) 2008 Gerald Young
 **
 **     This package is free software; you can redistribute it and/or
 **     modify it under the terms of the GNU General Public License as
 #      include <config.h>
 #endif
 
+#ifdef WIN32
+#define WINVER 0x0500
+#include <windows.h>
+#endif
+
 #include <fstream>
 #include <iostream>
 #include <locale>
 #include <fmod.h>
 #endif
 
-#ifdef WIN32
-#define _WIN32_WINNT 0x0500
-#include <windows.h>
-#endif
 #include <gtkmm/accelmap.h>
 #include <gtkmm/filechooser.h>
 #include <gtkmm/filechooserdialog.h>
@@ -1349,12 +1351,13 @@ App::set_recent_file_window_size(etl::handle<Instance> instance)
                return;
 
        synfig::String::size_type current=0;
+       bool seen_root(false), shown_non_root(false);
 
        while(current != synfig::String::npos)
        {
                // find end of first field (canvas) or return
                synfig::String::size_type separator = canvas_window_size.find_first_of(' ', current);
-               if(separator == synfig::String::npos) return;
+               if(separator == synfig::String::npos) break;
 
                // find the canvas
                synfig::Canvas::Handle canvas;
@@ -1369,8 +1372,10 @@ App::set_recent_file_window_size(etl::handle<Instance> instance)
                        continue;
                }
 
-               CanvasView::Handle canvasview = instance->find_canvas_view(canvas);
-               canvasview->present();
+               if (canvas->is_root())
+                       seen_root = true;
+               else
+                       shown_non_root = true;
 
                // check that we have the tab character the ends this canvas' data or return
                current = separator+1;
@@ -1392,17 +1397,20 @@ App::set_recent_file_window_size(etl::handle<Instance> instance)
                        x += atoi(getenv("SYNFIG_WINDOW_POSITION_X_OFFSET"));
                if(getenv("SYNFIG_WINDOW_POSITION_Y_OFFSET"))
                        y += atoi(getenv("SYNFIG_WINDOW_POSITION_Y_OFFSET"));
-               canvasview->move(x,y);
 
                if (w > SCALE_FACTOR) w = 150; if (w < 0) w = 0;
                if (h > SCALE_FACTOR) h = 150; if (h < 0) h = 0;
-               w=w*screen_w/SCALE_FACTOR;
-               h=h*screen_h/SCALE_FACTOR;
-               canvasview->set_default_size(w,h);
-               canvasview->set_size_request(w,h);
+
+               CanvasView::Handle canvasview = instance->find_canvas_view(canvas);
+               canvasview->move(x,y);
+               canvasview->resize(w*screen_w/SCALE_FACTOR,h*screen_h/SCALE_FACTOR);
+               canvasview->present();
 
                current = separator+1;
        }
+
+       if (shown_non_root && !seen_root)
+               instance->find_canvas_view(instance->get_canvas())->hide();
 }
 
 void