From bda60471816c8d1bf6a86d8ebe3ab0459226515c Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Sun, 27 Nov 2005 23:58:58 +0000 Subject: [PATCH] Changed use of loading state variables so that pages will never be processed while there are still pending requests (this could happen previously, contrary to an assertion). --- webdvd.cpp | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/webdvd.cpp b/webdvd.cpp index 94ab121..b1c7fe8 100644 --- a/webdvd.cpp +++ b/webdvd.cpp @@ -165,7 +165,7 @@ namespace std::map resource_map_; std::vector > page_links_; std::vector video_paths_; - bool loading_; + bool pending_window_update_; int pending_req_count_; std::auto_ptr background_temp_; struct link_state; @@ -180,7 +180,7 @@ namespace : 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); @@ -220,8 +220,6 @@ namespace void WebDvdWindow::load_next_page() { - loading_ = true; - assert(!page_queue_.empty()); const std::string & uri = page_queue_.front(); std::cout << "loading " << uri << std::endl; @@ -229,39 +227,33 @@ namespace 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 { @@ -283,7 +275,7 @@ namespace check(browser->GetContentDOMWindow( getter_AddRefs(dom_window))); - if (action == process_new_page) + if (!link_state_.get()) { apply_style_sheet(stylesheet_, pres_shell); save_screenshot(); -- 2.39.5