]> git.decadent.org.uk Git - videolink.git/blobdiff - browser_widget.cpp
Added support for XULRunner/GRE 1.9:
[videolink.git] / browser_widget.cpp
index 46d1fb5e0ba97706c4d72414b9dad053464c9046..07df0d0e86250c72957526144c57b27f1b23b769 100644 (file)
@@ -1,11 +1,21 @@
-// Copyright 2005 Ben Hutchings <ben@decadent.org.uk>.
+// Copyright 2005-8 Ben Hutchings <ben@decadent.org.uk>.
 // See the file "COPYING" for licence details.
 
 #include "browser_widget.hpp"
 
 #include <cassert>
+#include <cstring>
+
+#include <limits.h>
 
 #include <gtkmozembed_internal.h>
+#if MOZ_VERSION_MAJOR == 1 && MOZ_VERSION_MINOR == 9
+#include <gtkmozembed_glue.cpp>
+#endif
+
+#include "xpcom_support.hpp"
+
+using xpcom_support::check;
 
 browser_widget::browser_widget()
        : Gtk::Bin(GTK_BIN(gtk_moz_embed_new()))
@@ -518,7 +528,26 @@ Glib::ObjectBase * browser_widget::wrap_new(GObject * gobject)
 
 browser_widget::initialiser::initialiser()
 {
+#if MOZ_VERSION_MAJOR == 1 && MOZ_VERSION_MINOR == 9
+    static const GREVersionRange gre_versions = {
+       "1.9a", PR_TRUE,
+       "1.9.*", PR_TRUE
+    };
+    char path[PATH_MAX];
+    check(GRE_GetGREPathWithProperties(&gre_versions, 1, 0, 0,
+                                      path, sizeof(path)));
+
+    check(XPCOMGlueStartup(path));
+    check(GTKEmbedGlueStartup());
+
+    char * last_slash = std::strrchr(path, '/');
+    if (last_slash != path)
+       *last_slash = '\0';
+    gtk_moz_embed_set_path(path);
+#else
     gtk_moz_embed_set_comp_path(MOZ_LIB_DIR);
+#endif
+
     gtk_moz_embed_push_startup();
 
     wrap_register(gtk_moz_embed_get_type(), wrap_new);
@@ -527,6 +556,10 @@ browser_widget::initialiser::initialiser()
 browser_widget::initialiser::~initialiser()
 {
     gtk_moz_embed_pop_startup();
+
+#if MOZ_VERSION_MAJOR == 1 && MOZ_VERSION_MINOR == 9
+    XPCOMGlueShutdown();
+#endif
 }
 
 namespace Glib