Added copyright lines for files I've edited this year.
[synfig.git] / synfig-studio / trunk / src / gtkmm / dockdialog.cpp
index 803fa98..614e8db 100644 (file)
@@ -2,10 +2,11 @@
 /*!    \file dockdialog.cpp
 **     \brief Template File
 **
-**     $Id: dockdialog.cpp,v 1.1.1.1 2005/01/07 03:34:36 darco Exp $
+**     $Id$
 **
 **     \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
@@ -35,6 +36,7 @@
 #include "dockdialog.h"
 #include "dockbook.h"
 #include "dockmanager.h"
+#include "toolbox.h"
 #include "widget_compselect.h"
 #include <synfig/general.h>
 #include <synfig/uniqueid.h>
@@ -48,6 +50,8 @@
 #include <gtkmm/box.h>
 #include <synfigapp/main.h>
 
+#include "general.h"
+
 #endif
 
 /* === U S I N G =========================================================== */
@@ -100,9 +104,15 @@ DockDialog::DockDialog():
        );
        set_keep_above(false);
 
+       //! \todo can we set dialog windows transient for all normal windows, not just the toolbox?
+       //! paragraph 3 of http://standards.freedesktop.org/wm-spec/1.3/ar01s07.html suggests we can
+       // this seems to have bad effects on KDE, so leave it disabled by default
+       if(getenv("SYNFIG_TRANSIENT_DIALOGS"))
+               set_transient_for(*App::toolbox);
+
        // Set up the window
        //set_type_hint(Gdk::WINDOW_TYPE_HINT_UTILITY);
-       set_title("Dock Dialog");
+       set_title(_("Dock Panel"));
 
        // Register with the dock manager
        App::dock_manager->dock_dialog_list_.push_back(this);
@@ -137,24 +147,28 @@ DockDialog::~DockDialog()
 
        is_deleting=true;
 
-       DEBUGPOINT();
-
        // Remove all of the dock books
        for(;!dock_book_list.empty();dock_book_list.pop_front())
        {
                dock_book_list.front()->clear();
 
-               // UGLY HACK
+               //! \todo Fix this UGLY HACK
                // The following line really should be uncommented,
                // but it causes crashes. Without it, a small
                // memory hole is created--but at least it doesn't crash
                // delete dock_book_list.front();
 
                // Oddly enough, the following line should
-               // theoreticly do the same thing after this
+               // theoretically do the same thing after this
                // class is destroyed, but it doesn't seem to
-               // caues a crash.
-               manage(dock_book_list.front());
+               // cause a crash.  It does, however, trigger this warning:
+               //
+               //   A floating object was finalized. This means that someone
+               //   called g_object_unref() on an object that had only a
+               //   floating reference; the initial floating reference is not
+               //   owned by anyone and must be removed with g_object_ref_sink().
+               //
+               // manage(dock_book_list.front());
        }
 
        // Remove us from the dock manager
@@ -173,8 +187,6 @@ DockDialog::~DockDialog()
        }
 
        delete widget_comp_select;
-
-       DEBUGPOINT();
 }
 
 void
@@ -292,7 +304,7 @@ DockDialog::erase_dock_book(DockBook* dock_book)
 void
 DockDialog::refresh()
 {
-       synfig::info("dock_book_list.size()=%d",dock_book_list.size());
+       // synfig::info("dock_book_list.size()=%d",dock_book_list.size());
        //remove();
 
        if(dock_book_list.empty())
@@ -326,7 +338,7 @@ DockDialog::refresh()
 
        //prepend_button->show();
        //append_button->show();
-       pannels_.clear();
+       panels_.clear();
 
        if(dock_book_list.size()==1)
        {
@@ -336,11 +348,11 @@ DockDialog::refresh()
        {
                Gtk::Paned* parent(manage(is_horizontal?(Gtk::Paned*)new Gtk::HPaned:(Gtk::Paned*)new Gtk::VPaned));
 
-               pannels_.push_back(parent);
+               panels_.push_back(parent);
 
-               if(pannels_.size()<=dock_book_sizes_.size())
-                       pannels_.back()->set_position(dock_book_sizes_[pannels_.size()-1]);
-               pannels_.back()->property_position().signal_changed().connect(
+               if(panels_.size()<=dock_book_sizes_.size())
+                       panels_.back()->set_position(dock_book_sizes_[panels_.size()-1]);
+               panels_.back()->property_position().signal_changed().connect(
                        sigc::mem_fun(*this,&DockDialog::rebuild_sizes)
                );
                //parent->show();
@@ -353,11 +365,11 @@ DockDialog::refresh()
                for(next=dock_book_list.begin(),next++,iter=next++;next!=dock_book_list.end();iter=next++)
                {
                        Gtk::Paned* current(manage(is_horizontal?(Gtk::Paned*)new Gtk::HPaned:(Gtk::Paned*)new Gtk::VPaned));
-                       pannels_.push_back(current);
+                       panels_.push_back(current);
 
-                       if(pannels_.size()<=dock_book_sizes_.size())
-                               pannels_.back()->set_position(dock_book_sizes_[pannels_.size()-1]);
-                       pannels_.back()->property_position().signal_changed().connect(
+                       if(panels_.size()<=dock_book_sizes_.size())
+                               panels_.back()->set_position(dock_book_sizes_[panels_.size()-1]);
+                       panels_.back()->property_position().signal_changed().connect(
                                sigc::mem_fun(*this,&DockDialog::rebuild_sizes)
                        );
 
@@ -385,9 +397,9 @@ DockDialog::rebuild_sizes()
 {
        unsigned int i=0;
        dock_book_sizes_.clear();
-       for(i=0;i<pannels_.size();i++)
+       for(i=0;i<panels_.size();i++)
        {
-               dock_book_sizes_.push_back(pannels_[i]->get_position());
+               dock_book_sizes_.push_back(panels_[i]->get_position());
        }
 }
 
@@ -395,9 +407,9 @@ void
 DockDialog::set_dock_book_sizes(const std::vector<int>& new_sizes)
 {
        unsigned int i=0;
-       for(i=0;i<pannels_.size() && i<new_sizes.size();i++)
+       for(i=0;i<panels_.size() && i<new_sizes.size();i++)
        {
-               pannels_[i]->set_position(new_sizes[i]);
+               panels_[i]->set_position(new_sizes[i]);
        }
        dock_book_sizes_=new_sizes;
        //rebuild_sizes();
@@ -432,7 +444,9 @@ DockDialog::refresh_accel_group()
 bool
 DockDialog::close()
 {
-       synfig::info("DockDialog::close(): DELETED!");
+       if (getenv("SYNFIG_DEBUG_DESTRUCTORS"))
+               synfig::info("DockDialog::close(): Deleted");
+
        empty_sig.disconnect();
        //get_dock_book().clear();
        delete this;
@@ -546,5 +560,5 @@ DockDialog::refresh_title()
                set_title(title);
        }
        else
-               set_title(_("Empty Dock Dialog"));
+               set_title(_("Empty Dock Panel"));
 }