svnno****@sourc*****
svnno****@sourc*****
Fri Mar 7 15:31:56 JST 2008
Revision: 3452 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=kazehakase&view=rev&rev=3452 Author: ikezoe Date: 2008-03-07 15:31:55 +0900 (Fri, 07 Mar 2008) Log Message: ----------- * module/embed/gecko/gtkmozembed/EmbedPrivate.[c|h], module/embed/gecko/gtkmozembed/MozillaPrivate.[c|h]: Support xulrunner-1.9. Modified Paths: -------------- kazehakase/trunk/ChangeLog kazehakase/trunk/macros/gecko.m4 kazehakase/trunk/module/embed/gecko/gtkmozembed/EmbedPrivate.cpp kazehakase/trunk/module/embed/gecko/gtkmozembed/EmbedPrivate.h kazehakase/trunk/module/embed/gecko/gtkmozembed/Makefile.am kazehakase/trunk/module/embed/gecko/gtkmozembed/MozillaPrivate.cpp kazehakase/trunk/module/embed/gecko/gtkmozembed/MozillaPrivate.h Modified: kazehakase/trunk/ChangeLog =================================================================== --- kazehakase/trunk/ChangeLog 2008-03-07 01:39:44 UTC (rev 3451) +++ kazehakase/trunk/ChangeLog 2008-03-07 06:31:55 UTC (rev 3452) @@ -2,6 +2,9 @@ * module/embed/webkit-gtk/kz-webkit-gtk.c: Fix typo. Suppress G_CRITICAL warnings. + * module/embed/gecko/gtkmozembed/EmbedPrivate.[c|h], + module/embed/gecko/gtkmozembed/MozillaPrivate.[c|h]: Support + xulrunner-1.9. 2008-03-07 Shunichi Fuji <palgl****@gmail*****> Modified: kazehakase/trunk/macros/gecko.m4 =================================================================== --- kazehakase/trunk/macros/gecko.m4 2008-03-07 01:39:44 UTC (rev 3451) +++ kazehakase/trunk/macros/gecko.m4 2008-03-07 06:31:55 UTC (rev 3452) @@ -271,6 +271,11 @@ AC_DEFINE([HAVE_NSIBADCERTLISTENER_H],[1], [Define if mozilla nsIBadCertListener header is available])]) +AC_CHECK_FILES([$MOZILLA_INCLUDE_ROOT/nsIDOMEventReceiver.h], + [have_nsidomeventreceiver_h=yes + AC_DEFINE([HAVE_NSIDOMEVENTRECEIVER_H],[1], + [Define if mozilla nsIDOMEventReceiver header is available])]) + dnl Check for nsIDocShell::GetSecurityUI dnl This code is picked from galeon-1.3.21. dnl nsIDocShell::GetSecurityUI was added in 1.8b2 as part of the fastback @@ -356,7 +361,11 @@ Enable including GtkMozEmbed module],, enable_gtkmozembed=yes) if test x"$enable_gtkmozembed" = "xyes"; then - GECKO_MODULE=$GECKO-xpcom + if test x"$GECKO" = "xlibxul"; then + GECKO_MODULE=$GECKO-unstable + else + GECKO_MODULE=$GECKO-xpcom + fi else if test x"$GECKO" = "xlibxul"; then GECKO_MODULE=$GECKO-embedding-unstable @@ -375,9 +384,6 @@ MOZILLA_INCLUDE_ROOT="`$PKG_CONFIG --variable=includedir $GECKO_MODULE`" mozilla_include_type="`$PKG_CONFIG --variable=includetype $GECKO_MODULE`" - if test x"$mozilla_include_type" = "xunstable"; then - MOZILLA_INCLUDE_ROOT="$MOZILLA_INCLUDE_ROOT/unstable" - fi AC_SUBST(MOZILLA_INCLUDE_ROOT) MOZILLA_HOME="`$PKG_CONFIG --variable=libdir $GECKO_MODULE`" Modified: kazehakase/trunk/module/embed/gecko/gtkmozembed/EmbedPrivate.cpp =================================================================== --- kazehakase/trunk/module/embed/gecko/gtkmozembed/EmbedPrivate.cpp 2008-03-07 01:39:44 UTC (rev 3451) +++ kazehakase/trunk/module/embed/gecko/gtkmozembed/EmbedPrivate.cpp 2008-03-07 06:31:55 UTC (rev 3452) @@ -28,9 +28,8 @@ #include <nsIWebProgress.h> #include <nsIWebBrowserFocus.h> #include <nsCRT.h> -#if 0 -#include <nsNetUtil.h> -#include <nsIWebBrowserStream.h> +#ifndef HAVE_NSIDOMEVENTRECEIVER_H +#include <nsIDOMUIListener.h> #endif // for NS_APPSHELL_CID @@ -85,7 +84,6 @@ PRUint32 EmbedPrivate::sWidgetCount = 0; char *EmbedPrivate::sCompPath = nsnull; -nsIAppShell *EmbedPrivate::sAppShell = nsnull; GList *EmbedPrivate::sWindowList = NULL; char *EmbedPrivate::sProfileDir = nsnull; char *EmbedPrivate::sProfileName = nsnull; @@ -323,9 +321,13 @@ // detach our event listeners and release the event receiver DetachListeners(); +#ifndef HAVE_NSIDOMEVENTRECEIVER_H + if (mEventTarget) + mEventTarget = nsnull; +#else if (mEventReceiver) mEventReceiver = nsnull; - +#endif // destroy our child window mWindow->ReleaseChildren(); @@ -450,21 +452,6 @@ sMozillaEmbedPrivate = new MozillaEmbedPrivate; rv = sMozillaEmbedPrivate->StartupProfile(sProfileDir, sProfileName); NS_WARN_IF_FALSE(NS_SUCCEEDED(rv), "Warning: Failed to start up profiles.\n"); - - // XXX startup appshell service? - // XXX create offscreen window for appshell service? - // XXX remove X prop from offscreen window? - - nsCOMPtr<nsIAppShell> appShell; - appShell = do_CreateInstance(kAppShellCID); - if (!appShell) { - NS_WARNING("Failed to create appshell in EmbedPrivate::PushStartup!\n"); - return; - } - sAppShell = appShell.get(); - NS_ADDREF(sAppShell); - sAppShell->Create(0, nsnull); - sAppShell->Spinup(); } } @@ -481,13 +468,6 @@ // shut down the profiles sMozillaEmbedPrivate->ShutdownProfile(); - if (sAppShell) { - // Shutdown the appshell service. - sAppShell->Spindown(); - NS_RELEASE(sAppShell); - sAppShell = 0; - } - delete sMozillaEmbedPrivate; // shut down XPCOM/Embedding NS_TermEmbedding(); @@ -679,9 +659,13 @@ GetListener(); +#ifndef HAVE_NSIDOMEVENTRECEIVER_H + if (!mEventTarget) + return; +#else if (!mEventReceiver) return; - +#endif AttachListeners(); } @@ -757,14 +741,54 @@ webBrowserFocus->Deactivate(); } +nsresult +EmbedPrivate::GetPIDOMWindow(nsPIDOMWindow **aPIWin) +{ + *aPIWin = nsnull; + + // get the web browser + nsCOMPtr<nsIWebBrowser> webBrowser; + mWindow->GetWebBrowser(getter_AddRefs(webBrowser)); + + // get the content DOM window for that web browser + nsCOMPtr<nsIDOMWindow> domWindow; + webBrowser->GetContentDOMWindow(getter_AddRefs(domWindow)); + if (!domWindow) + return NS_ERROR_FAILURE; + + // get the private DOM window + nsCOMPtr<nsPIDOMWindow> domWindowPrivate = do_QueryInterface(domWindow); + // and the root window for that DOM window + *aPIWin = domWindowPrivate->GetPrivateRoot(); + + if (*aPIWin) { + NS_ADDREF(*aPIWin); + return NS_OK; + } + + return NS_ERROR_FAILURE; + +} + // Get the event listener for the chrome event handler. void EmbedPrivate::GetListener(void) { - if (mEventReceiver) +#ifndef HAVE_NSIDOMEVENTRECEIVER_H + if (!mEventTarget) return; + nsCOMPtr<nsPIDOMWindow> piWin; + GetPIDOMWindow(getter_AddRefs(piWin)); + if (!piWin) + return; + + mEventTarget = do_QueryInterface(piWin->GetChromeEventHandler()); +#else + if (!mEventReceiver) + return; + nsCOMPtr<nsIWebBrowser> webBrowser; mWindow->GetWebBrowser(getter_AddRefs(webBrowser)); @@ -775,6 +799,7 @@ return; MozillaPrivate::GetEventReceiver(domWindow, getter_AddRefs(mEventReceiver)); +#endif } // attach key and mouse event listeners @@ -782,6 +807,36 @@ void EmbedPrivate::AttachListeners(void) { +#ifndef HAVE_NSIDOMEVENTRECEIVER_H + if (!mEventTarget || mListenersAttached) + return; + + nsIDOMEventListener *eventListener = + static_cast<nsIDOMEventListener *>(static_cast<nsIDOMKeyListener *>(mEventListener)); + + // add the key listener + nsresult rv; + rv = mEventTarget->AddEventListenerByIID(eventListener, + NS_GET_IID(nsIDOMKeyListener)); + if (NS_FAILED(rv)) { + NS_WARNING("Failed to add key listener\n"); + return; + } + + rv = mEventTarget->AddEventListenerByIID(eventListener, + NS_GET_IID(nsIDOMMouseListener)); + if (NS_FAILED(rv)) { + NS_WARNING("Failed to add mouse listener\n"); + return; + } + + rv = mEventTarget->AddEventListenerByIID(eventListener, + NS_GET_IID(nsIDOMUIListener)); + if (NS_FAILED(rv)) { + NS_WARNING("Failed to add UI listener\n"); + return; + } +#else if (!mEventReceiver || mListenersAttached) return; @@ -805,7 +860,7 @@ } rv = mEventReceiver->AddEventListenerByIID(eventListener, NS_GET_IID(nsIDOMEventListener)); -#if 1 + const PRUnichar domLiteral[] = { 'D', 'O', 'M', 'L', 'i', 'n', 'k', 'A', 'd', 'd', 'e', 'd', '\0' }; mEventReceiver->AddEventListener(nsEmbedString(domLiteral), @@ -826,6 +881,36 @@ void EmbedPrivate::DetachListeners(void) { +#ifndef HAVE_NSIDOMEVENTRECEIVER_H + if (!mListenersAttached || !mEventTarget) + return; + + nsIDOMEventListener *eventListener = + static_cast<nsIDOMEventListener *>(static_cast<nsIDOMKeyListener *>(mEventListener)); + + nsresult rv; + rv = mEventTarget->RemoveEventListenerByIID(eventListener, + NS_GET_IID(nsIDOMKeyListener)); + if (NS_FAILED(rv)) { + NS_WARNING("Failed to remove key listener\n"); + return; + } + + rv = + mEventTarget->RemoveEventListenerByIID(eventListener, + NS_GET_IID(nsIDOMMouseListener)); + if (NS_FAILED(rv)) { + NS_WARNING("Failed to remove mouse listener\n"); + return; + } + + rv = mEventTarget->RemoveEventListenerByIID(eventListener, + NS_GET_IID(nsIDOMUIListener)); + if (NS_FAILED(rv)) { + NS_WARNING("Failed to remove UI listener\n"); + return; + } +#else if (!mListenersAttached || !mEventReceiver) return; @@ -852,13 +937,6 @@ 'A', 'd', 'd', 'e', 'd', '\0' }; rv = mEventReceiver->RemoveEventListener(nsEmbedString(domLiteral), eventListener, PR_FALSE); -#if 0 - rv = mEventReceiver->RemoveEventListenerByIID(eventListener, - NS_GET_IID(nsIDOMUIListener)); - if (NS_FAILED(rv)) { - NS_WARNING("Failed to remove UI listener\n"); - return; - } #endif mListenersAttached = PR_FALSE; } Modified: kazehakase/trunk/module/embed/gecko/gtkmozembed/EmbedPrivate.h =================================================================== --- kazehakase/trunk/module/embed/gecko/gtkmozembed/EmbedPrivate.h 2008-03-07 01:39:44 UTC (rev 3451) +++ kazehakase/trunk/module/embed/gecko/gtkmozembed/EmbedPrivate.h 2008-03-07 06:31:55 UTC (rev 3452) @@ -32,15 +32,22 @@ // object. #include <nsIWebBrowserChrome.h> #include <nsIAppShell.h> -#include <nsIDOMEventReceiver.h> // app component registration #include <nsIGenericFactory.h> +#include <nsPIDOMWindow.h> #include "gtkmozembedprivate.h" #include "MozillaEmbedPrivate.h" #include <glib.h> +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#ifndef HAVE_NSIDOMEVENTRECEIVER_H +#include <nsPIDOMEventTarget.h> +#endif + class EmbedProgress; class EmbedWindow; class EmbedContentListener; @@ -133,8 +140,11 @@ nsCOMPtr<nsISHistory> mSessionHistory; // our event receiver +#ifndef HAVE_NSIDOMEVENTRECEIVER_H + nsCOMPtr<nsPIDOMEventTarget> mEventTarget; +#else nsCOMPtr<nsIDOMEventReceiver> mEventReceiver; - +#endif // the currently loaded uri nsEmbedString mURI; @@ -170,6 +180,9 @@ // is the chrome listener attached yet? PRBool mListenersAttached; + // this will get the PIDOMWindow for this widget + nsresult GetPIDOMWindow (nsPIDOMWindow **aPIWin); + void GetListener (void); void AttachListeners(void); void DetachListeners(void); Modified: kazehakase/trunk/module/embed/gecko/gtkmozembed/Makefile.am =================================================================== --- kazehakase/trunk/module/embed/gecko/gtkmozembed/Makefile.am 2008-03-07 01:39:44 UTC (rev 3451) +++ kazehakase/trunk/module/embed/gecko/gtkmozembed/Makefile.am 2008-03-07 06:31:55 UTC (rev 3452) @@ -47,6 +47,8 @@ -I$(MOZILLA_INCLUDE_ROOT)/widget \ -I$(MOZILLA_INCLUDE_ROOT)/windowwatcher \ -I$(MOZILLA_INCLUDE_ROOT)/xmlextras \ + -I$(MOZILLA_INCLUDE_ROOT)/string \ + -I$(MOZILLA_INCLUDE_ROOT)/xpcom \ $(GTK_CFLAGS) \ -I$(top_builddir)/src \ -I$(top_srcdir)/src \ Modified: kazehakase/trunk/module/embed/gecko/gtkmozembed/MozillaPrivate.cpp =================================================================== --- kazehakase/trunk/module/embed/gecko/gtkmozembed/MozillaPrivate.cpp 2008-03-07 01:39:44 UTC (rev 3451) +++ kazehakase/trunk/module/embed/gecko/gtkmozembed/MozillaPrivate.cpp 2008-03-07 06:31:55 UTC (rev 3452) @@ -48,19 +48,21 @@ #include <nsIDOMHTMLImageElement.h> #include <nsIWidget.h> #include <nsPIDOMWindow.h> -#include <nsIChromeEventHandler.h> #include <nsIDOMWindowInternal.h> #include <nsIDOMDocument.h> #include <nsIDeviceContext.h> #include <nsIMarkupDocumentViewer.h> #include <nsIContentViewer.h> +#ifdef HAVE_NSIDOMEVENTRECEIVER_H +#include <nsIChromeEventHandler.h> +#endif - /* IMPORTANT. Put only code that use internal mozilla strings (nsAutoString for * example) in this file. Note that you cannot use embed strings here, * the header inclusions will conflict. */ +#ifdef HAVE_NSIPRINTOPTIONS_AVAILABLEPRINTERS GList * MozillaPrivate::GetPrinterList () { @@ -100,6 +102,7 @@ return g_list_reverse (printers); } +#endif gboolean MozillaPrivate::CreatePrintSettings (nsIPrintSettings **options) @@ -126,6 +129,7 @@ return gdk_window; } +#ifdef HAVE_NSIDOMEVENTRECEIVER_H gboolean MozillaPrivate::GetEventReceiver (nsIDOMWindow *domWindow, nsIDOMEventReceiver **receiver) { @@ -156,3 +160,4 @@ return TRUE; } +#endif Modified: kazehakase/trunk/module/embed/gecko/gtkmozembed/MozillaPrivate.h =================================================================== --- kazehakase/trunk/module/embed/gecko/gtkmozembed/MozillaPrivate.h 2008-03-07 01:39:44 UTC (rev 3451) +++ kazehakase/trunk/module/embed/gecko/gtkmozembed/MozillaPrivate.h 2008-03-07 06:31:55 UTC (rev 3452) @@ -36,17 +36,26 @@ #include <nsISelection.h> #include <nsIDocShell.h> #include <nsIBaseWindow.h> -#include <nsIDOMEventReceiver.h> #undef MOZILLA_INTERNAL_API #ifdef MOZ_NSICANVASRENDERINGCONTEXTINTERNAL_HAVE_GETINPUTSTREAM_ #include "egg-pixbuf-thumbnail.h" #endif +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#ifdef HAVE_NSIDOMEVENTRECEIVER_H +#include <nsIDOMEventReceiver.h> +#endif namespace MozillaPrivate { +#ifdef HAVE_NSIPRINTOPTIONS_AVAILABLEPRINTERS GList *GetPrinterList (); +#endif gboolean CreatePrintSettings (nsIPrintSettings **options); GdkWindow *GetGdkWindow (nsIBaseWindow *window); +#ifdef HAVE_NSIDOMEVENTRECEIVER_H gboolean GetEventReceiver (nsIDOMWindow *domWindow, nsIDOMEventReceiver **receiver); +#endif } #endif /* __MOZILLA_PRIVATE_H__ */