X-Git-Url: https://git.decadent.org.uk/gitweb/?p=videolink.git;a=blobdiff_plain;f=browser_widget.cpp;h=baa0748b36eafb9863cfceb7fda2ccbdbb506664;hp=0f6b53da24b018c822bd8fad8236b17accc6f79d;hb=d67e544e6a97be82fad02b80625eb17692dec87a;hpb=0acb5f1329d294faf42e247f8c2daf68d82150f6 diff --git a/browser_widget.cpp b/browser_widget.cpp index 0f6b53d..baa0748 100644 --- a/browser_widget.cpp +++ b/browser_widget.cpp @@ -1,11 +1,23 @@ -// Copyright 2005 Ben Hutchings . +// Copyright 2005-8 Ben Hutchings . // See the file "COPYING" for licence details. #include "browser_widget.hpp" #include +#include +#include + +#include "wchar_t_short.h" #include +#if MOZ_VERSION_MAJOR == 1 && MOZ_VERSION_MINOR == 9 +#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 +131,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 +157,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 +183,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 +209,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 +236,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 +263,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 +289,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 +315,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 +342,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 +379,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 +406,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 +433,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 +530,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 +559,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