- synfig::KeyframeList::iterator selected;
- selected = kf_list_->find_next(t);
- set_selected_keyframe(*selected);
- queue_draw();
- return true;
+ synfig::Time prev_t,next_t;
+ kf_list_->find_prev_next(t, prev_t, next_t);
+ if( (prev_t==Time::begin() && next_t==Time::end())
+ ||
+ ((t-prev_t)>time_ratio && (next_t-t)>time_ratio)
+ )
+ {
+ set_selected_keyframe(selected_none);
+ synfig::info("Selected keyframe set to none");
+ synfig::info("Distance to prev %s", (t-prev_t).get_string().c_str());
+ synfig::info("Distance to next %s", (next_t-t).get_string().c_str());
+ queue_draw();
+ return true;
+ }
+ else if ((t-prev_t)<(next_t-t))
+ {
+ set_selected_keyframe(*(kf_list_->find_prev(t)));
+ synfig::info("Selected keyframe set to previous");
+ queue_draw();
+ return true;
+ }
+ else
+ {
+ set_selected_keyframe(*(kf_list_->find_next(t)));
+ synfig::info("Selected keyframe set to next");
+ queue_draw();
+ return true;
+ }
+
+ return false;