X-Git-Url: https://git.decadent.org.uk/gitweb/?p=videolink.git;a=blobdiff_plain;f=browser_widget.cpp;h=cff4a7dab2b52f8fb9362d0f74bc701036497686;hp=7d640e5cfd358cfa6836a5b1335ec8a3c8e4e5b9;hb=HEAD;hpb=c5f98ff303d670f72a5d491a5f4e1989d2043219 diff --git a/browser_widget.cpp b/browser_widget.cpp index 7d640e5..cff4a7d 100644 --- a/browser_widget.cpp +++ b/browser_widget.cpp @@ -1,11 +1,24 @@ -// Copyright 2005 Ben Hutchings . +// Copyright 2005-8 Ben Hutchings . // See the file "COPYING" for licence details. #include "browser_widget.hpp" #include +#include +#include + +#include "videolink.hpp" +#include "wchar_t_short.h" #include +#if MOZ_VERSION_GE(1,9,0) +#include +#endif +#include "wchar_t_default.h" + +#include "xpcom_support.hpp" + +using xpcom_support::check; browser_widget::browser_widget() : Gtk::Bin(GTK_BIN(gtk_moz_embed_new())) @@ -119,15 +132,15 @@ namespace { void browser_widget_signal_link_message_callback(GtkMozEmbed * self, void * data) { - typedef SigC::Slot0 SlotType; + typedef sigc::slot SlotType; if (Glib::ObjectBase::_get_current_wrapper((GObject *)self)) { try { - if (SigC::SlotNode * const slot = + if (sigc::slot_base * const slot = Glib::SignalProxyNormal::data_to_slot(data)) - (*(SlotType::Proxy)(slot->proxy_))(slot); + (*static_cast(slot))(); } catch(...) { @@ -145,15 +158,15 @@ namespace void browser_widget_signal_js_status_callback(GtkMozEmbed * self, void * data) { - typedef SigC::Slot0 SlotType; + typedef sigc::slot SlotType; if (Glib::ObjectBase::_get_current_wrapper((GObject *)self)) { try { - if (SigC::SlotNode * const slot = + if (sigc::slot_base * const slot = Glib::SignalProxyNormal::data_to_slot(data)) - (*(SlotType::Proxy)(slot->proxy_))(slot); + (*static_cast(slot))(); } catch(...) { @@ -171,15 +184,15 @@ namespace void browser_widget_signal_location_callback(GtkMozEmbed * self, void * data) { - typedef SigC::Slot0 SlotType; + typedef sigc::slot SlotType; if (Glib::ObjectBase::_get_current_wrapper((GObject *)self)) { try { - if (SigC::SlotNode * const slot = + if (sigc::slot_base * const slot = Glib::SignalProxyNormal::data_to_slot(data)) - (*(SlotType::Proxy)(slot->proxy_))(slot); + (*static_cast(slot))(); } catch(...) { @@ -197,15 +210,15 @@ namespace void browser_widget_signal_title_callback(GtkMozEmbed * self, void * data) { - typedef SigC::Slot0 SlotType; + typedef sigc::slot SlotType; if (Glib::ObjectBase::_get_current_wrapper((GObject *)self)) { try { - if (SigC::SlotNode * const slot = + if (sigc::slot_base * const slot = Glib::SignalProxyNormal::data_to_slot(data)) - (*(SlotType::Proxy)(slot->proxy_))(slot); + (*static_cast(slot))(); } catch(...) { @@ -224,15 +237,15 @@ namespace void browser_widget_signal_progress_callback( GtkMozEmbed * self, gint p0, gint p1, void * data) { - typedef SigC::Slot2 SlotType; + typedef sigc::slot SlotType; if (Glib::ObjectBase::_get_current_wrapper((GObject *)self)) { try { - if (SigC::SlotNode * const slot = + if (sigc::slot_base * const slot = Glib::SignalProxyNormal::data_to_slot(data)) - (*(SlotType::Proxy)(slot->proxy_))(p0, p1, slot); + (*static_cast(slot))(p0, p1); } catch(...) { @@ -251,15 +264,15 @@ namespace void browser_widget_signal_net_state_callback( GtkMozEmbed * self, const char * p0, gint p1, guint p2, void * data) { - typedef SigC::Slot3 SlotType; + typedef sigc::slot SlotType; if (Glib::ObjectBase::_get_current_wrapper((GObject *)self)) { try { - if (SigC::SlotNode * const slot = + if (sigc::slot_base * const slot = Glib::SignalProxyNormal::data_to_slot(data)) - (*(SlotType::Proxy)(slot->proxy_))(p0, p1, p2, slot); + (*static_cast(slot))(p0, p1, p2); } catch(...) { @@ -277,15 +290,15 @@ namespace void browser_widget_signal_net_start_callback(GtkMozEmbed * self, void * data) { - typedef SigC::Slot0 SlotType; + typedef sigc::slot SlotType; if (Glib::ObjectBase::_get_current_wrapper((GObject *)self)) { try { - if (SigC::SlotNode * const slot = + if (sigc::slot_base * const slot = Glib::SignalProxyNormal::data_to_slot(data)) - (*(SlotType::Proxy)(slot->proxy_))(slot); + (*static_cast(slot))(); } catch(...) { @@ -303,15 +316,15 @@ namespace void browser_widget_signal_net_stop_callback(GtkMozEmbed * self, void * data) { - typedef SigC::Slot0 SlotType; + typedef sigc::slot SlotType; if (Glib::ObjectBase::_get_current_wrapper((GObject *)self)) { try { - if (SigC::SlotNode * const slot = + if (sigc::slot_base * const slot = Glib::SignalProxyNormal::data_to_slot(data)) - (*(SlotType::Proxy)(slot->proxy_))(slot); + (*static_cast(slot))(); } catch(...) { @@ -330,17 +343,17 @@ namespace void browser_widget_signal_new_window_callback( GtkMozEmbed * self, GtkMozEmbed ** p0, guint p1, void * data) { - typedef SigC::Slot1 SlotType; + typedef sigc::slot SlotType; if (Glib::ObjectBase::_get_current_wrapper((GObject *)self)) { try { - if (SigC::SlotNode * const slot = + if (sigc::slot_base * const slot = Glib::SignalProxyNormal::data_to_slot(data)) { if (browser_widget * result = - (*(SlotType::Proxy)(slot->proxy_))(p1, slot)) + (*static_cast(slot))(p1)) { *p0 = result->gobj(); return; @@ -367,15 +380,15 @@ namespace void browser_widget_signal_visibility_callback( GtkMozEmbed * self, gboolean p0, void * data) { - typedef SigC::Slot1 SlotType; + typedef sigc::slot SlotType; if (Glib::ObjectBase::_get_current_wrapper((GObject *)self)) { try { - if (SigC::SlotNode * const slot = + if (sigc::slot_base * const slot = Glib::SignalProxyNormal::data_to_slot(data)) - (*(SlotType::Proxy)(slot->proxy_))(p0, slot); + (*static_cast(slot))(p0); } catch(...) { @@ -394,15 +407,15 @@ namespace void browser_widget_signal_destroy_browser_callback( GtkMozEmbed * self, void * data) { - typedef SigC::Slot0 SlotType; + typedef sigc::slot SlotType; if (Glib::ObjectBase::_get_current_wrapper((GObject *)self)) { try { - if (SigC::SlotNode * const slot = + if (sigc::slot_base * const slot = Glib::SignalProxyNormal::data_to_slot(data)) - (*(SlotType::Proxy)(slot->proxy_))(slot); + (*static_cast(slot))(); } catch(...) { @@ -421,15 +434,15 @@ namespace gint browser_widget_signal_open_uri_callback( GtkMozEmbed * self, const char * p0, void * data) { - typedef SigC::Slot1 SlotType; + typedef sigc::slot SlotType; if (Glib::ObjectBase::_get_current_wrapper((GObject *)self)) { try { - if (SigC::SlotNode * const slot = + if (sigc::slot_base * const slot = Glib::SignalProxyNormal::data_to_slot(data)) - return (*(SlotType::Proxy)(slot->proxy_))(p0, slot); + return (*static_cast(slot))(p0); } catch(...) { @@ -518,7 +531,40 @@ Glib::ObjectBase * browser_widget::wrap_new(GObject * gobject) browser_widget::initialiser::initialiser() { +#if MOZ_VERSION_GE(1,9,0) + static const GREVersionRange gre_versions = { +#if MOZ_VERSION_EQ(1,9,0) + "1.9a", PR_TRUE, + "1.9.1", PR_FALSE +#elif MOZ_VERSION_EQ(1,9,1) + "1.9.1", PR_TRUE, + "1.9.2", PR_FALSE +#elif MOZ_VERSION_EQ(2,0,-1) || MOZ_VERSION_EQ(2,0,0) + "2.0b", PR_TRUE, + "2.0.1", PR_FALSE +#elif MOZ_VERSION_EQ(2,0,1) + "2.0.1", PR_TRUE, + "2.0.2", PR_FALSE +#else +#error "version is unsupported, but you could try continuing the pattern above" +#endif + }; + char path[PATH_MAX]; + check(GRE_GetGREPathWithProperties(&gre_versions, 1, 0, 0, + path, sizeof(path))); + + check(XPCOMGlueStartup(path)); + check(GTKEmbedGlueStartup()); + check(GTKEmbedGlueStartupInternal()); + + 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 +573,10 @@ browser_widget::initialiser::initialiser() browser_widget::initialiser::~initialiser() { gtk_moz_embed_pop_startup(); + +#if MOZ_VERSION_GE(1,9,0) + XPCOMGlueShutdown(); +#endif } namespace Glib