Add comments in the code about the recent dialog sizes problem fix.
[synfig.git] / synfig-studio / src / gtkmm / app.cpp
index 68c8795..ae8c8ba 100644 (file)
@@ -1306,14 +1306,14 @@ App::App(int *argc, char ***argv):
                state_manager->add_state(&state_star);
                state_manager->add_state(&state_gradient);
                if(!getenv("SYNFIG_DISABLE_POLYGON")) state_manager->add_state(&state_polygon); // Enabled - for working without ducks
-               
+
                /* bline tools */
                state_manager->add_state(&state_bline);
                if(!getenv("SYNFIG_DISABLE_DRAW"   )) state_manager->add_state(&state_draw); // Enabled for now.  Let's see whether they're good enough yet.
                if(!getenv("SYNFIG_DISABLE_WIDTH"  )) state_manager->add_state(&state_width); // Enabled since 0.61.09
                state_manager->add_state(&state_fill);
                state_manager->add_state(&state_eyedrop);
-               
+
                /* other */
                state_manager->add_state(&state_text);
                if(!getenv("SYNFIG_DISABLE_SKETCH" )) state_manager->add_state(&state_sketch);
@@ -1391,7 +1391,16 @@ App::App(int *argc, char ***argv):
 
                studio_init_cb.task(_("Done."));
                studio_init_cb.amount_complete(10000,10000);
-
+        
+               // To avoid problems with some window managers and gtk >= 2.18
+               // we should show dock dialogs after the settings load.
+               // If dock dialogs are shown before the settings are loaded,
+               // the windows manager can act over it.
+               // See discussions here:
+               // * http://synfig.org/forums/viewtopic.php?f=1&t=1131&st=0&sk=t&sd=a&start=30
+               // * http://synfig.org/forums/viewtopic.php?f=15&t=1062
+               dock_manager->show_all_dock_dialogs();
+               
                toolbox->present();
        }
        catch(String x)
@@ -1470,13 +1479,10 @@ App::get_config_file(const synfig::String& file)
        return Glib::build_filename(get_user_app_directory(),file);
 }
 
-#define SCALE_FACTOR   (1280)
 //! set the \a instance's canvas(es) position and size to be those specified in the first entry of recent_files_window_size
 void
 App::set_recent_file_window_size(etl::handle<Instance> instance)
 {
-       int screen_w(Gdk::screen_width());
-       int screen_h(Gdk::screen_height());
 
        const std::string &canvas_window_size = *recent_files_window_size.begin();
 
@@ -1522,22 +1528,9 @@ App::set_recent_file_window_size(etl::handle<Instance> instance)
                        current = separator+1;
                        continue;
                }
-
-               if (x > SCALE_FACTOR) x = SCALE_FACTOR - 150; if (x < 0) x = 0;
-               if (y > SCALE_FACTOR) y = SCALE_FACTOR - 150; if (y < 0) y = 0;
-               x=x*screen_w/SCALE_FACTOR;
-               y=y*screen_h/SCALE_FACTOR;
-               if(getenv("SYNFIG_WINDOW_POSITION_X_OFFSET"))
-                       x += atoi(getenv("SYNFIG_WINDOW_POSITION_X_OFFSET"));
-               if(getenv("SYNFIG_WINDOW_POSITION_Y_OFFSET"))
-                       y += atoi(getenv("SYNFIG_WINDOW_POSITION_Y_OFFSET"));
-
-               if (w > SCALE_FACTOR) w = 150; if (w < 0) w = 0;
-               if (h > SCALE_FACTOR) h = 150; if (h < 0) h = 0;
-
                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->resize(w,h);
                canvasview->present();
 
                current = separator+1;
@@ -1550,8 +1543,6 @@ App::set_recent_file_window_size(etl::handle<Instance> instance)
 void
 App::add_recent_file(const etl::handle<Instance> instance)
 {
-       int screen_w(Gdk::screen_width());
-       int screen_h(Gdk::screen_height());
 
        std::string canvas_window_size;
 
@@ -1570,13 +1561,12 @@ App::add_recent_file(const etl::handle<Instance> instance)
 
                canvas_window_size += strprintf("%s %d %d %d %d\t",
                                                                                canvas->get_relative_id(canvas->get_root()).c_str(),
-                                                                               x_pos*SCALE_FACTOR/screen_w,  y_pos*SCALE_FACTOR/screen_h,
-                                                                               x_size*SCALE_FACTOR/screen_w, y_size*SCALE_FACTOR/screen_h);
+                                                                               x_pos,  y_pos,
+                                                                               x_size, y_size);
        }
 
        add_recent_file(absolute_path(instance->get_file_name()), canvas_window_size);
 }
-#undef SCALE_FACTOR
 
 void
 App::add_recent_file(const std::string &file_name, const std::string &window_size)