X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fcellrenderer_timetrack.cpp;h=514f170822db42e346bd44860fa6e781fc9030c8;hb=9fec9e45acee8a602a11699eac2dea3a0bfe4154;hp=af5b57c28f816e24411bed0a522e5727335fc817;hpb=606a53ecae1c2993a50f9af49f65864d7bcab656;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/cellrenderer_timetrack.cpp b/synfig-studio/trunk/src/gtkmm/cellrenderer_timetrack.cpp index af5b57c..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; } @@ -738,7 +738,7 @@ CellRenderer_TimeTrack::activate_vfunc( selection=true; } } - // Perhaps I sould signal if we selected this activepoint? + // Perhaps I should signal if we selected this activepoint? }*/ if(event->button.button==3) @@ -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;