In ELinks, we have various interrelated structures: - struct document - struct view_state - struct document_view - struct ecmascript_interpreter - struct location
struct document is a canvas on which a (usually HTML) document
has been rendered for some charset. It can be displayed on a
terminal with minimal conversions. It can be kept in the
formatted document cache when it is not being displayed.
It can be displayed in multiple tabs at the same time, I think.
But then there is also document.timeout, which AFAIK should be
local to each tab.
struct location is what is kept in the history of each tab.
I don't understand why we have both struct view_state and struct
document_view. When we're adding a member, how do we decide in
which of the two structures it belongs?
Back in August 2008, I searched for code that connects these
structures to each other or disconnects them again, and wrote the
following notes. But I'm sad to say that I didn't get anywhere
From there.
IIRC, this is relevant to bug 765 or 771.
struct document *document_view::document;
DETACH detach_formatted: doc_view->document = NULL;
struct view_state *document_view::vs;
ATTACH render_document: doc_view->vs = vs;
DETACH render_document: vs->doc_view->vs = NULL;
ATTACH render_document: doc_view->document = document;
DETACH ses_forward: vs->doc_view->vs = NULL;
ATTACH draw_formatted: ses->doc_view->vs = &cur_loc(ses)->vs;
ATTACH goto_mark: vs->doc_view->vs = vs;
DETACH detach_formatted: doc_view->vs = NULL;
DETACH destroy_vs: vs->doc_view->vs = NULL;
struct document_view *view_state::doc_view;
DETACH render_document: vs->doc_view = NULL;
ATTACH render_document: vs->doc_view = doc_view;
DETACH ses_forward: vs->doc_view = NULL;
ATTACH goto_mark: vs->doc_view = doc_view;
DETACH detach_formatted: doc_view->vs->doc_view = NULL;
DETACH destroy_vs: vs->doc_view = NULL;
ATTACH copy_vs: copy_struct(dst, src);
DETACH copy_vs: dst->doc_view = NULL;
struct ecmascript_interpreter *view_state::ecmascript;
DETACH ecmascript_put_interpreter: interpreter->vs->ecmascript = NULL;
ATTACH ecmascript_reset_state: vs->ecmascript =
ecmascript_get_interpreter(vs);
RETACH goto_mark: vs->ecmascript = ecmascript;
DETACH copy_vs: dst->ecmascript = NULL;
struct view_state location::vs;
FOLLOW render_document_frames: vs = &cur_loc(ses)->vs;
FOLLOW render_document_frames: cur_loc(ses)->vs.current_link = n;
FOLLOW l_current_url: struct view_state *vs = &cur_loc(lua_ses)->vs;
FOLLOW script_hook_pre_format_html: struct view_state *vs =
&cur_loc(ses)->vs;
FOLLOW smjs_elinks_get_view_state: vs = &cur_loc(smjs_ses)->vs;
MODIFY copy_location: copy_vs(&dst->vs, &src->vs);
MODIFY destroy_location: destroy_vs(&loc->vs, 1);
FOLLOW reload: loc->vs.ecmascript_fragile = 1;
FOLLOW ses_forward: vs = &loc->vs;
FOLLOW draw_frames: l = &cur_loc(ses)->vs.current_link;
FOLLOW next_frame: vs = &cur_loc(ses)->vs;
LIST_OF(struct frame) location::frames;
struct view_state frame::vs;
FOLLOW format_frame: vs = &frame->vs;
MODIFY try_resolve_frame: ecmascript_reset_state(&target->vs);
MODIFY copy_location: copy_vs(&new_frame->vs, &frame->vs);
MODIFY destroy_location: destroy_vs(&frame->vs, 1);
MODIFY request_frame: init_vs(&frame->vs, uri, -1);
FOLLOW reload: vs = &frame->vs;
CALLER GRAPHS
-------------
detach_formatted
// Parameter struct document_view *doc_view; detaches that from
view_state and document.
render_document
// Parameters struct view_state *vs and struct document_view
*doc_view;
// attaches those to each other, calling
detach_formatted(doc_view) and
// detaching vs from any other document_view.
format_frame
format_frames
@format_frames
@render_document_frames
@render_document_frames
@dump_formatted
render_document_frames
update_status
change_hook_insert_mode
change_hooks...
change_hook_ui
@change_hooks
unibar_set_property
menubar_class...
statusbar_class...
init_session
init_saved_session
decode_session_info
<INTERLINK_NORMAL_MAGIC>...
decode_session_info
handle_interlink_event <EVENT_INIT>...
do_follow_url
follow_url
goto_uri...
goto_uri_frame...
goto_imgmap...
tabwin_func <EVENT_ABORT>...
l_current_document_formatted
init_lua
draw_formatted
change_hook_css...
toggle_document_option...
show_http_error_document...
display_timer...
doc_loading_callback...
tabwin_func <EVENT_REDRAW>...
do_action <ACT_MAIN_BACKSPACE_PREFIX>...
do_action <ACT_MAIN_FRAME_NEXT>...
do_action <ACT_MAIN_FRAME_PREV>...
do_action <ACT_MAIN_RERENDER>...
text_typeahead_handler...
link_typeahead_handler...
toggle_plain_html...
toggle_wrap_text...
try_prefix_key...
do_mouse_event...
destroy_session
tabwin_func <EVENT_ABORT>...
dump_formatted
dump_loading_callback
dump_start
dump_next
@dump_loading_callback
@dump_start
init...
copy_vs
copy_location
@ses_forward
setup_session
@init_session
@goto_mark
@set_mark
ecmascript_put_interpreter
ecmascript_reset_state...
@render_document
ecmascript_protocol_handler...
js_try_resolve_frame...
window_get...
try_resolve_frame...
window_get_property...
call_onsubmit_and_submit...
destroy_vs
destroy_location...
free_history...
clean_unhistory...
ses_history_move...
@ses_forward
setup_session...
ses_forward
tp_display...
setup_download_handler...
do_move <TASK_RELOAD>...
@dump_formatted
goto_mark
try_mark_key <KP_MARK_GOTO>
frame_ev_kbd
frame_ev <EVENT_KBD>
send_to_frame...
do_mouse_event...
send_kbd_event
send_event...
free_mark_by_index...
set_mark
@try_mark_key <KP_MARK_SET>
done_marks...
pgp1vMFc9ijCr.pgp
Description: PGP signature
_______________________________________________ elinks-dev mailing list [email protected] http://linuxfromscratch.org/mailman/listinfo/elinks-dev
