Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/bindings
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-09-27 12:45:55 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-09-27 12:45:55 (GMT)
commitdf6dd4618bfdf4915229349a6dc967890fbf8470 (patch)
tree126bd51f763c6fd5ef5ffd2a6729ad4730f6d140 /bindings
parent7443ee4c8ba36e1867fc7f89096c34d08c1c69da (diff)
Open "requested" popups in a new activity
Diffstat (limited to 'bindings')
-rw-r--r--bindings/gecko/Makefile.am1
-rw-r--r--bindings/gecko/gecko-browser.cpp42
-rw-r--r--bindings/gecko/gecko-browser.h28
-rw-r--r--bindings/gecko/gecko.defs31
-rw-r--r--bindings/gecko/gecko.override11
-rw-r--r--bindings/gecko/geckomodule.c4
6 files changed, 112 insertions, 5 deletions
diff --git a/bindings/gecko/Makefile.am b/bindings/gecko/Makefile.am
index 148d8fa..7da2e52 100644
--- a/bindings/gecko/Makefile.am
+++ b/bindings/gecko/Makefile.am
@@ -26,6 +26,7 @@ EXTRA_DIST = gecko.override gecko.defs
.defs.c:
(cd $(srcdir)\
&& $(PYGTK_CODEGEN) \
+ --register $(GNOMEPYTHONEXTRAS_DEFSDIR)/gtkmozembed.defs \
--override $*.override \
--prefix py$* $*.defs) > gen-$*.c \
&& cp gen-$*.c $*.c \
diff --git a/bindings/gecko/gecko-browser.cpp b/bindings/gecko/gecko-browser.cpp
index d262774..cab07f8 100644
--- a/bindings/gecko/gecko-browser.cpp
+++ b/bindings/gecko/gecko-browser.cpp
@@ -23,7 +23,7 @@
#include <nsServiceManagerUtils.h>
void
-gecko_startup(void)
+gecko_browser_startup(void)
{
nsCOMPtr<nsIPrefService> prefService;
@@ -36,3 +36,43 @@ gecko_startup(void)
pref->SetBoolPref ("dom.disable_open_during_load", TRUE);
}
+
+G_DEFINE_TYPE(GeckoBrowser, gecko_browser, GTK_TYPE_MOZ_EMBED)
+
+//static guint signals[N_SIGNALS];
+
+GeckoBrowser *
+gecko_browser_new(void)
+{
+ return GECKO_BROWSER(g_object_new(GECKO_TYPE_BROWSER, NULL));
+}
+
+static void
+gecko_browser_class_init(GeckoBrowserClass *browser_class)
+{
+}
+
+GeckoBrowser *
+gecko_browser_create_window(GeckoBrowser *browser)
+{
+ return GECKO_BROWSER_GET_CLASS(browser)->create_window(browser);
+}
+
+static void
+gecko_browser_new_window_cb(GtkMozEmbed *embed,
+ GtkMozEmbed **newEmbed,
+ guint chromemask)
+{
+ GeckoBrowser *browser;
+
+ browser = gecko_browser_create_window(GECKO_BROWSER(embed));
+
+ *newEmbed = GTK_MOZ_EMBED(browser);
+}
+
+static void
+gecko_browser_init(GeckoBrowser *browser)
+{
+ g_signal_connect(G_OBJECT(browser), "new-window",
+ G_CALLBACK(gecko_browser_new_window_cb), NULL);
+}
diff --git a/bindings/gecko/gecko-browser.h b/bindings/gecko/gecko-browser.h
index d9564bc..d41d2c5 100644
--- a/bindings/gecko/gecko-browser.h
+++ b/bindings/gecko/gecko-browser.h
@@ -19,11 +19,35 @@
#ifndef __GECKO_BROWSER_H__
#define __GECKO_BROWSER_H__
-#include <glib.h>
+#include <gtkmozembed.h>
G_BEGIN_DECLS
-void gecko_startup (void);
+typedef struct _GeckoBrowser GeckoBrowser;
+typedef struct _GeckoBrowserClass GeckoBrowserClass;
+typedef struct _GeckoBrowserPrivate GeckoBrowserPrivate;
+
+#define GECKO_TYPE_BROWSER (gecko_browser_get_type())
+#define GECKO_BROWSER(object) (G_TYPE_CHECK_INSTANCE_CAST((object), GECKO_TYPE_BROWSER, GeckoBrowser))
+#define GECKO_BROWSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GECKO_TYPE_BROWSER, GeckoBrowserClass))
+#define GECKO_IS_BROWSER(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), GECKO_TYPE_BROWSER))
+#define GECKO_IS_BROWSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GECKO_TYPE_BROWSER))
+#define GECKO_BROWSER_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), GECKO_TYPE_BROWSER, GeckoBrowserClass))
+
+struct _GeckoBrowser {
+ GtkMozEmbed base_instance;
+};
+
+struct _GeckoBrowserClass {
+ GtkMozEmbedClass base_class;
+
+ GeckoBrowser * (* create_window) (GeckoBrowser *browser);
+};
+
+GType gecko_browser_get_type (void);
+void gecko_browser_startup (void);
+GeckoBrowser *gecko_browser_new (void);
+GeckoBrowser *gecko_browser_create_window (GeckoBrowser *browser);
G_END_DECLS
diff --git a/bindings/gecko/gecko.defs b/bindings/gecko/gecko.defs
index 2351e19..c7f6c1a 100644
--- a/bindings/gecko/gecko.defs
+++ b/bindings/gecko/gecko.defs
@@ -1,13 +1,40 @@
;; -*- scheme -*-
; object definitions ...
+(define-object Browser
+ (in-module "Gecko")
+ (parent "GtkMozEmbed")
+ (c-name "GeckoBrowser")
+ (gtype-id "GECKO_TYPE_BROWSER")
+)
+
;; Enumerations and flags ...
-;; From sugar-browser.h
+;; From gecko-browser.h
+
+(define-function get_type
+ (c-name "gecko_browser_get_type")
+ (return-type "GType")
+)
(define-function startup
- (c-name "gecko_startup")
+ (c-name "gecko_browser_startup")
(return-type "none")
)
+(define-function new
+ (c-name "gecko_browser_new")
+ (is-constructor-of "GeckoBrowser")
+ (return-type "GeckoBrowser*")
+)
+
+(define-method create_window
+ (of-object "GeckoBrowser")
+ (c-name "gecko_browser_create_window")
+ (return-type "GeckoBrowser*")
+)
+(define-virtual create_window
+ (of-object "GeckoBrowser")
+ (return-type "GeckoBrowser*")
+)
diff --git a/bindings/gecko/gecko.override b/bindings/gecko/gecko.override
index 3ef8f3f..b32caa6 100644
--- a/bindings/gecko/gecko.override
+++ b/bindings/gecko/gecko.override
@@ -3,5 +3,16 @@
headers
#include <Python.h>
+#include "pygobject.h"
#include "gecko-browser.h"
+
+%%
+modulename gecko
+%%
+import gobject.GObject as PyGObject_Type
+import gtkmozembed.MozEmbed as PyGtkMozEmbed_Type
+%%
+ignore-glob
+ *_get_type
+ _*
%%
diff --git a/bindings/gecko/geckomodule.c b/bindings/gecko/geckomodule.c
index ba16813..8455de8 100644
--- a/bindings/gecko/geckomodule.c
+++ b/bindings/gecko/geckomodule.c
@@ -5,6 +5,8 @@
/* include this first, before NO_IMPORT_PYGOBJECT is defined */
#include <pygobject.h>
+void pygecko_register_classes (PyObject *d);
+
extern PyMethodDef pygecko_functions[];
DL_EXPORT(void)
@@ -17,6 +19,8 @@ initgecko(void)
m = Py_InitModule ("gecko", pygecko_functions);
d = PyModule_GetDict (m);
+ pygecko_register_classes (d);
+
if (PyErr_Occurred ()) {
Py_FatalError ("can't initialise module globalkeys");
}