More work on pyxpcom integration
This commit is contained in:
		
							parent
							
								
									7e0fd77b13
								
							
						
					
					
						commit
						9e10d15c21
					
				@ -6,7 +6,7 @@ const CID = Components.ID("{475e1194-92bc-4e03-92f3-5ad6ccddaca3}");
 | 
				
			|||||||
const CONTRACT_ID = "@laptop.org/browser/browserhelper;1";
 | 
					const CONTRACT_ID = "@laptop.org/browser/browserhelper;1";
 | 
				
			||||||
const CLASS_NAME = "Browser Helper";
 | 
					const CLASS_NAME = "Browser Helper";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var browser;
 | 
					var browsers = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function BrowserHelperService() {
 | 
					function BrowserHelperService() {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -16,14 +16,15 @@ BrowserHelperService.prototype = {
 | 
				
			|||||||
/* ........ nsIBrowserHelper API .............. */
 | 
					/* ........ nsIBrowserHelper API .............. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getBrowser: function bh_getBrowser(aId) {
 | 
					  getBrowser: function bh_getBrowser(aId) {
 | 
				
			||||||
    return browser;
 | 
					    return browsers[aId]
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  registerBrowser: function bh_registerBrowser(aBrowser, aId) {
 | 
					  registerBrowser: function bh_registerBrowser(aId, aBrowser) {
 | 
				
			||||||
    browser = aBrowser;
 | 
					    browsers[aId] = aBrowser;
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  unregisterBrowser: function bh_unregisterBrowser(aId) {
 | 
					  unregisterBrowser: function bh_unregisterBrowser(aId) {
 | 
				
			||||||
 | 
					    browsers.pop(aId)
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  QueryInterface: function(aIID) {
 | 
					  QueryInterface: function(aIID) {
 | 
				
			||||||
 | 
				
			|||||||
@ -5,9 +5,9 @@ interface nsIWebBrowser;
 | 
				
			|||||||
[scriptable, uuid(475e1194-92bc-4e03-92f3-5ad6ccddaca3)]
 | 
					[scriptable, uuid(475e1194-92bc-4e03-92f3-5ad6ccddaca3)]
 | 
				
			||||||
interface nsIBrowserHelper : nsISupports
 | 
					interface nsIBrowserHelper : nsISupports
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  nsIWebBrowser getBrowser(in ACString id);
 | 
					  nsIWebBrowser getBrowser(in long id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void registerBrowser(in ACString id, in nsIWebBrowser browser);
 | 
					  void registerBrowser(in long id, in nsIWebBrowser browser);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void unregisterBrowser(in ACString id); 
 | 
					  void unregisterBrowser(in long id); 
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -64,6 +64,7 @@
 | 
				
			|||||||
#include <nsIClipboardDragDropHooks.h>
 | 
					#include <nsIClipboardDragDropHooks.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "nsISessionStore.h"
 | 
					#include "nsISessionStore.h"
 | 
				
			||||||
 | 
					#include "nsIBrowserHelper.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SUGAR_PATH "SUGAR_PATH"
 | 
					#define SUGAR_PATH "SUGAR_PATH"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -83,6 +84,8 @@ enum {
 | 
				
			|||||||
    N_SIGNALS
 | 
					    N_SIGNALS
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int last_instance_id = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static guint signals[N_SIGNALS];
 | 
					static guint signals[N_SIGNALS];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static GObjectClass *parent_class = NULL;
 | 
					static GObjectClass *parent_class = NULL;
 | 
				
			||||||
@ -366,12 +369,22 @@ sugar_browser_get_property(GObject         *object,
 | 
				
			|||||||
static void
 | 
					static void
 | 
				
			||||||
sugar_browser_realize(GtkWidget *widget)
 | 
					sugar_browser_realize(GtkWidget *widget)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    SugarBrowser *browser = SUGAR_BROWSER(widget);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GTK_WIDGET_CLASS(parent_class)->realize(widget);
 | 
					    GTK_WIDGET_CLASS(parent_class)->realize(widget);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GtkMozEmbed *embed = GTK_MOZ_EMBED(widget);
 | 
					    GtkMozEmbed *embed = GTK_MOZ_EMBED(widget);
 | 
				
			||||||
    nsCOMPtr<nsIWebBrowser> webBrowser;
 | 
					    nsCOMPtr<nsIWebBrowser> webBrowser;
 | 
				
			||||||
    gtk_moz_embed_get_nsIWebBrowser(embed, getter_AddRefs(webBrowser));
 | 
					    gtk_moz_embed_get_nsIWebBrowser(embed, getter_AddRefs(webBrowser));
 | 
				
			||||||
    NS_ENSURE_TRUE(webBrowser, );
 | 
					    NS_ENSURE_TRUE(webBrowser, );
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    nsCOMPtr<nsIBrowserHelper> browserHelper;
 | 
				
			||||||
 | 
					    browserHelper = do_GetService("@laptop.org/browser/browserhelper;1");
 | 
				
			||||||
 | 
					    if (browserHelper) {
 | 
				
			||||||
 | 
					        browserHelper->RegisterBrowser(browser->instance_id, webBrowser);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        g_warning ("Failed to get nsIBrowserHelper");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    nsCOMPtr<nsICommandManager> commandManager = do_GetInterface(webBrowser);
 | 
					    nsCOMPtr<nsICommandManager> commandManager = do_GetInterface(webBrowser);
 | 
				
			||||||
    if (commandManager) {
 | 
					    if (commandManager) {
 | 
				
			||||||
@ -392,6 +405,25 @@ sugar_browser_realize(GtkWidget *widget)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					sugar_browser_dispose(GObject *object)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    SugarBrowser *browser = SUGAR_BROWSER(object);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    GtkMozEmbed *embed = GTK_MOZ_EMBED(object);
 | 
				
			||||||
 | 
					    nsCOMPtr<nsIWebBrowser> webBrowser;
 | 
				
			||||||
 | 
					    gtk_moz_embed_get_nsIWebBrowser(embed, getter_AddRefs(webBrowser));
 | 
				
			||||||
 | 
					    NS_ENSURE_TRUE(webBrowser, );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    nsCOMPtr<nsIBrowserHelper> browserHelper;
 | 
				
			||||||
 | 
					    browserHelper = do_GetService("@laptop.org/browser/browserhelper;1");
 | 
				
			||||||
 | 
					    if (browserHelper) {
 | 
				
			||||||
 | 
					        browserHelper->UnregisterBrowser(browser->instance_id);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        g_warning ("Failed to get nsIBrowserHelper");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
sugar_browser_class_init(SugarBrowserClass *browser_class)
 | 
					sugar_browser_class_init(SugarBrowserClass *browser_class)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -401,6 +433,7 @@ sugar_browser_class_init(SugarBrowserClass *browser_class)
 | 
				
			|||||||
    parent_class = (GObjectClass *) g_type_class_peek_parent(browser_class);
 | 
					    parent_class = (GObjectClass *) g_type_class_peek_parent(browser_class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    gobject_class->get_property = sugar_browser_get_property;
 | 
					    gobject_class->get_property = sugar_browser_get_property;
 | 
				
			||||||
 | 
					    gobject_class->dispose = sugar_browser_dispose;
 | 
				
			||||||
    widget_class->realize = sugar_browser_realize;
 | 
					    widget_class->realize = sugar_browser_realize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    signals[MOUSE_CLICK] = g_signal_new ("mouse_click",
 | 
					    signals[MOUSE_CLICK] = g_signal_new ("mouse_click",
 | 
				
			||||||
@ -620,6 +653,9 @@ dom_mouse_click_cb(GtkMozEmbed *embed, nsIDOMMouseEvent *mouseEvent)
 | 
				
			|||||||
static void
 | 
					static void
 | 
				
			||||||
sugar_browser_init(SugarBrowser *browser)
 | 
					sugar_browser_init(SugarBrowser *browser)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    browser->instance_id = last_instance_id;
 | 
				
			||||||
 | 
					    last_instance_id++;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
	browser->title = NULL;
 | 
						browser->title = NULL;
 | 
				
			||||||
	browser->address = NULL;
 | 
						browser->address = NULL;
 | 
				
			||||||
	browser->progress = 0.0;
 | 
						browser->progress = 0.0;
 | 
				
			||||||
@ -636,6 +672,12 @@ sugar_browser_init(SugarBrowser *browser)
 | 
				
			|||||||
					 G_CALLBACK(dom_mouse_click_cb), NULL);
 | 
										 G_CALLBACK(dom_mouse_click_cb), NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int
 | 
				
			||||||
 | 
					sugar_browser_get_instance_id(SugarBrowser *browser)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return browser->instance_id;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
sugar_browser_scroll_pixels(SugarBrowser *browser,
 | 
					sugar_browser_scroll_pixels(SugarBrowser *browser,
 | 
				
			||||||
                            int           dx,
 | 
					                            int           dx,
 | 
				
			||||||
 | 
				
			|||||||
@ -39,6 +39,7 @@ typedef struct _SugarBrowserMetadata SugarBrowserMetadata;
 | 
				
			|||||||
struct _SugarBrowser {
 | 
					struct _SugarBrowser {
 | 
				
			||||||
	GtkMozEmbed base_instance;
 | 
						GtkMozEmbed base_instance;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int instance_id;
 | 
				
			||||||
	int total_requests;
 | 
						int total_requests;
 | 
				
			||||||
	int current_requests;
 | 
						int current_requests;
 | 
				
			||||||
	float progress;
 | 
						float progress;
 | 
				
			||||||
@ -58,25 +59,25 @@ struct _SugarBrowserClass {
 | 
				
			|||||||
	SugarBrowser * (* create_window) (SugarBrowser *browser);
 | 
						SugarBrowser * (* create_window) (SugarBrowser *browser);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GType			sugar_browser_get_type		(void);
 | 
					GType			sugar_browser_get_type		  (void);
 | 
				
			||||||
SugarBrowser   *sugar_browser_create_window	(SugarBrowser *browser);
 | 
					int             sugar_browser_get_instance_id (SugarBrowser *browser);
 | 
				
			||||||
void			sugar_browser_scroll_pixels (SugarBrowser *browser,
 | 
					SugarBrowser   *sugar_browser_create_window	  (SugarBrowser *browser);
 | 
				
			||||||
                            				 int           dx,
 | 
					void			sugar_browser_scroll_pixels   (SugarBrowser *browser,
 | 
				
			||||||
                            				 int           dy);
 | 
					                            				   int           dx,
 | 
				
			||||||
void			sugar_browser_grab_focus	(SugarBrowser *browser);
 | 
					                            				   int           dy);
 | 
				
			||||||
gboolean        sugar_browser_save_uri      (SugarBrowser *browser,
 | 
					void			sugar_browser_grab_focus	  (SugarBrowser *browser);
 | 
				
			||||||
                                             const char   *uri,
 | 
					gboolean        sugar_browser_save_uri        (SugarBrowser *browser,
 | 
				
			||||||
                                             const char   *filename);
 | 
					                                               const char   *uri,
 | 
				
			||||||
gboolean        sugar_browser_save_document (SugarBrowser *browser,
 | 
					                                               const char   *filename);
 | 
				
			||||||
                                             const char   *filename);
 | 
					gboolean        sugar_browser_save_document   (SugarBrowser *browser,
 | 
				
			||||||
 | 
					                                               const char   *filename);
 | 
				
			||||||
 | 
					char           *sugar_browser_get_session     (SugarBrowser *browser);
 | 
				
			||||||
 | 
					gboolean        sugar_browser_set_session     (SugarBrowser *browser,
 | 
				
			||||||
 | 
					                                               const char   *session);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gboolean        sugar_browser_startup       (const char *profile_path,
 | 
					gboolean        sugar_browser_startup         (const char *profile_path,
 | 
				
			||||||
                                             const char *profile_name);
 | 
					                                               const char *profile_name);
 | 
				
			||||||
void            sugar_browser_shutdown      (void);
 | 
					void            sugar_browser_shutdown        (void);
 | 
				
			||||||
 | 
					 | 
				
			||||||
char           *sugar_browser_get_session   (SugarBrowser *browser);
 | 
					 | 
				
			||||||
gboolean        sugar_browser_set_session   (SugarBrowser *browser,
 | 
					 | 
				
			||||||
                                             const char   *session);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SUGAR_TYPE_BROWSER_EVENT (sugar_browser_event_get_type())
 | 
					#define SUGAR_TYPE_BROWSER_EVENT (sugar_browser_event_get_type())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,26 @@ XUL Runner and gtkmozembed and is produced by the PyGTK
 | 
				
			|||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
try:
 | 
					try:
 | 
				
			||||||
    from sugar.browser._sugarbrowser import *
 | 
					    from sugar.browser._sugarbrowser import startup, shutdown
 | 
				
			||||||
 | 
					    from sugar.browser import _sugarbrowser
 | 
				
			||||||
except ImportError:
 | 
					except ImportError:
 | 
				
			||||||
    from sugar import ltihooks
 | 
					    from sugar import ltihooks
 | 
				
			||||||
    from sugar.browser._sugarbrowser import *
 | 
					    from sugar.browser._sugarbrowser import startup, shutdown
 | 
				
			||||||
 | 
					    from sugar.browser import _sugarbrowser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Browser(_sugarbrowser.Browser):
 | 
				
			||||||
 | 
					    def __init__(self):
 | 
				
			||||||
 | 
					        _sugarbrowser.Browser.__init__(self)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_browser(self):
 | 
				
			||||||
 | 
					        from xpcom import components
 | 
				
			||||||
 | 
					        cls = components.classes["@laptop.org/browser/browserhelper;1"]
 | 
				
			||||||
 | 
					        browser_helper = cls.getService(components.interfaces.nsIBrowserHelper)
 | 
				
			||||||
 | 
					        print self.get_instance_id()
 | 
				
			||||||
 | 
					        return browser_helper.getBrowser(self.get_instance_id())
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    def get_document(self):
 | 
				
			||||||
 | 
					        return self.browser.contentDOMWindow.document
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    document = property(get_document)
 | 
				
			||||||
 | 
					    browser = property(get_browser)
 | 
				
			||||||
 | 
				
			|||||||
@ -128,6 +128,12 @@
 | 
				
			|||||||
  )
 | 
					  )
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define-method get_instance_id
 | 
				
			||||||
 | 
					  (of-object "SugarBrowser")
 | 
				
			||||||
 | 
					  (c-name "sugar_browser_get_instance_id")
 | 
				
			||||||
 | 
					  (return-type "int")
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
;; From sugar-key-grabber.h
 | 
					;; From sugar-key-grabber.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define-function sugar_key_grabber_get_type
 | 
					(define-function sugar_key_grabber_get_type
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								sugar/browser/browser.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								sugar/browser/browser.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@ -39,7 +39,7 @@ xulrunner_startup(void)
 | 
				
			|||||||
        fprintf(stderr, "Couldn't find a compatible GRE.\n");
 | 
					        fprintf(stderr, "Couldn't find a compatible GRE.\n");
 | 
				
			||||||
        return 1;
 | 
					        return 1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    rv = XPCOMGlueStartup(xpcomPath);
 | 
					    rv = XPCOMGlueStartup(xpcomPath);
 | 
				
			||||||
    if (NS_FAILED(rv)) {
 | 
					    if (NS_FAILED(rv)) {
 | 
				
			||||||
        fprintf(stderr, "Couldn't start XPCOM.");
 | 
					        fprintf(stderr, "Couldn't start XPCOM.");
 | 
				
			||||||
 | 
				
			|||||||
@ -21,9 +21,14 @@ import os
 | 
				
			|||||||
import pygtk
 | 
					import pygtk
 | 
				
			||||||
pygtk.require('2.0')
 | 
					pygtk.require('2.0')
 | 
				
			||||||
import gtk
 | 
					import gtk
 | 
				
			||||||
 | 
					import gobject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import sugar.browser
 | 
					import sugar.browser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _print_document():
 | 
				
			||||||
 | 
					    #print browser.document
 | 
				
			||||||
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _quit(window):
 | 
					def _quit(window):
 | 
				
			||||||
    sugar.browser.shutdown()
 | 
					    sugar.browser.shutdown()
 | 
				
			||||||
    gtk.main_quit()
 | 
					    gtk.main_quit()
 | 
				
			||||||
@ -38,7 +43,9 @@ browser = sugar.browser.Browser()
 | 
				
			|||||||
window.add(browser)
 | 
					window.add(browser)
 | 
				
			||||||
browser.show()
 | 
					browser.show()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
browser.load_url('http://www.google.com')
 | 
					browser.load_url('about:blank')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gobject.idle_add(_print_document)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
window.show()
 | 
					window.show()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user