+
+ class base_window : public Gtk::Window
+ {
+ public:
+ base_window(const video::frame_params & frame_params);
+
+ protected:
+ video::frame_params frame_params_;
+ browser_widget browser_widget_;
+
+ private:
+ bool on_idle();
+ virtual void do_late_initialisation() = 0;
+ };
+
+ base_window::base_window(const video::frame_params & frame_params)
+ : frame_params_(frame_params)
+ {
+ set_size_request(frame_params_.width, frame_params_.height);
+ set_resizable(false);
+
+ add(browser_widget_);
+ browser_widget_.show();
+
+ Glib::signal_idle().connect(SigC::slot(*this, &base_window::on_idle));
+ }
+
+ bool base_window::on_idle()
+ {
+ do_late_initialisation();
+ return false; // don't call again thankyou
+ }
+
+ class preview_window : public base_window
+ {
+ public:
+ preview_window(const video::frame_params & frame_params,
+ const std::string & main_page_uri);
+
+ private:
+ virtual void do_late_initialisation();
+
+ std::string main_page_uri_;
+ };
+
+ preview_window::preview_window(const video::frame_params & frame_params,
+ const std::string & main_page_uri)
+ : base_window(frame_params),
+ main_page_uri_(main_page_uri)
+ {
+ }
+
+ void preview_window::do_late_initialisation()
+ {
+ browser_widget_.load_uri(main_page_uri_);
+ }