Changed use of loading state variables so that pages will never be processed while...
authorBen Hutchings <ben@decadent.org.uk>
Sun, 27 Nov 2005 23:58:58 +0000 (23:58 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Sun, 2 Nov 2008 23:19:46 +0000 (23:19 +0000)
webdvd.cpp

index 94ab121..b1c7fe8 100644 (file)
@@ -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();