X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=webdvd.cpp;h=5eca6c87eafe5a43d865241cff4e83df9b6df3e8;hb=15072d864fc8f74ffd40a6d966622bcf55d8a44b;hp=cf71bb61843abc64a455ed3db46fd045a036ad16;hpb=5ea39fc96beb4f56198cfb975a6a37bbd61d10ed;p=videolink.git diff --git a/webdvd.cpp b/webdvd.cpp index cf71bb6..5eca6c8 100644 --- a/webdvd.cpp +++ b/webdvd.cpp @@ -42,8 +42,11 @@ #include #include // required before nsILink.h #include +#include +#include #include #include +#include #include #include @@ -244,6 +247,45 @@ namespace void WebDvdWindow::on_net_state_change(const char * uri, gint flags, guint status) { +# ifdef DEBUG_ON_NET_STATE_CHANGE + std::cout << "WebDvdWindow::on_net_state_change("; + if (uri) + std::cout << '"' << uri << '"'; + else + std::cout << "NULL"; + std::cout << ", "; + { + gint flags_left = flags; + static const struct { + gint value; + const char * name; + } flag_names[] = { + { GTK_MOZ_EMBED_FLAG_START, "STATE_START" }, + { GTK_MOZ_EMBED_FLAG_REDIRECTING, "STATE_REDIRECTING" }, + { GTK_MOZ_EMBED_FLAG_TRANSFERRING, "STATE_TRANSFERRING" }, + { GTK_MOZ_EMBED_FLAG_NEGOTIATING, "STATE_NEGOTIATING" }, + { GTK_MOZ_EMBED_FLAG_STOP, "STATE_STOP" }, + { GTK_MOZ_EMBED_FLAG_IS_REQUEST, "STATE_IS_REQUEST" }, + { GTK_MOZ_EMBED_FLAG_IS_DOCUMENT, "STATE_IS_DOCUMENT" }, + { GTK_MOZ_EMBED_FLAG_IS_NETWORK, "STATE_IS_NETWORK" }, + { GTK_MOZ_EMBED_FLAG_IS_WINDOW, "STATE_IS_WINDOW" } + }; + for (int i = 0; i != sizeof(flag_names)/sizeof(flag_names[0]); ++i) + { + if (flags & flag_names[i].value) + { + std::cout << flag_names[i].name; + flags_left -= flag_names[i].value; + if (flags_left) + std::cout << " | "; + } + } + if (flags_left) + std::cout << "0x" << std::setbase(16) << flags_left; + } + std::cout << ", " << "0x" << std::setbase(16) << status << ")\n"; +# endif // DEBUG_ON_NET_STATE_CHANGE + if (flags & GTK_MOZ_EMBED_FLAG_IS_REQUEST) { if (flags & GTK_MOZ_EMBED_FLAG_START) @@ -936,6 +978,30 @@ namespace " [--preview] menu-url [output-dir]\n"); } + void set_browser_preferences() + { + // Disable IE-compatibility kluge that causes backgrounds to + // sometimes/usually be missing from snapshots. This is only + // effective from Mozilla 1.8 onward. +# if MOZ_VERSION_MAJOR > 1 \ + || (MOZ_VERSION_MAJOR == 1 && MOZ_VERSION_MINOR >= 8) + nsCOMPtr pref_service; + static const nsCID pref_service_cid = NS_PREFSERVICE_CID; + check(CallGetService(pref_service_cid, + getter_AddRefs(pref_service))); + nsCOMPtr pref_branch; + check(pref_service->GetDefaultBranch("layout", + getter_AddRefs(pref_branch))); + check(pref_branch->SetBoolPref( + "fire_onload_after_image_background_loads", + true)); +# endif + + // TODO: Set display resolution? Unfortunately Mozilla doesn't + // support non-square pixels (and neither do fontconfig or Xft + // anyway). + } + } // namespace int main(int argc, char ** argv) @@ -1052,7 +1118,8 @@ int main(int argc, char ** argv) output_dir = argv[argi + 1]; // Initialise Mozilla - BrowserWidget::init(); + BrowserWidget::Initialiser browser_init; + set_browser_preferences(); // Run the browser/converter WebDvdWindow window(frame_params, menu_url, output_dir);