diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/hulahop-web-view.cpp | 28 | ||||
-rw-r--r-- | src/hulahop-web-view.h | 2 | ||||
-rw-r--r-- | src/hulahop.cpp | 37 | ||||
-rw-r--r-- | src/hulahop.h | 11 |
4 files changed, 52 insertions, 26 deletions
diff --git a/src/hulahop-web-view.cpp b/src/hulahop-web-view.cpp index eee333d..2317823 100644 --- a/src/hulahop-web-view.cpp +++ b/src/hulahop-web-view.cpp @@ -123,9 +123,12 @@ hulahop_web_view_realize(GtkWidget *widget) widget->style = gtk_style_attach (widget->style, widget->window); gtk_style_set_background(widget->style, widget->window, GTK_STATE_NORMAL); - g_assert(GTK_IS_WIDGET(web_view->mozilla_widget)); - - gtk_widget_reparent(web_view->mozilla_widget, widget); + if (web_view->mozilla_widget) { + gtk_widget_reparent(web_view->mozilla_widget, widget); + } else { + web_view->base_window->Create(); + web_view->mozilla_widget = GTK_BIN(web_view)->child; + } g_signal_connect_object(web_view->mozilla_widget, "focus-in-event", @@ -248,9 +251,9 @@ hulahop_web_view_init(HulahopWebView *web_view) web_view->base_window = do_QueryInterface(web_view->browser); - rv = web_view->base_window->InitWindow(web_view->offscreen_window, - nsnull, 0, 0, 100, 100); - g_assert(NS_SUCCEEDED(rv)); + rv = web_view->base_window->InitWindow(web_view, nsnull, 0, 0, 100, 100); + + GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(web_view), GTK_NO_WINDOW); } PyObject * @@ -281,19 +284,6 @@ hulahop_web_view_get_window_root(HulahopWebView *web_view) } void -hulahop_web_view_create_window(HulahopWebView *web_view) -{ - nsresult rv; - - rv = web_view->base_window->Create(); - g_assert(NS_SUCCEEDED(rv)); - - web_view->mozilla_widget = GTK_BIN(web_view->offscreen_window)->child; - - GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(web_view), GTK_NO_WINDOW); -} - -void hulahop_web_view_grab_focus(HulahopWebView *web_view) { if (web_view->mozilla_widget) { diff --git a/src/hulahop-web-view.h b/src/hulahop-web-view.h index f832b7a..f54fecf 100644 --- a/src/hulahop-web-view.h +++ b/src/hulahop-web-view.h @@ -38,7 +38,6 @@ typedef struct _HulahopWebViewClass HulahopWebViewClass; GType hulahop_web_view_get_type (void); void hulahop_web_view_grab_focus (HulahopWebView *web_view); -void hulahop_web_view_create_window (HulahopWebView *web_view); PyObject *hulahop_web_view_get_browser (HulahopWebView *web_view); PyObject *hulahop_web_view_get_window_root (HulahopWebView *web_view); @@ -48,7 +47,6 @@ void hulahop_web_view_pop_js_context (HulahopWebView *web_view); void hulahop_web_view_evaluate_script (HulahopWebView *web_view, const char *script); - G_END_DECLS #endif diff --git a/src/hulahop.cpp b/src/hulahop.cpp index 3e3b963..6adc2e3 100644 --- a/src/hulahop.cpp +++ b/src/hulahop.cpp @@ -20,6 +20,12 @@ #include <nsCOMPtr.h> #include <nsILocalFile.h> #include <nsXULAppAPI.h> +#include <nsIWindowWatcher.h> +#include <nsIWebBrowser.h> +#include <nsIWebBrowserChrome.h> +#include <nsIDOMWindow.h> +#include <nsIBaseWindow.h> +#include <PyXPCOM.h> #include "HulahopDirectoryProvider.h" #include "hulahop.h" @@ -87,3 +93,34 @@ hulahop_add_components_path(const char *path) { kDirectoryProvider.AddComponentsPath(path); } + +HulahopWebView * +hulahop_get_view_for_window(PyObject *dom_window) +{ + nsCOMPtr<nsIDOMWindow> domWindow; + Py_nsISupports::InterfaceFromPyObject(dom_window, + NS_GET_IID(nsIDOMWindow), + getter_AddRefs(domWindow), + PR_FALSE); + NS_ENSURE_TRUE(domWindow, NULL); + + nsCOMPtr<nsIWindowWatcher> wwatch = do_GetService + ("@mozilla.org/embedcomp/window-watcher;1"); + NS_ENSURE_TRUE(wwatch, NULL); + + nsCOMPtr<nsIWebBrowserChrome> chrome; + wwatch->GetChromeForWindow(domWindow, getter_AddRefs(chrome)); + NS_ENSURE_TRUE(chrome, NULL); + + nsCOMPtr<nsIWebBrowser> browser; + chrome->GetWebBrowser(getter_AddRefs(browser)); + NS_ENSURE_TRUE(browser, NULL); + + nsCOMPtr<nsIBaseWindow> baseWindow = do_QueryInterface(browser); + NS_ENSURE_TRUE(baseWindow, NULL); + + gpointer native_parent; + baseWindow->GetParentNativeWindow(&native_parent); + + return HULAHOP_WEB_VIEW(native_parent); +} diff --git a/src/hulahop.h b/src/hulahop.h index b678d7e..c8649ce 100644 --- a/src/hulahop.h +++ b/src/hulahop.h @@ -20,14 +20,15 @@ #ifndef __HULAHOP_H__ #define __HULAHOP_H__ -#include <glib.h> +#include "hulahop-web-view.h" G_BEGIN_DECLS -gboolean hulahop_startup (void); -void hulahop_shutdown (void); -void hulahop_set_profile_path (const char *path); -void hulahop_add_components_path (const char *path); +gboolean hulahop_startup (void); +void hulahop_shutdown (void); +void hulahop_set_profile_path (const char *path); +void hulahop_add_components_path (const char *path); +HulahopWebView *hulahop_get_view_for_window (PyObject *dom_window); G_END_DECLS |