Bug 332045 - toolkit/components/gnome should use the glue, r=darin

This commit is contained in:
benjamin%smedbergs.us 2006-05-17 02:38:59 +00:00
Родитель c7aaed67e0
Коммит a5bea2483f
3 изменённых файлов: 55 добавлений и 17 удалений

Просмотреть файл

@ -43,7 +43,6 @@ VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
MODULE = mozgnome
MOZILLA_INTERNAL_API = 1
XPIDLSRCS = \
nsIGConfService.idl \
@ -73,7 +72,8 @@ CPPSRCS = \
$(NULL)
EXTRA_DSO_LDOPTS += \
$(MOZ_COMPONENT_LIBS) \
$(XPCOM_GLUE_LDOPTS) \
$(XPCOM_FROZEN_LDOPTS) \
$(MOZ_GCONF_LIBS) \
$(MOZ_GNOMEVFS_LIBS) \
$(MOZ_LIBGNOME_LIBS) \

Просмотреть файл

@ -37,8 +37,7 @@
* ***** END LICENSE BLOCK ***** */
#include "nsGConfService.h"
#include "nsCRT.h"
#include "nsString.h"
#include "nsStringAPI.h"
#include <gconf/gconf-client.h>
@ -165,8 +164,9 @@ NS_IMETHODIMP
nsGConfService::GetAppForProtocol(const nsACString &aScheme, PRBool *aEnabled,
nsACString &aHandler)
{
nsCAutoString key(NS_LITERAL_CSTRING("/desktop/gnome/url-handlers/")
+ aScheme + NS_LITERAL_CSTRING("/command"));
nsCAutoString key("/desktop/gnome/url-handlers/");
key.Append(aScheme);
key.Append("/command");
GError *err = nsnull;
gchar *command = gconf_client_get_string(mClient, key.get(), &err);
@ -193,8 +193,9 @@ NS_IMETHODIMP
nsGConfService::HandlerRequiresTerminal(const nsACString &aScheme,
PRBool *aResult)
{
nsCAutoString key(NS_LITERAL_CSTRING("/desktop/gnome/url-handlers/")
+ aScheme + NS_LITERAL_CSTRING("/requires_terminal"));
nsCAutoString key("/desktop/gnome/url-handlers/");
key.Append(aScheme);
key.Append("/requires_terminal");
GError *err = nsnull;
*aResult = gconf_client_get_bool(mClient, key.get(), &err);
@ -210,8 +211,9 @@ NS_IMETHODIMP
nsGConfService::SetAppForProtocol(const nsACString &aScheme,
const nsACString &aCommand)
{
nsCAutoString key(NS_LITERAL_CSTRING("/desktop/gnome/url-handlers/")
+ aScheme + NS_LITERAL_CSTRING("/command"));
nsCAutoString key("/desktop/gnome/url-handlers/");
key.Append(aScheme);
key.Append("/command");
PRBool res = gconf_client_set_string(mClient, key.get(),
PromiseFlatCString(aCommand).get(),

Просмотреть файл

@ -37,10 +37,12 @@
* ***** END LICENSE BLOCK ***** */
#include "nsGnomeVFSService.h"
#include "nsStringEnumerator.h"
#include "nsVoidArray.h"
#include "nsString.h"
#include "nsStringAPI.h"
#include "nsIURI.h"
#include "nsTArray.h"
#include "nsIStringEnumerator.h"
#include "nsAutoPtr.h"
extern "C" {
#include <libgnomevfs/gnome-vfs-application-registry.h>
@ -101,22 +103,55 @@ nsGnomeVFSMimeApp::GetExpectsURIs(PRInt32* aExpects)
return NS_OK;
}
class UTF8StringEnumerator : public nsIUTF8StringEnumerator
{
public:
UTF8StringEnumerator() : mIndex(0) { }
~UTF8StringEnumerator() { }
NS_DECL_ISUPPORTS
NS_DECL_NSIUTF8STRINGENUMERATOR
nsTArray<nsCString> mStrings;
PRUint32 mIndex;
};
NS_IMPL_ISUPPORTS1(UTF8StringEnumerator, nsIUTF8StringEnumerator)
NS_IMETHODIMP
UTF8StringEnumerator::HasMore(PRBool *aResult)
{
*aResult = mIndex < mStrings.Length();
return NS_OK;
}
NS_IMETHODIMP
UTF8StringEnumerator::GetNext(nsACString& aResult)
{
if (mIndex >= mStrings.Length())
return NS_ERROR_UNEXPECTED;
aResult.Assign(mStrings[mIndex]);
++mIndex;
return NS_OK;
}
NS_IMETHODIMP
nsGnomeVFSMimeApp::GetSupportedURISchemes(nsIUTF8StringEnumerator** aSchemes)
{
*aSchemes = nsnull;
nsCStringArray *array = new nsCStringArray();
nsRefPtr<UTF8StringEnumerator> array = new UTF8StringEnumerator();
NS_ENSURE_TRUE(array, NS_ERROR_OUT_OF_MEMORY);
for (GList *list = mApp->supported_uri_schemes; list; list = list->next) {
if (!array->AppendCString(nsDependentCString((char*) list->data))) {
delete array;
if (!array->mStrings.AppendElement((char*) list->data)) {
return NS_ERROR_OUT_OF_MEMORY;
}
}
return NS_NewAdoptingUTF8StringEnumerator(aSchemes, array);
NS_ADDREF(*aSchemes = array);
return NS_OK;
}
NS_IMETHODIMP
@ -138,7 +173,8 @@ NS_IMETHODIMP
nsGnomeVFSService::GetMimeTypeFromExtension(const nsACString &aExtension,
nsACString& aMimeType)
{
nsCAutoString fileExtToUse(NS_LITERAL_CSTRING(".") + aExtension);
nsCAutoString fileExtToUse(".");
fileExtToUse.Append(aExtension);
const char *mimeType = gnome_vfs_mime_type_from_name(fileExtToUse.get());
aMimeType.Assign(mimeType);