Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2007-05-19 17:18:51 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2007-05-19 17:18:51 (GMT)
commit54bfce91fbf10e69a3782c30aa381fdbf3bc7a5d (patch)
tree63cc26baadd36078a57234119cb007dd16678c40 /src
parente77e975333ac47677c48b57cea0ef6f785609941 (diff)
Give access to nsIWebBrowser to python
Diffstat (limited to 'src')
-rw-r--r--src/.gitignore2
-rw-r--r--src/Makefile.am4
-rw-r--r--src/__init__.py14
-rw-r--r--src/hulahop-browser.cpp30
-rw-r--r--src/hulahop-browser.h6
-rw-r--r--src/hulahop.defs14
-rw-r--r--src/hulahop.override7
7 files changed, 68 insertions, 9 deletions
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 <nsComponentManagerUtils.h>
#include <nsCOMPtr.h>
#include <nsIWebBrowser.h>
+#include <nsILocalFile.h>
#include <nsIBaseWindow.h>
#include <nsXULAppAPI.h>
+#include <PyXPCOM.h>
#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<nsILocalFile> greDir;
+ rv = NS_NewNativeLocalFile(nsCString(MOZILLA_HOME), PR_TRUE,
+ getter_AddRefs(greDir));
+ NS_ENSURE_SUCCESS(rv, FALSE);
+
+ nsCOMPtr<nsILocalFile> 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 <Python.h>
#include <gtk/gtkbin.h>
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));
+}
+%%