Added copyright lines for files I've edited this year.
[synfig.git] / synfig-studio / trunk / src / gtkmm / dockmanager.cpp
index cc13a96..8a5198c 100644 (file)
@@ -6,6 +6,7 @@
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2007, 2008 Chris Moore
 **
 **     This package is free software; you can redistribute it and/or
 **     modify it under the terms of the GNU General Public License as
@@ -37,6 +38,8 @@
 #include <synfigapp/main.h>
 #include <gdkmm/general.h>
 
+#include "general.h"
+
 #endif
 
 /* === U S I N G =========================================================== */
@@ -132,7 +135,8 @@ public:
                        if(key=="contents_size")
                        {
                                try {
-
+                               int width, height;
+                               Gtk::IconSize::lookup(Gtk::IconSize(4),width,height);
                                vector<int> data;
                                String::size_type n=0;
                                String value_(value);
@@ -141,12 +145,20 @@ public:
                                        int size;
                                        if(!strscanf(value_,"%d",&size))
                                                break;
+                                       if (size > SCALE_FACTOR) size = SCALE_FACTOR - 150;
+                                       if (size < 0) size = 0;
                                        size=size*screen_h/SCALE_FACTOR;
+
+                                       // prevent errors like this, by allowing space for at least the dockable's icon:
+                                       // ** CRITICAL **: clearlooks_style_draw_box_gap: assertion `height >= -1' failed
+                                       if (size < height + 9) size = height + 9;
+
                                        data.push_back(size);
 
                                        n=value_.find(" ");
                                        if(n==String::npos)
                                                break;
+                                       n++;
                                }
                                dock_dialog.set_dock_book_sizes(data);
                                }
@@ -162,8 +174,14 @@ public:
                                int x,y;
                                if(!strscanf(value,"%d %d",&x, &y))
                                        return false;
+                               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"));
                                dock_dialog.move(x,y);
                                return true;
                        }
@@ -172,6 +190,8 @@ public:
                                int x,y;
                                if(!strscanf(value,"%d %d",&x, &y))
                                        return false;
+                               if (x > SCALE_FACTOR) x = 150; if (x < 0) x = 0;
+                               if (y > SCALE_FACTOR) y = 150; if (y < 0) y = 0;
                                x=x*screen_w/SCALE_FACTOR;
                                y=y*screen_h/SCALE_FACTOR;
                                dock_dialog.set_default_size(x,y);
@@ -228,7 +248,7 @@ DockManager::~DockManager()
        while(!dockable_list_.empty())
        {
                Dockable* dockable(dockable_list_.back());
-               synfig::info("DockManager::~DockManager(): Deleting dockable \"%s\"",dockable->get_name().c_str());
+               // synfig::info("DockManager::~DockManager(): Deleting dockable \"%s\"",dockable->get_name().c_str());
                dockable_list_.pop_back();
                delete dockable;
        }
@@ -238,7 +258,7 @@ void
 DockManager::register_dockable(Dockable& x)
 {
        dockable_list_.push_back(&x);
-       synfig::info("DockManager::register_dockable(): Registered dockable \"%s\"",dockable_list_.back()->get_name().c_str());
+       // synfig::info("DockManager::register_dockable(): Registered dockable \"%s\"",dockable_list_.back()->get_name().c_str());
        signal_dockable_registered()(&x);
 }