X-Git-Url: https://git.decadent.org.uk/gitweb/?p=videolink.git;a=blobdiff_plain;f=browser_widget.cpp;h=3b7a2d442709ccd34fa37048c0cc33ae4f18e4c5;hp=7d640e5cfd358cfa6836a5b1335ec8a3c8e4e5b9;hb=e1f43b883bb767bc7f50b7c96b1579c0dd5b9290;hpb=c5f98ff303d670f72a5d491a5f4e1989d2043219 diff --git a/browser_widget.cpp b/browser_widget.cpp index 7d640e5..3b7a2d4 100644 --- a/browser_widget.cpp +++ b/browser_widget.cpp @@ -1,11 +1,21 @@ -// Copyright 2005 Ben Hutchings . +// Copyright 2005-8 Ben Hutchings . // See the file "COPYING" for licence details. #include "browser_widget.hpp" #include +#include + +#include #include +#if MOZ_VERSION_MAJOR == 1 && MOZ_VERSION_MINOR == 9 +#include +#endif + +#include "xpcom_support.hpp" + +using xpcom_support::check; browser_widget::browser_widget() : Gtk::Bin(GTK_BIN(gtk_moz_embed_new())) @@ -119,15 +129,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 +155,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 +181,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 +207,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 +234,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 +261,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 +287,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 +313,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 +340,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 +377,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 +404,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 +431,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 +528,27 @@ 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()); + 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 +557,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