check(browser->GetContentDOMWindow(
getter_AddRefs(dom_window)));
- if (!link_state_.get())
+ if (output_dir_.empty())
{
apply_style_sheet(stylesheet_, pres_shell);
- save_screenshot();
}
- process_links(pres_shell, pres_context, dom_window);
- if (!link_state_.get())
+ else
{
- page_queue_.pop();
- if (page_queue_.empty())
+ if (!link_state_.get())
+ {
+ apply_style_sheet(stylesheet_, pres_shell);
+ save_screenshot();
+ }
+
+ process_links(pres_shell, pres_context, dom_window);
+
+ if (!link_state_.get())
{
- generate_dvd();
- Gtk::Main::quit();
+ page_queue_.pop();
+ if (page_queue_.empty())
+ {
+ generate_dvd();
+ Gtk::Main::quit();
+ }
+ else
+ {
+ load_next_page();
+ }
}
- else
- load_next_page();
}
}
catch (std::exception & e)
{
stream << "Usage: " << command_name
<< (" [gtk-options] [--video-std std-name]"
- " front-page-url output-dir\n");
+ " [--preview] menu-url [output-dir]\n");
}
} // namespace
{
try
{
- // Do initial argument parsing. We have to do this before
- // letting Gtk parse the arguments since we need to spawn Xvfb
- // first and that's currently dependent on the frame
- // parameters (though we could just make it large enough for
- // any frame) and also an unnecessary expense in some cases.
video::frame_params frame_params = video::pal_params;
- for (int argi = 1; argi != argc; ++argi)
+ bool preview_mode = false;
+
+ // Do initial argument parsing. We have to do this before
+ // letting Gtk parse the arguments since we may need to spawn
+ // Xvfb first.
+ int argi = 1;
+ while (argi != argc)
{
if (std::strcmp(argv[argi], "--") == 0)
+ {
break;
- if (std::strcmp(argv[argi], "--help") == 0)
+ }
+ else if (std::strcmp(argv[argi], "--help") == 0)
{
print_usage(std::cout, argv[0]);
return EXIT_SUCCESS;
}
- if (std::strcmp(argv[argi], "--video-std") == 0)
+ else if (std::strcmp(argv[argi], "--preview") == 0)
+ {
+ preview_mode = true;
+ argi += 1;
+ }
+ else if (std::strcmp(argv[argi], "--video-std") == 0)
{
if (argi + 1 == argc)
{
return EXIT_FAILURE;
}
frame_params = lookup_frame_params(argv[argi + 1]);
- break;
+ argi += 2;
+ }
+ else
+ {
+ argi += 1;
}
}
-
- // Spawn Xvfb and set env variables so that Xlib will use it
- // Use 8 bits each for RGB components, which should translate into
- // "enough" bits for YUV components.
- FrameBuffer fb(frame_params.width, frame_params.height, 3 * 8);
- setenv("XAUTHORITY", fb.get_x_authority().c_str(), true);
- setenv("DISPLAY", fb.get_x_display().c_str(), true);
+
+ std::auto_ptr<FrameBuffer> fb;
+ if (!preview_mode)
+ {
+ // Spawn Xvfb and set env variables so that Xlib will use it
+ // Use 8 bits each for RGB components, which should translate into
+ // "enough" bits for YUV components.
+ fb.reset(new FrameBuffer(frame_params.width, frame_params.height,
+ 3 * 8));
+ setenv("XAUTHORITY", fb->get_x_authority().c_str(), true);
+ setenv("DISPLAY", fb->get_x_display().c_str(), true);
+ }
// Initialise Gtk
Gtk::Main kit(argc, argv);
// Complete argument parsing with Gtk's options out of the way.
- int argi = 1;
+ argi = 1;
while (argi != argc)
{
- if (std::strcmp(argv[argi], "--video-std") == 0)
+ if (std::strcmp(argv[argi], "--") == 0)
{
- argi += 2;
+ argi += 1;
+ break;
}
- else if (std::strcmp(argv[argi], "--") == 0)
+ else if (std::strcmp(argv[argi], "--preview") == 0)
{
argi += 1;
- break;
+ }
+ else if (std::strcmp(argv[argi], "--video-std") == 0)
+ {
+ argi += 2;
}
else if (argv[argi][0] == '-')
{
return EXIT_FAILURE;
}
else
+ {
break;
+ }
}
- if (argi != argc - 2)
+ if (argc - argi != (preview_mode ? 1 : 2))
{
print_usage(std::cerr, argv[0]);
return EXIT_FAILURE;
// Initialise Mozilla
BrowserWidget::init();
- WebDvdWindow window(frame_params, argv[argi], argv[argi + 1]);
+ WebDvdWindow window(frame_params,
+ argv[argi],
+ preview_mode ? "" : argv[argi + 1]);
Gtk::Main::run(window);
}
catch (std::exception & e)