From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 27 Nov 2005 23:58:58 +0000 (+0000)
Subject: Changed use of loading state variables so that pages will never be processed while... 
X-Git-Tag: 0.3~1
X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=bda60471816c8d1bf6a86d8ebe3ab0459226515c;p=videolink.git

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).
---

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<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;
@@ -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();