Open "requested" popups in a new activity
This commit is contained in:
parent
7443ee4c8b
commit
df6dd4618b
@ -2,6 +2,7 @@ import os
|
||||
|
||||
import gtk
|
||||
import gtkmozembed
|
||||
import gobject
|
||||
|
||||
from sugar.activity.Activity import Activity
|
||||
from sugar.presence.PresenceService import PresenceService
|
||||
@ -13,6 +14,16 @@ from NotificationBar import NotificationBar
|
||||
from NavigationToolbar import NavigationToolbar
|
||||
from sugar import env
|
||||
|
||||
class Browser(gecko.Browser):
|
||||
__gtype_name__ = "SugarBrowser"
|
||||
def __init__(self):
|
||||
gecko.Browser.__init__(self)
|
||||
|
||||
def do_create_window(self):
|
||||
activity = BrowserActivity()
|
||||
activity.set_type('com.redhat.Sugar.BrowserActivity')
|
||||
return activity.get_embed()
|
||||
|
||||
class BrowserActivity(Activity):
|
||||
def __init__(self):
|
||||
Activity.__init__(self)
|
||||
@ -35,7 +46,7 @@ class BrowserActivity(Activity):
|
||||
vbox.pack_start(self._notif_bar, False)
|
||||
self._notif_bar.connect('action', self.__notif_bar_action_cb)
|
||||
|
||||
self._embed = gtkmozembed.MozEmbed()
|
||||
self._embed = Browser()
|
||||
self._embed.connect("title", self.__title_cb)
|
||||
vbox.pack_start(self._embed)
|
||||
self._embed.show()
|
||||
|
@ -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 \
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
@ -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*")
|
||||
)
|
||||
|
@ -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
|
||||
_*
|
||||
%%
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -23,7 +23,10 @@ AC_PATH_PROG(PYGTK_CODEGEN, pygtk-codegen-2.0, no)
|
||||
|
||||
PKG_CHECK_MODULES(PYGTK, pygtk-2.0)
|
||||
PKG_CHECK_MODULES(GLOBALKEYS, gdk-2.0)
|
||||
PKG_CHECK_MODULES(GECKO, xulrunner-gtkmozembed)
|
||||
PKG_CHECK_MODULES(GECKO, gtk+-2.0 xulrunner-gtkmozembed)
|
||||
|
||||
GNOMEPYTHONEXTRAS_DEFSDIR=`$PKG_CONFIG --variable=defsdir pygtk-2.0`
|
||||
AC_SUBST(GNOMEPYTHONEXTRAS_DEFSDIR)
|
||||
|
||||
#
|
||||
# Setup GETTEXT
|
||||
|
Loading…
Reference in New Issue
Block a user