Removed a bunch more DEBUGPOINT()s.
[synfig.git] / synfig-studio / trunk / src / gtkmm / cellrenderer_timetrack.cpp
index 0e11f39..c1759d9 100644 (file)
@@ -48,6 +48,8 @@
 
 #include <synfig/timepointcollect.h>
 
+#include "general.h"
+
 #endif
 
 using namespace synfig;
@@ -84,7 +86,7 @@ CellRenderer_TimeTrack::CellRenderer_TimeTrack():
        property_adjustment_(*this,"adjustment",&adjustment_),
        property_enable_timing_info_(*this,"enable-timing-info", false)
 {
-               dragging=false;
+       dragging=false;
        selection=false;
 }
 
@@ -746,8 +748,9 @@ CellRenderer_TimeTrack::activate_vfunc(
                                Time stime;
                                synfigapp::ValueDesc valdesc = property_value_desc().get_value();
                                const Node::time_set *tset = get_times_from_vdesc(valdesc);
+                               synfig::Time time_offset = get_time_offset_from_vdesc(valdesc);
 
-                               bool clickfound = tset && get_closest_time(*tset,actual_time+get_time_offset_from_vdesc(valdesc),pixel_width*cell_area.get_height(),stime);
+                               bool clickfound = tset && get_closest_time(*tset,actual_time+time_offset,pixel_width*cell_area.get_height(),stime);
 
                                etl::handle<synfig::Node> node;
                                if(valdesc.get_value(stime).get_type()==ValueBase::TYPE_CANVAS)
@@ -761,13 +764,12 @@ CellRenderer_TimeTrack::activate_vfunc(
 
                                if(clickfound && node)
                                {
-                                       show_timepoint_menu(node, stime, actual_time<stime?SIDE_LEFT:SIDE_RIGHT);
+                                       show_timepoint_menu(node, stime, time_offset, actual_time+time_offset<stime?SIDE_LEFT:SIDE_RIGHT);
                                }
                        }
 
                break;
        case GDK_MOTION_NOTIFY:
-               //DEBUGPOINT();
                //if(selection && dragging)
                //      selected_time=((float)event->motion.x-(float)cell_area.get_x())/(float)cell_area.get_width()*(adjustment->get_upper()-adjustment->get_lower())+adjustment->get_lower();
                return true;
@@ -775,8 +777,6 @@ CellRenderer_TimeTrack::activate_vfunc(
                break;
        case GDK_BUTTON_RELEASE:
                {
-                       DEBUGPOINT();
-
                        //selected_time=((float)event->button.x-(float)cell_area.get_x())/(float)cell_area.get_width()*(adjustment->get_upper()-adjustment->get_lower())+adjustment->get_lower();
                        dragging=false;
 
@@ -875,6 +875,10 @@ CellRenderer_TimeTrack::activate_vfunc(
 
 
 
+// The following three functions don't get documented correctly by
+// doxygen 1.5.[23] because of a bug with any function whose name
+// begins with 'property'.  Fixed in doxygen 1.5.4 apparently.  See
+// http://bugzilla.gnome.org/show_bug.cgi?id=471185 .
 Glib::PropertyProxy<synfigapp::ValueDesc>
 CellRenderer_TimeTrack::property_value_desc()
 {
@@ -930,18 +934,20 @@ set_waypoint_model(std::set<synfig::Waypoint, std::less<UniqueID> > waypoints, W
 }
 
 void
-CellRenderer_TimeTrack::show_timepoint_menu(const etl::handle<synfig::Node>& node, const synfig::Time& time, Side side)
+CellRenderer_TimeTrack::show_timepoint_menu(const etl::handle<synfig::Node>& node, const synfig::Time& time, const synfig::Time& time_offset, Side side)
 {
        std::set<synfig::Waypoint, std::less<UniqueID> > waypoint_set;
        int n;
        n=synfig::waypoint_collect(waypoint_set,time,node);
 
        Gtk::Menu* menu(manage(new Gtk::Menu()));
+       menu->signal_hide().connect(sigc::bind(sigc::ptr_fun(&delete_widget), menu));
 
        // Create the interpolation method menu
        if(!waypoint_set.empty())
        {
                Gtk::Menu* interp_menu(manage(new Gtk::Menu()));
+               // no need to connect to signal_hide for this one - it will be deleted when its parent is deleted
                Waypoint::Model model;
 
                // note: each of the following 4 'if' blocks provokes these warnings:
@@ -1012,13 +1018,15 @@ CellRenderer_TimeTrack::show_timepoint_menu(const etl::handle<synfig::Node>& nod
                                *canvas_interface(),
                                &synfigapp::CanvasInterface::set_time
                        ),
-                       time
+                       time - time_offset
                )
        ));
 
        if(!waypoint_set.empty())
        {
-               if(waypoint_set.size()==1)
+               // attempting to locate the valuenode for the clicked waypoint doesn't work if this is a Canvas parameter,
+               // so act as if there were multiple waypoints in that case as a workaround
+               if(waypoint_set.size()==1 && !Canvas::Handle::cast_dynamic(node))
                {
                        delete menu;
                        menu=0;