From 54bfce91fbf10e69a3782c30aa381fdbf3bc7a5d Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Sat, 19 May 2007 17:18:51 +0000 Subject: Give access to nsIWebBrowser to python --- (limited to 'src') diff --git a/src/.gitignore b/src/.gitignore index 39a0668..89f50e0 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1 +1,3 @@ .deps +.libs +hulahop.c diff --git a/src/Makefile.am b/src/Makefile.am index 8abb20b..b6c894a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -10,10 +10,12 @@ INCLUDES = \ -I$(MOZILLA_INCLUDE_ROOT)/docshell \ -I$(MOZILLA_INCLUDE_ROOT)/xulapp \ -I$(MOZILLA_INCLUDE_ROOT)/nspr \ + -I$(MOZILLA_INCLUDE_ROOT)/pyxpcom \ -I$(MOZILLA_INCLUDE_ROOT)/string \ -I$(MOZILLA_INCLUDE_ROOT)/webbrwsr \ -I$(MOZILLA_INCLUDE_ROOT)/widget \ - -I$(MOZILLA_INCLUDE_ROOT)/xpcom + -I$(MOZILLA_INCLUDE_ROOT)/xpcom \ + -DMOZILLA_HOME=\"$(MOZILLA_HOME)\" pkgpyexec_LTLIBRARIES = _hulahop.la diff --git a/src/__init__.py b/src/__init__.py index 9d9afbb..86be877 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -1,6 +1,20 @@ from hulahop import _hulahop +_hulahop.startup() + +from xpcom import components +from xpcom.components import interfaces + class Browser(_hulahop.Browser): def __init__(self): _hulahop.Browser.__init__(self) + def get_document(self): + browser = self.get_browser() + if not browser: + return None + else: + web_browser = browser.queryInterface(interfaces.nsIWebBrowser) + return web_browser.contentDOMWindow + + document = property(get_document) diff --git a/src/hulahop-browser.cpp b/src/hulahop-browser.cpp index b353765..40d6562 100644 --- a/src/hulahop-browser.cpp +++ b/src/hulahop-browser.cpp @@ -21,8 +21,10 @@ #include #include #include +#include #include #include +#include #include "hulahop-browser.h" #include "HulahopDirectoryProvider.h" @@ -43,12 +45,27 @@ static GObjectClass *parent_class = NULL; static const HulahopDirectoryProvider kDirectoryProvider; -static void +gboolean hulahop_startup() { - XRE_InitEmbedding(nsnull, nsnull, - NS_CONST_CAST(HulahopDirectoryProvider *, + nsresult rv; + + nsCOMPtr greDir; + rv = NS_NewNativeLocalFile(nsCString(MOZILLA_HOME), PR_TRUE, + getter_AddRefs(greDir)); + NS_ENSURE_SUCCESS(rv, FALSE); + + nsCOMPtr binDir; + rv = NS_NewNativeLocalFile(nsCString(MOZILLA_HOME"/components"), PR_TRUE, + getter_AddRefs(binDir)); + NS_ENSURE_SUCCESS(rv, FALSE); + + rv = XRE_InitEmbedding(greDir, binDir, + NS_CONST_CAST(HulahopDirectoryProvider *, &kDirectoryProvider), nsnull, 0); + NS_ENSURE_SUCCESS(rv, FALSE); + + return TRUE; } static void @@ -130,6 +147,11 @@ static void hulahop_browser_init(HulahopBrowser *browser) { GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(browser), GTK_NO_WINDOW); +} - hulahop_startup(); +PyObject * +hulahop_browser_get_browser (HulahopBrowser *browser) +{ + return PyObject_FromNSInterface(browser->browser, + NS_GET_IID(nsIWebBrowser), PR_FALSE); } diff --git a/src/hulahop-browser.h b/src/hulahop-browser.h index d4d9215..7116999 100644 --- a/src/hulahop-browser.h +++ b/src/hulahop-browser.h @@ -20,6 +20,7 @@ #ifndef __HULAHOP_BROWSER_H__ #define __HULAHOP_BROWSER_H__ +#include #include G_BEGIN_DECLS @@ -34,7 +35,10 @@ typedef struct _HulahopBrowserClass HulahopBrowserClass; #define HULAHOP_IS_BROWSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), HULAHOP_TYPE_BROWSER)) #define HULAHOP_BROWSER_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), HULAHOP_TYPE_BROWSER, HulahopBrowserClass)) -GType hulahop_browser_get_type (void); +gboolean hulahop_startup (void); + +GType hulahop_browser_get_type (void); +PyObject *hulahop_browser_get_browser (HulahopBrowser *browser); G_END_DECLS diff --git a/src/hulahop.defs b/src/hulahop.defs index c3c2854..ff7017f 100644 --- a/src/hulahop.defs +++ b/src/hulahop.defs @@ -1,9 +1,17 @@ -;; -*- scheme -*- -; object definitions ... - (define-object Browser (in-module "Hulahop") (parent "GtkBin") (c-name "HulahopBrowser") (gtype-id "HULAHOP_TYPE_BROWSER") ) + +(define-method get_browser + (of-object "HulahopBrowser") + (c-name "hulahop_browser_get_browser") + (return-type "none") +) + +(define-function startup + (c-name "hulahop_startup") + (return-type "gboolean") +) diff --git a/src/hulahop.override b/src/hulahop.override index b232bcb..bdc0729 100644 --- a/src/hulahop.override +++ b/src/hulahop.override @@ -15,3 +15,10 @@ ignore-glob *_get_type _* %% +override hulahop_browser_get_browser noargs +static PyObject * +_wrap_hulahop_browser_get_browser(PyGObject *self) +{ + return hulahop_browser_get_browser(HULAHOP_BROWSER(self->obj)); +} +%% -- cgit v0.9.1