mirror of
https://github.com/rkd77/elinks.git
synced 2024-12-04 14:46:47 -05:00
Fix refresh after move-page-up with a prefix
Make move_up and move_down return no value. Instead, save the old y value and compare it to the new after calling move_up or move_down in move_page_up or move_page_down, respectively. This fixes a bug where if given a prefix, if that prefix specified a number of pages greater than move-page-up actually scrolled, there would be no screen update, because the last call to move_up would return FRAME_EVENT_OK which would be returned from move_page_up, even tho move_page_up would have previously returned FRAME_EVENT_REFRESH.
This commit is contained in:
parent
888faebaea
commit
76f3dc99b3
@ -80,13 +80,13 @@ detach_formatted(struct document_view *doc_view)
|
|||||||
|
|
||||||
/* type == 0 -> PAGE_DOWN
|
/* type == 0 -> PAGE_DOWN
|
||||||
* type == 1 -> DOWN */
|
* type == 1 -> DOWN */
|
||||||
static enum frame_event_status
|
static void
|
||||||
move_down(struct session *ses, struct document_view *doc_view, int type)
|
move_down(struct session *ses, struct document_view *doc_view, int type)
|
||||||
{
|
{
|
||||||
int newpos;
|
int newpos;
|
||||||
|
|
||||||
assert(ses && doc_view && doc_view->vs);
|
assert(ses && doc_view && doc_view->vs);
|
||||||
if_assert_failed return FRAME_EVENT_OK;
|
if_assert_failed return;
|
||||||
|
|
||||||
assert(ses->navigate_mode == NAVIGATE_LINKWISE); /* XXX: drop it at some time. --Zas */
|
assert(ses->navigate_mode == NAVIGATE_LINKWISE); /* XXX: drop it at some time. --Zas */
|
||||||
|
|
||||||
@ -95,72 +95,66 @@ move_down(struct session *ses, struct document_view *doc_view, int type)
|
|||||||
doc_view->vs->y = newpos;
|
doc_view->vs->y = newpos;
|
||||||
|
|
||||||
if (current_link_is_visible(doc_view))
|
if (current_link_is_visible(doc_view))
|
||||||
return FRAME_EVENT_REFRESH;
|
return;
|
||||||
|
|
||||||
if (type)
|
if (type)
|
||||||
find_link_down(doc_view);
|
find_link_down(doc_view);
|
||||||
else
|
else
|
||||||
find_link_page_down(doc_view);
|
find_link_page_down(doc_view);
|
||||||
|
|
||||||
return FRAME_EVENT_REFRESH;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum frame_event_status
|
enum frame_event_status
|
||||||
move_page_down(struct session *ses, struct document_view *doc_view)
|
move_page_down(struct session *ses, struct document_view *doc_view)
|
||||||
{
|
{
|
||||||
enum frame_event_status status;
|
int oldy = doc_view->vs->y;
|
||||||
int count = eat_kbd_repeat_count(ses);
|
int count = eat_kbd_repeat_count(ses);
|
||||||
|
|
||||||
ses->navigate_mode = NAVIGATE_LINKWISE;
|
ses->navigate_mode = NAVIGATE_LINKWISE;
|
||||||
|
|
||||||
do {
|
do move_down(ses, doc_view, 0); while (--count > 0);
|
||||||
status = move_down(ses, doc_view, 0);
|
|
||||||
if (status != FRAME_EVENT_REFRESH) break;
|
|
||||||
} while (--count > 0);
|
|
||||||
|
|
||||||
return status;
|
return doc_view->vs->y == oldy ? FRAME_EVENT_OK : FRAME_EVENT_REFRESH;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* type == 0 -> PAGE_UP
|
/* type == 0 -> PAGE_UP
|
||||||
* type == 1 -> UP */
|
* type == 1 -> UP */
|
||||||
static enum frame_event_status
|
static void
|
||||||
move_up(struct session *ses, struct document_view *doc_view, int type)
|
move_up(struct session *ses, struct document_view *doc_view, int type)
|
||||||
{
|
{
|
||||||
assert(ses && doc_view && doc_view->vs);
|
assert(ses && doc_view && doc_view->vs);
|
||||||
if_assert_failed return FRAME_EVENT_OK;
|
if_assert_failed return;
|
||||||
|
|
||||||
assert(ses->navigate_mode == NAVIGATE_LINKWISE); /* XXX: drop it at some time. --Zas */
|
assert(ses->navigate_mode == NAVIGATE_LINKWISE); /* XXX: drop it at some time. --Zas */
|
||||||
|
|
||||||
if (doc_view->vs->y == 0) return FRAME_EVENT_OK;
|
if (doc_view->vs->y == 0) return;
|
||||||
|
|
||||||
doc_view->vs->y -= doc_view->box.height;
|
doc_view->vs->y -= doc_view->box.height;
|
||||||
int_lower_bound(&doc_view->vs->y, 0);
|
int_lower_bound(&doc_view->vs->y, 0);
|
||||||
|
|
||||||
if (current_link_is_visible(doc_view))
|
if (current_link_is_visible(doc_view))
|
||||||
return FRAME_EVENT_REFRESH;
|
return;
|
||||||
|
|
||||||
if (type)
|
if (type)
|
||||||
find_link_up(doc_view);
|
find_link_up(doc_view);
|
||||||
else
|
else
|
||||||
find_link_page_up(doc_view);
|
find_link_page_up(doc_view);
|
||||||
|
|
||||||
return FRAME_EVENT_REFRESH;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum frame_event_status
|
enum frame_event_status
|
||||||
move_page_up(struct session *ses, struct document_view *doc_view)
|
move_page_up(struct session *ses, struct document_view *doc_view)
|
||||||
{
|
{
|
||||||
enum frame_event_status status;
|
int oldy = doc_view->vs->y;
|
||||||
int count = eat_kbd_repeat_count(ses);
|
int count = eat_kbd_repeat_count(ses);
|
||||||
|
|
||||||
ses->navigate_mode = NAVIGATE_LINKWISE;
|
ses->navigate_mode = NAVIGATE_LINKWISE;
|
||||||
|
|
||||||
do {
|
do move_up(ses, doc_view, 0); while (--count > 0);
|
||||||
status = move_up(ses, doc_view, 0);
|
|
||||||
if (status != FRAME_EVENT_REFRESH) break;
|
|
||||||
} while (--count > 0);
|
|
||||||
|
|
||||||
return status;
|
return doc_view->vs->y == oldy ? FRAME_EVENT_OK : FRAME_EVENT_REFRESH;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum frame_event_status
|
enum frame_event_status
|
||||||
|
Loading…
Reference in New Issue
Block a user