Sorry about the late reply.
Actually, I kept looking at cursor that moves during selection. I thought if I could, somehow, make openfilestruct's variable 'current' free of this duty (to move cursor during marking text) it would stay right in place and screen won't scroll as those calculation are based on it. So, I added mark_end and functions to move tem. However, that doesn't works well as problem was with edittop, not current. :\
Value of edittop is lost at move_to_filestruct(). Same goes for current but that is easily calculated as it is bottom of marking. As far I could try, there is no way to recalculate edittop's value. So, we will have to backup that value before calling move_to_fielstruct() and copy_from_filestruct() basically what you did in patch you sent. But, saving current's and current_x's value is redundant. I did confirmed it by testing few times.
Or, now I realise, we can save edittop from any manipulation in move_to_filestruct() when we are copying text. Is that good idea? I feel it won't be as clean remembering and restoring.