X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fcellrenderer_timetrack.cpp;h=514f170822db42e346bd44860fa6e781fc9030c8;hb=9fec9e45acee8a602a11699eac2dea3a0bfe4154;hp=0e11f39eb946605203cf7eff1265303cabf49e0e;hpb=48cc686196aefbb90ab4bdbe871a863e9e0c93bf;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/cellrenderer_timetrack.cpp b/synfig-studio/trunk/src/gtkmm/cellrenderer_timetrack.cpp index 0e11f39..514f170 100644 --- a/synfig-studio/trunk/src/gtkmm/cellrenderer_timetrack.cpp +++ b/synfig-studio/trunk/src/gtkmm/cellrenderer_timetrack.cpp @@ -84,7 +84,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 +746,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 node; if(valdesc.get_value(stime).get_type()==ValueBase::TYPE_CANVAS) @@ -761,7 +762,7 @@ CellRenderer_TimeTrack::activate_vfunc( if(clickfound && node) { - show_timepoint_menu(node, stime, actual_time > waypoints, W } void -CellRenderer_TimeTrack::show_timepoint_menu(const etl::handle& node, const synfig::Time& time, Side side) +CellRenderer_TimeTrack::show_timepoint_menu(const etl::handle& node, const synfig::Time& time, const synfig::Time& time_offset, Side side) { std::set > 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 +1015,15 @@ CellRenderer_TimeTrack::show_timepoint_menu(const etl::handle& 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;