aboutsummaryrefslogtreecommitdiffstats
path: root/embed
diff options
context:
space:
mode:
authorChristian Persch <chpe@cvs.gnome.org>2006-01-15 05:06:48 +0800
committerChristian Persch <chpe@src.gnome.org>2006-01-15 05:06:48 +0800
commit7ee5680874383d1d111ae3cd3dec10c5b4111385 (patch)
tree6dfe29c741753a421ba1f8a6153576968d0241df /embed
parentd9c3fe17a3c1595fdf4ae850a03efc093cac8aea (diff)
downloadgsoc2013-epiphany-7ee5680874383d1d111ae3cd3dec10c5b4111385.tar
gsoc2013-epiphany-7ee5680874383d1d111ae3cd3dec10c5b4111385.tar.gz
gsoc2013-epiphany-7ee5680874383d1d111ae3cd3dec10c5b4111385.tar.bz2
gsoc2013-epiphany-7ee5680874383d1d111ae3cd3dec10c5b4111385.tar.lz
gsoc2013-epiphany-7ee5680874383d1d111ae3cd3dec10c5b4111385.tar.xz
gsoc2013-epiphany-7ee5680874383d1d111ae3cd3dec10c5b4111385.tar.zst
gsoc2013-epiphany-7ee5680874383d1d111ae3cd3dec10c5b4111385.zip
Add defines and automake conditional for toolkit flavour.
2006-01-14 Christian Persch <chpe@cvs.gnome.org> * m4/gecko.m4: Add defines and automake conditional for toolkit flavour. * configure.ac: * data/Makefile.am: A data/chrome/.cvsignore: A data/chrome/Makefile.am: A data/chrome/brand.dtd.in: A data/chrome/brand.properties.in: A data/chrome/epiphany.manifest.in: Provide branding so mozilla dialogues don't show "Deer Park" or "Firefox" but "Epiphany" instead. * embed/mozilla/Makefile.am: A embed/mozilla/EphyDirectoryProvider.cpp: A embed/mozilla/EphyDirectoryProvider.h: * embed/mozilla/mozilla-embed-single.cpp: Add a directory service provider.
Diffstat (limited to 'embed')
-rw-r--r--embed/mozilla/EphyDirectoryProvider.cpp100
-rw-r--r--embed/mozilla/EphyDirectoryProvider.h37
-rw-r--r--embed/mozilla/Makefile.am7
-rw-r--r--embed/mozilla/mozilla-embed-single.cpp19
4 files changed, 163 insertions, 0 deletions
diff --git a/embed/mozilla/EphyDirectoryProvider.cpp b/embed/mozilla/EphyDirectoryProvider.cpp
new file mode 100644
index 000000000..1c9e30b4d
--- /dev/null
+++ b/embed/mozilla/EphyDirectoryProvider.cpp
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2006 Christian Persch
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Id$
+ */
+
+#include "mozilla-config.h"
+
+#include "config.h"
+
+#include "EphyDirectoryProvider.h"
+
+#include <nsCOMPtr.h>
+#include <nsIIOService.h>
+#include <nsNetUtil.h>
+#include <nsEnumeratorUtils.h>
+#include <nsILocalFile.h>
+#include <nsAppDirectoryServiceDefs.h>
+#include <nsIToolkitChromeRegistry.h>
+#include <nsIDirectoryService.h>
+#include <nsISupportsArray.h>
+
+#include <string.h>
+
+NS_IMPL_ISUPPORTS2 (EphyDirectoryProvider,
+ nsIDirectoryServiceProvider,
+ nsIDirectoryServiceProvider2)
+
+
+/* nsIFile getFile (in string prop, out PRBool persistent); */
+NS_IMETHODIMP
+EphyDirectoryProvider::GetFile (const char *prop,
+ PRBool *persistent,
+ nsIFile **_retval)
+{
+ return NS_ERROR_FAILURE;
+}
+
+/* nsISimpleEnumerator getFiles (in string prop); */
+NS_IMETHODIMP
+EphyDirectoryProvider::GetFiles (const char *prop,
+ nsISimpleEnumerator **_retval)
+{
+ nsresult rv = NS_ERROR_FAILURE;
+
+ if (prop && strcmp (prop, NS_CHROME_MANIFESTS_FILE_LIST) == 0)
+ {
+ nsCOMPtr<nsILocalFile> manifestDir;
+ rv = NS_NewNativeLocalFile (nsDependentCString(SHARE_DIR "/chrome"), PR_TRUE,
+ getter_AddRefs (manifestDir));
+ NS_ENSURE_SUCCESS (rv, rv);
+
+ nsCOMPtr<nsISupports> element (do_QueryInterface (manifestDir, &rv));
+ NS_ENSURE_SUCCESS (rv, rv);
+
+ /* FIXME: this sucks!
+ * When we don't implement a directory service provider,
+ * the chrome registry takes its manifests files from the
+ * app chrome dir; but it doesn't append this dir when
+ * we do provide our own (additional) chrome manifest dirs!
+ * http://lxr.mozilla.org/seamonkey/source/chrome/src/nsChromeRegistry.cpp#1147
+ */
+ nsCOMPtr<nsIProperties> dirServ (do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID, &rv));
+ NS_ENSURE_SUCCESS (rv, rv);
+
+ nsCOMPtr<nsIFile> chromeDir;
+ rv = dirServ->Get (NS_APP_CHROME_DIR, NS_GET_IID (nsIFile),
+ getter_AddRefs (chromeDir));
+ NS_ENSURE_SUCCESS (rv, rv);
+
+ nsCOMPtr<nsISupportsArray> array;
+ rv = NS_NewISupportsArray (getter_AddRefs (array));
+ NS_ENSURE_SUCCESS (rv, rv);
+
+ rv = array->AppendElement (manifestDir);
+ rv |= array->AppendElement (chromeDir);
+ NS_ENSURE_SUCCESS (rv, rv);
+
+ rv = NS_NewArrayEnumerator (_retval, array);
+ NS_ENSURE_SUCCESS (rv, rv);
+
+ rv = NS_SUCCESS_AGGREGATE_RESULT;
+ }
+
+ return rv;
+}
diff --git a/embed/mozilla/EphyDirectoryProvider.h b/embed/mozilla/EphyDirectoryProvider.h
new file mode 100644
index 000000000..9c0a5b9d5
--- /dev/null
+++ b/embed/mozilla/EphyDirectoryProvider.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2006 Christian Persch
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Id$
+ */
+
+#ifndef EPHY_DIRECTORY_PROVIDER_H
+#define EPHY_DIRECTORY_PROVIDER_H
+
+#include <nsIDirectoryService.h>
+
+class EphyDirectoryProvider : public nsIDirectoryServiceProvider2
+{
+ public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIDIRECTORYSERVICEPROVIDER
+ NS_DECL_NSIDIRECTORYSERVICEPROVIDER2
+
+ EphyDirectoryProvider() { }
+ virtual ~EphyDirectoryProvider() { }
+};
+
+#endif /* EPHY_DIRECTORY_PROVIDER_H */
diff --git a/embed/mozilla/Makefile.am b/embed/mozilla/Makefile.am
index 651ec27e7..3e7eced11 100644
--- a/embed/mozilla/Makefile.am
+++ b/embed/mozilla/Makefile.am
@@ -58,6 +58,12 @@ libephymozillaembed_la_SOURCES += \
FilePicker.h
endif
+if HAVE_MOZILLA_TOOLKIT
+libephymozillaembed_la_SOURCES += \
+ EphyDirectoryProvider.cpp \
+ EphyDirectoryProvider.h
+endif
+
if HAVE_MOZILLA_PSM
libephymozillaembed_la_SOURCES += \
GtkNSSClientAuthDialogs.cpp \
@@ -85,6 +91,7 @@ endif
mozilla_include_subdirs = \
caps \
chardet \
+ chrome \
commandhandler \
content \
cookie \
diff --git a/embed/mozilla/mozilla-embed-single.cpp b/embed/mozilla/mozilla-embed-single.cpp
index 447f3b4ff..f0675d355 100644
--- a/embed/mozilla/mozilla-embed-single.cpp
+++ b/embed/mozilla/mozilla-embed-single.cpp
@@ -36,6 +36,7 @@
#include "glib.h"
#include "ephy-debug.h"
#include "gtkmozembed.h"
+#include "gtkmozembed_internal.h"
#include "mozilla-embed.h"
#include "ephy-file-helpers.h"
#include "mozilla-notifiers.h"
@@ -72,6 +73,10 @@
#include <nsILocalFile.h>
#include <nsIURI.h>
+#ifdef HAVE_MOZILLA_TOOLKIT
+#include "EphyDirectoryProvider.h"
+#endif
+
#ifdef HAVE_MOZILLA_PSM
#include <nsIX509Cert.h>
#include <nsIX509CertDB.h>
@@ -528,6 +533,20 @@ init_services (MozillaEmbedSingle *single)
/* Set mozilla binary path */
gtk_moz_embed_set_comp_path (MOZILLA_HOME);
+#ifdef HAVE_MOZILLA_TOOLKIT
+ EphyDirectoryProvider *dirProvider = new EphyDirectoryProvider ();
+ if (!dirProvider) return FALSE;
+
+ NS_ADDREF (dirProvider);
+ nsCOMPtr<nsIDirectoryServiceProvider> dp (do_QueryInterface (dirProvider));
+ NS_RELEASE (dirProvider);
+
+ if (!dp) return FALSE;
+
+ gtk_moz_embed_set_directory_service_provider (dp);
+ dp = nsnull;
+#endif
+
/* Fire up the beast */
gtk_moz_embed_push_startup ();