1 // Copyright 2005 Ben Hutchings <ben@decadent.org.uk>.
2 // See the file "COPYING" for licence details.
4 #include "browser_widget.hpp"
8 #include <gtkmozembed_internal.h>
10 browser_widget::browser_widget()
11 : Gtk::Bin(GTK_BIN(gtk_moz_embed_new()))
14 browser_widget::~browser_widget()
18 GtkMozEmbed * browser_widget::gobj()
20 return GTK_MOZ_EMBED(gobject_);
22 const GtkMozEmbed * browser_widget::gobj() const
24 return GTK_MOZ_EMBED(gobject_);
27 void browser_widget::load_uri(const char * uri)
29 gtk_moz_embed_load_url(gobj(), uri);
31 void browser_widget::load_uri(const std::string & uri)
33 return load_uri(uri.c_str());
35 void browser_widget::stop_load()
37 gtk_moz_embed_stop_load(gobj());
39 void browser_widget::go_back()
41 gtk_moz_embed_go_back(gobj());
43 void browser_widget::go_forward()
45 gtk_moz_embed_go_forward(gobj());
47 void browser_widget::reload(gint32 flags)
49 gtk_moz_embed_reload(gobj(), flags);
52 bool browser_widget::can_go_back() const
54 return gtk_moz_embed_can_go_back(const_cast<GtkMozEmbed *>(gobj()));
56 bool browser_widget::can_go_forward() const
58 return gtk_moz_embed_can_go_forward(const_cast<GtkMozEmbed *>(gobj()));
67 explicit c_scoped_ptr(T * p = 0) : p_(p) {}
68 ~c_scoped_ptr() { free(p_); }
69 T * get() const { return p_; }
86 std::string browser_widget::get_link_message() const
88 c_scoped_ptr<char> str(
89 gtk_moz_embed_get_link_message(const_cast<GtkMozEmbed *>(gobj())));
90 return std::string(str.get());
92 std::string browser_widget::get_js_status() const
94 c_scoped_ptr<char> str(
95 gtk_moz_embed_get_js_status(const_cast<GtkMozEmbed *>(gobj())));
96 return std::string(str.get());
98 std::string browser_widget::get_title() const
100 c_scoped_ptr<char> str(
101 gtk_moz_embed_get_title(const_cast<GtkMozEmbed *>(gobj())));
102 return std::string(str.get());
104 std::string browser_widget::get_location() const
106 c_scoped_ptr<char> str(
107 gtk_moz_embed_get_location(const_cast<GtkMozEmbed *>(gobj())));
108 return std::string(str.get());
110 already_AddRefed<nsIWebBrowser> browser_widget::get_browser()
112 nsIWebBrowser * result = 0;
113 gtk_moz_embed_get_nsIWebBrowser(gobj(), &result);
115 return dont_AddRef(result);
120 void browser_widget_signal_link_message_callback(GtkMozEmbed * self, void * data)
122 typedef sigc::slot<void> SlotType;
124 if (Glib::ObjectBase::_get_current_wrapper((GObject *)self))
128 if (sigc::slot_base * const slot =
129 Glib::SignalProxyNormal::data_to_slot(data))
130 (*static_cast<SlotType*>(slot))();
134 Glib::exception_handlers_invoke();
139 const Glib::SignalProxyInfo browser_widget_signal_link_message_info =
142 (GCallback) &browser_widget_signal_link_message_callback,
143 (GCallback) &browser_widget_signal_link_message_callback
146 void browser_widget_signal_js_status_callback(GtkMozEmbed * self, void * data)
148 typedef sigc::slot<void> SlotType;
150 if (Glib::ObjectBase::_get_current_wrapper((GObject *)self))
154 if (sigc::slot_base * const slot =
155 Glib::SignalProxyNormal::data_to_slot(data))
156 (*static_cast<SlotType*>(slot))();
160 Glib::exception_handlers_invoke();
165 const Glib::SignalProxyInfo browser_widget_signal_js_status_info =
168 (GCallback) &browser_widget_signal_js_status_callback,
169 (GCallback) &browser_widget_signal_js_status_callback
172 void browser_widget_signal_location_callback(GtkMozEmbed * self, void * data)
174 typedef sigc::slot<void> SlotType;
176 if (Glib::ObjectBase::_get_current_wrapper((GObject *)self))
180 if (sigc::slot_base * const slot =
181 Glib::SignalProxyNormal::data_to_slot(data))
182 (*static_cast<SlotType*>(slot))();
186 Glib::exception_handlers_invoke();
191 const Glib::SignalProxyInfo browser_widget_signal_location_info =
194 (GCallback) &browser_widget_signal_location_callback,
195 (GCallback) &browser_widget_signal_location_callback
198 void browser_widget_signal_title_callback(GtkMozEmbed * self, void * data)
200 typedef sigc::slot<void> SlotType;
202 if (Glib::ObjectBase::_get_current_wrapper((GObject *)self))
206 if (sigc::slot_base * const slot =
207 Glib::SignalProxyNormal::data_to_slot(data))
208 (*static_cast<SlotType*>(slot))();
212 Glib::exception_handlers_invoke();
217 const Glib::SignalProxyInfo browser_widget_signal_title_info =
220 (GCallback) &browser_widget_signal_title_callback,
221 (GCallback) &browser_widget_signal_title_callback
224 void browser_widget_signal_progress_callback(
225 GtkMozEmbed * self, gint p0, gint p1, void * data)
227 typedef sigc::slot<void, gint, gint> SlotType;
229 if (Glib::ObjectBase::_get_current_wrapper((GObject *)self))
233 if (sigc::slot_base * const slot =
234 Glib::SignalProxyNormal::data_to_slot(data))
235 (*static_cast<SlotType*>(slot))(p0, p1);
239 Glib::exception_handlers_invoke();
244 const Glib::SignalProxyInfo browser_widget_signal_progress_info =
247 (GCallback) &browser_widget_signal_progress_callback,
248 (GCallback) &browser_widget_signal_progress_callback
251 void browser_widget_signal_net_state_callback(
252 GtkMozEmbed * self, const char * p0, gint p1, guint p2, void * data)
254 typedef sigc::slot<void, const char *, gint, guint> SlotType;
256 if (Glib::ObjectBase::_get_current_wrapper((GObject *)self))
260 if (sigc::slot_base * const slot =
261 Glib::SignalProxyNormal::data_to_slot(data))
262 (*static_cast<SlotType*>(slot))(p0, p1, p2);
266 Glib::exception_handlers_invoke();
271 const Glib::SignalProxyInfo browser_widget_signal_net_state_info =
274 (GCallback) &browser_widget_signal_net_state_callback,
275 (GCallback) &browser_widget_signal_net_state_callback
278 void browser_widget_signal_net_start_callback(GtkMozEmbed * self, void * data)
280 typedef sigc::slot<void> SlotType;
282 if (Glib::ObjectBase::_get_current_wrapper((GObject *)self))
286 if (sigc::slot_base * const slot =
287 Glib::SignalProxyNormal::data_to_slot(data))
288 (*static_cast<SlotType*>(slot))();
292 Glib::exception_handlers_invoke();
297 const Glib::SignalProxyInfo browser_widget_signal_net_start_info =
300 (GCallback) &browser_widget_signal_net_start_callback,
301 (GCallback) &browser_widget_signal_net_start_callback
304 void browser_widget_signal_net_stop_callback(GtkMozEmbed * self, void * data)
306 typedef sigc::slot<void> SlotType;
308 if (Glib::ObjectBase::_get_current_wrapper((GObject *)self))
312 if (sigc::slot_base * const slot =
313 Glib::SignalProxyNormal::data_to_slot(data))
314 (*static_cast<SlotType*>(slot))();
318 Glib::exception_handlers_invoke();
323 const Glib::SignalProxyInfo browser_widget_signal_net_stop_info =
326 (GCallback) &browser_widget_signal_net_stop_callback,
327 (GCallback) &browser_widget_signal_net_stop_callback
330 void browser_widget_signal_new_window_callback(
331 GtkMozEmbed * self, GtkMozEmbed ** p0, guint p1, void * data)
333 typedef sigc::slot<browser_widget *, guint> SlotType;
335 if (Glib::ObjectBase::_get_current_wrapper((GObject *)self))
339 if (sigc::slot_base * const slot =
340 Glib::SignalProxyNormal::data_to_slot(data))
342 if (browser_widget * result =
343 (*static_cast<SlotType*>(slot))(p1))
345 *p0 = result->gobj();
352 Glib::exception_handlers_invoke();
360 const Glib::SignalProxyInfo browser_widget_signal_new_window_info =
363 (GCallback) &browser_widget_signal_new_window_callback,
364 (GCallback) &browser_widget_signal_new_window_callback
367 void browser_widget_signal_visibility_callback(
368 GtkMozEmbed * self, gboolean p0, void * data)
370 typedef sigc::slot<void, bool> SlotType;
372 if (Glib::ObjectBase::_get_current_wrapper((GObject *)self))
376 if (sigc::slot_base * const slot =
377 Glib::SignalProxyNormal::data_to_slot(data))
378 (*static_cast<SlotType*>(slot))(p0);
382 Glib::exception_handlers_invoke();
387 const Glib::SignalProxyInfo browser_widget_signal_visibility_info =
390 (GCallback) &browser_widget_signal_visibility_callback,
391 (GCallback) &browser_widget_signal_visibility_callback
394 void browser_widget_signal_destroy_browser_callback(
395 GtkMozEmbed * self, void * data)
397 typedef sigc::slot<void> SlotType;
399 if (Glib::ObjectBase::_get_current_wrapper((GObject *)self))
403 if (sigc::slot_base * const slot =
404 Glib::SignalProxyNormal::data_to_slot(data))
405 (*static_cast<SlotType*>(slot))();
409 Glib::exception_handlers_invoke();
414 const Glib::SignalProxyInfo browser_widget_signal_destroy_info =
417 (GCallback) &browser_widget_signal_destroy_browser_callback,
418 (GCallback) &browser_widget_signal_destroy_browser_callback
421 gint browser_widget_signal_open_uri_callback(
422 GtkMozEmbed * self, const char * p0, void * data)
424 typedef sigc::slot<bool, const char *> SlotType;
426 if (Glib::ObjectBase::_get_current_wrapper((GObject *)self))
430 if (sigc::slot_base * const slot =
431 Glib::SignalProxyNormal::data_to_slot(data))
432 return (*static_cast<SlotType*>(slot))(p0);
436 Glib::exception_handlers_invoke();
443 const Glib::SignalProxyInfo browser_widget_signal_open_uri_info =
446 (GCallback) &browser_widget_signal_open_uri_callback,
447 (GCallback) &browser_widget_signal_open_uri_callback
452 Glib::SignalProxy0<void> browser_widget::signal_link_message()
454 return Glib::SignalProxy0<void>(this, &browser_widget_signal_link_message_info);
456 Glib::SignalProxy0<void> browser_widget::signal_js_status()
458 return Glib::SignalProxy0<void>(this, &browser_widget_signal_js_status_info);
460 Glib::SignalProxy0<void> browser_widget::signal_location()
462 return Glib::SignalProxy0<void>(this, &browser_widget_signal_location_info);
464 Glib::SignalProxy0<void> browser_widget::signal_title()
466 return Glib::SignalProxy0<void>(this, &browser_widget_signal_title_info);
468 Glib::SignalProxy2<void, gint /*cur*/, gint /*max*/> browser_widget::signal_progress()
470 return Glib::SignalProxy2<void, gint, gint>(
471 this, &browser_widget_signal_progress_info);
473 Glib::SignalProxy3<void, const char *, gint /*flags*/, guint /*status*/>
474 browser_widget::signal_net_state()
476 return Glib::SignalProxy3<void, const char *, gint, guint>(
477 this, &browser_widget_signal_net_state_info);
479 Glib::SignalProxy0<void> browser_widget::signal_net_start()
481 return Glib::SignalProxy0<void>(this, &browser_widget_signal_net_start_info);
483 Glib::SignalProxy0<void> browser_widget::signal_net_stop()
485 return Glib::SignalProxy0<void>(this, &browser_widget_signal_net_stop_info);
487 Glib::SignalProxy1<browser_widget *, guint /*chromemask*/> browser_widget::signal_new_window()
489 return Glib::SignalProxy1<browser_widget *, guint>(
490 this, &browser_widget_signal_new_window_info);
492 Glib::SignalProxy1<void, bool /*visibility*/> browser_widget::signal_visibility()
494 return Glib::SignalProxy1<void, bool>(
495 this, &browser_widget_signal_visibility_info);
497 Glib::SignalProxy0<void> browser_widget::signal_destroy()
499 return Glib::SignalProxy0<void>(this, &browser_widget_signal_destroy_info);
501 Glib::SignalProxy1<bool, const char * /*uri*/> browser_widget::signal_open_uri()
503 return Glib::SignalProxy1<bool, const char *>(
504 this, &browser_widget_signal_open_uri_info);
507 browser_widget::browser_widget(GObject * gobject, bool take_copy)
509 assert(GTK_MOZ_EMBED(gobject));
514 Glib::ObjectBase * browser_widget::wrap_new(GObject * gobject)
516 return new browser_widget(gobject, false);
519 browser_widget::initialiser::initialiser()
521 gtk_moz_embed_set_comp_path(MOZ_LIB_DIR);
522 gtk_moz_embed_push_startup();
524 wrap_register(gtk_moz_embed_get_type(), wrap_new);
527 browser_widget::initialiser::~initialiser()
529 gtk_moz_embed_pop_startup();
534 browser_widget * wrap(GtkMozEmbed * object, bool take_copy)
536 return dynamic_cast<browser_widget *>(
537 Glib::wrap_auto((GObject*)(object), take_copy));