std::map<std::string, ResourceEntry> resource_map_;
std::vector<std::vector<std::string> > page_links_;
std::vector<std::string> video_paths_;
- bool loading_;
+ bool pending_window_update_;
int pending_req_count_;
std::auto_ptr<temp_file> background_temp_;
struct link_state;
: frame_params_(frame_params),
output_dir_(output_dir),
stylesheet_(load_css("file://" WEBDVD_LIB_DIR "/webdvd.css")),
- loading_(false),
+ pending_window_update_(false),
pending_req_count_(0)
{
set_default_size(frame_params_.width, frame_params_.height);
void WebDvdWindow::load_next_page()
{
- loading_ = true;
-
assert(!page_queue_.empty());
const std::string & uri = page_queue_.front();
std::cout << "loading " << uri << std::endl;
std::size_t page_count = page_links_.size();
resource_map_[uri].second = ++page_count;
page_links_.resize(page_count);
+
+ pending_window_update_ = true;
browser_widget_.load_uri(uri);
}
void WebDvdWindow::on_net_state_change(const char * uri,
gint flags, guint status)
{
- enum {
- process_nothing,
- process_new_page,
- process_current_link
- } action = process_nothing;
-
if (flags & GTK_MOZ_EMBED_FLAG_IS_REQUEST)
{
if (flags & GTK_MOZ_EMBED_FLAG_START)
++pending_req_count_;
+
if (flags & GTK_MOZ_EMBED_FLAG_STOP)
{
assert(pending_req_count_ != 0);
--pending_req_count_;
}
- if (pending_req_count_ == 0 && link_state_.get())
- action = process_current_link;
}
if (flags & GTK_MOZ_EMBED_FLAG_STOP
&& flags & GTK_MOZ_EMBED_FLAG_IS_WINDOW)
- action = process_new_page;
+ pending_window_update_ = false;
- if (action != process_nothing)
+ if (pending_req_count_ == 0 && !pending_window_update_)
{
- assert(loading_ && !page_queue_.empty());
- assert(pending_req_count_ == 0);
+ assert(!page_queue_.empty());
try
{
check(browser->GetContentDOMWindow(
getter_AddRefs(dom_window)));
- if (action == process_new_page)
+ if (!link_state_.get())
{
apply_style_sheet(stylesheet_, pres_shell);
save_screenshot();