[Kazehakase-cvs] kazehakase-svn [2930] * src/kz-embed-module-impl.h: KZ_EMBED_MODULE_IMPL_INIT needs KzApp.

Back to archive index

svnno****@sourc***** svnno****@sourc*****
Wed Mar 21 08:59:54 JST 2007


Revision: 2930
          http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=kazehakase&view=rev&rev=2930
Author:   ikezoe
Date:     2007-03-21 08:59:54 +0900 (Wed, 21 Mar 2007)

Log Message:
-----------
* src/kz-embed-module-impl.h:  KZ_EMBED_MODULE_IMPL_INIT needs KzApp.
* module/embed/gecko/kz-gecko-embed.cpp: Follow the above change.
Add some KzEmbedPrefs interfaces.

Modified Paths:
--------------
    kazehakase/trunk/ChangeLog
    kazehakase/trunk/module/embed/gecko/kz-gecko-embed.cpp
    kazehakase/trunk/src/kz-embed-module-impl.h

Modified: kazehakase/trunk/ChangeLog
===================================================================
--- kazehakase/trunk/ChangeLog	2007-03-20 23:41:18 UTC (rev 2929)
+++ kazehakase/trunk/ChangeLog	2007-03-20 23:59:54 UTC (rev 2930)
@@ -2,6 +2,9 @@
 
 	* src/kz-embed-prefs.[ch]: get_string returns gboolean.
 	* src/kz-window.c: Use kz_embed_new() instead of kz_moz_embed_new().
+	* src/kz-embed-module-impl.h:  KZ_EMBED_MODULE_IMPL_INIT needs KzApp.
+	* module/embed/gecko/kz-gecko-embed.cpp: Follow the above change.
+	Add some KzEmbedPrefs interfaces.
 
 2007-03-21  Hiroyuki Ikezoe  <poinc****@ikezo*****>
 

Modified: kazehakase/trunk/module/embed/gecko/kz-gecko-embed.cpp
===================================================================
--- kazehakase/trunk/module/embed/gecko/kz-gecko-embed.cpp	2007-03-20 23:41:18 UTC (rev 2929)
+++ kazehakase/trunk/module/embed/gecko/kz-gecko-embed.cpp	2007-03-20 23:59:54 UTC (rev 2930)
@@ -20,12 +20,14 @@
 
 #include "kz-embed-module-impl.h"
 
+#include "kz-embed-prefs.h"
 #include "kz-gecko-single.h"
 
 #define KZ_REGRESSION_BUG4474 1
 
 #include <string.h>
 #include <math.h>
+#include <sys/utsname.h>
 #include <gtkmozembed.h>
 #include <gtkmozembed_internal.h>
 #include <glib/gi18n.h>
@@ -93,6 +95,12 @@
 #include <nsMemory.h>
 #include <nsILocalFile.h>
 #include <nsIDOM3Node.h>
+#include <nsBuildID.h>
+#include <nsIPrefService.h>
+#include <nsIFontEnumerator.h>
+#include <nsISimpleEnumerator.h>
+#include <nsIFontList.h>
+#include <nsMemory.h>
 
 #define KZ_GECKO_EMBED_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), KZ_TYPE_GECKO_EMBED, KzGeckoEmbedPrivate))
 
@@ -135,6 +143,7 @@
 
 static GType kz_type_gecko_embed = 0;
 static GtkMozEmbedClass *kz_gecko_embed_parent_class;
+static KzGeckoSingle *gecko_single = NULL;
 
 static GtkWidget *kz_gecko_embed_new     (const gchar *url);
 
@@ -348,6 +357,45 @@
 							   gboolean      allow);
 static void          kz_gecko_embed_show_page_certificate (KzEmbed       *kzembed);
 
+/* KzEmbedPrefs interfaces */
+static void          kz_gecko_embed_prefs_iface_init      (KzEmbedPrefsIFace *iface);
+static gboolean      kz_gecko_embed_prefs_init	          (KzEmbedPrefs *embed_prefs);
+static void          kz_gecko_embed_prefs_set_profile     (KzEmbedPrefs *embed_prefs,
+							   KzProfile *profile);
+static gboolean	     kz_gecko_embed_prefs_get_string	  (KzEmbedPrefs *embed_prefs,
+							   const gchar  *preference_name,
+							   gchar       **value);
+static gboolean      kz_gecko_embed_prefs_get_int         (KzEmbedPrefs *embed_prefs,
+							   const gchar  *preference_name,
+							   gint         *value);
+static gboolean      kz_gecko_embed_prefs_get_boolean     (KzEmbedPrefs *embed_prefs,
+							   const gchar  *preference_name,
+							   gboolean     *value);
+static gboolean      kz_gecko_embed_prefs_set_string      (KzEmbedPrefs *embed_prefs,
+							   const gchar  *preference_name,
+							   const gchar  *new_value);
+static gboolean      kz_gecko_embed_prefs_set_boolean     (KzEmbedPrefs *embed_prefs,
+							   const gchar  *preference_name,
+							   gboolean      new_boolean_value);
+static gboolean      kz_gecko_embed_prefs_set_int         (KzEmbedPrefs *embed_prefs,
+							   const gchar  *preference_name,
+							   gint          new_int_value);
+static gboolean      kz_gecko_embed_prefs_get_font_list   (KzEmbedPrefs *embed_prefs,
+							   const gchar  *lang_group,
+							   const gchar  *font_type,
+							   GList      **font_list,
+							   GList      **all_font_list,
+							   gchar       **default_font);
+
+static gboolean      kz_gecko_embed_prefs_get_passwords    (KzEmbedPrefs *embed_prefs,
+							    GList **passwords);
+static gboolean      kz_gecko_embed_prefs_remove_passwords (KzEmbedPrefs *embed_prefs,
+							    GList *passwords);
+static void          kz_gecko_embed_prefs_set_proxy        (KzEmbedPrefs *embed_prefs,
+							    KzProxyItem *item);
+static void          kz_gecko_embed_prefs_set_use_proxy    (KzEmbedPrefs *embed_prefs,
+							    gboolean use);
+
 /* KzGeckoEmbed Class */
 static void   kz_gecko_embed_class_init (KzGeckoEmbedClass *klass);
 static void   kz_gecko_embed_init       (KzGeckoEmbed *embed);
@@ -375,6 +423,13 @@
 		NULL
 	};
 
+	const GInterfaceInfo kz_embed_prefs_info =
+	{
+		(GInterfaceInitFunc) kz_gecko_embed_prefs_iface_init,
+		NULL,
+		NULL
+	};
+
 	kz_type_gecko_embed = g_type_module_register_type(module,
 							  GTK_TYPE_MOZ_EMBED,
 							  "KzGeckoEmbed",
@@ -385,17 +440,24 @@
 				    KZ_TYPE_GECKO_EMBED,
 				    KZ_TYPE_EMBED,
 				    &kz_embed_info);
+
+	g_type_module_add_interface(module,
+				    KZ_TYPE_GECKO_EMBED,
+				    KZ_TYPE_EMBED_PREFS,
+				    &kz_embed_info);
 }
 
 G_MODULE_EXPORT void
-KZ_EMBED_MODULE_IMPL_INIT (GTypeModule *module)
+KZ_EMBED_MODULE_IMPL_INIT (GTypeModule *module, KzApp *kz_app)
 {
+	gecko_single = kz_gecko_single_new(kz_app);
 	kz_gecko_embed_register_type(module);
 }
 
 G_MODULE_EXPORT void
 KZ_EMBED_MODULE_IMPL_EXIT (void)
 {
+	g_object_unref(gecko_single);
 }
 
 G_MODULE_EXPORT GtkWidget *
@@ -516,6 +578,24 @@
 }
 
 static void
+kz_gecko_embed_prefs_iface_init (KzEmbedPrefsIFace *iface)
+{
+	iface->init             = kz_gecko_embed_prefs_init;
+	iface->set_profile      = kz_gecko_embed_prefs_set_profile;
+	iface->get_string       = kz_gecko_embed_prefs_get_string;
+	iface->get_int          = kz_gecko_embed_prefs_get_int;
+	iface->get_boolean      = kz_gecko_embed_prefs_get_boolean;
+	iface->set_string       = kz_gecko_embed_prefs_set_string;
+	iface->set_boolean      = kz_gecko_embed_prefs_set_boolean;
+	iface->set_int          = kz_gecko_embed_prefs_set_int;
+	iface->get_font_list    = kz_gecko_embed_prefs_get_font_list;
+	iface->get_passwords    = kz_gecko_embed_prefs_get_passwords;
+	iface->remove_passwords = kz_gecko_embed_prefs_remove_passwords;
+	iface->set_proxy        = kz_gecko_embed_prefs_set_proxy;
+	iface->set_use_proxy    = kz_gecko_embed_prefs_set_use_proxy;
+}
+
+static void
 kz_gecko_embed_class_init (KzGeckoEmbedClass *klass)
 {
 	GObjectClass *gobject_class;
@@ -3402,3 +3482,441 @@
 	priv->last_highlight = NULL;
 }
 
+static gboolean
+kz_gecko_embed_prefs_init (KzEmbedPrefs *embed_prefs)
+{
+	gchar *full_path;
+
+	full_path = g_build_filename(g_get_home_dir(), 
+		   		     "."PACKAGE,
+				     "mozilla",
+				     NULL);
+	gtk_moz_embed_set_profile_path(full_path, "kazehakase");
+
+	g_free(full_path);
+
+	return TRUE;
+}
+
+static void
+build_user_agent (gchar *user_agent, gint size)
+{
+	struct utsname name;
+	gchar *system;
+
+	if (uname (&name) >= 0)
+	{
+		system = g_strdup_printf ("%s %s",
+					  name.sysname, 
+					  name.machine);
+	}
+	else
+	{
+		system = g_strdup ("Unknown");
+	}
+		
+	g_snprintf(user_agent, size,
+		   "Mozilla/5.0 (X11; %s; U;) Gecko/%d Kazehakase/"  VERSION,
+		   system,
+		   NS_BUILD_ID/100);
+	g_free (system);
+}
+
+
+static void
+kz_gecko_embed_prefs_set_profile (KzEmbedPrefs *embed_prefs, KzProfile *profile)
+{
+	char *value;
+	gchar user_agent[1024];
+	gboolean override = FALSE, use_proxy = FALSE;
+	gchar proxy_name[1024];
+	gboolean conf_exist = FALSE, use_proxy_exist = FALSE;
+	KzProxyItem *item = NULL;
+
+	// set user agent name
+	kz_profile_get_value(profile, "Global", "override_user_agent", 
+			     &override, sizeof(gboolean),
+			     KZ_PROFILE_VALUE_TYPE_BOOL);
+	if (override)
+	{
+		override = kz_profile_get_value(profile, "Global", "user_agent", 
+			   			&user_agent, sizeof(user_agent),
+						KZ_PROFILE_VALUE_TYPE_STRING);
+	}
+	if (!override)
+		build_user_agent(user_agent, G_N_ELEMENTS(user_agent));
+	mozilla_prefs_set_string ("general.useragent.override", user_agent);
+
+	if (!mozilla_prefs_get_string("kazehakase.font.language", &value))
+	{
+		mozilla_prefs_set_string("kazehakase.font.language",
+					 "x-western");
+	}
+	else
+	{
+		g_free(value);
+	}
+
+	// set default charset to ISO-8859-1
+	if (!mozilla_prefs_get_string("intl.charset.default", &value))
+	{
+		mozilla_prefs_set_string("intl.charset.default",
+					 "ISO-8859-1");
+	}
+	else
+	{
+		if (!strcmp(value, "chrome://global-platform/locale/intl.properties"))
+		{
+			mozilla_prefs_set_string("intl.charset.default",
+						 "ISO-8859-1");
+		}
+		g_free(value);
+	}
+	
+	use_proxy_exist = kz_profile_get_value(profile, "Global", "use_proxy", 
+					       &use_proxy, sizeof(gboolean),
+					       KZ_PROFILE_VALUE_TYPE_BOOL);
+	conf_exist = kz_profile_get_value(profile, "Global" , "proxy_name",
+					  &proxy_name, sizeof(proxy_name),
+					  KZ_PROFILE_VALUE_TYPE_STRING);
+
+	if (!use_proxy_exist && conf_exist)
+		use_proxy = TRUE;
+	if (use_proxy)
+	{
+		mozilla_prefs_set_use_proxy(TRUE);
+		if (conf_exist)
+			item = kz_proxy_find(proxy_name);
+		if (item)
+		{
+			mozilla_prefs_set_proxy(item);
+			g_object_unref(G_OBJECT(item));
+		}
+	}
+	else
+	{
+		mozilla_prefs_set_use_proxy(FALSE);
+	}
+}
+
+static gboolean
+kz_gecko_embed_prefs_get_string (KzEmbedPrefs *embed_prefs,
+				 const gchar  *preference_name,
+				 gchar       **value)
+{
+	g_return_val_if_fail(preference_name != NULL, FALSE);
+
+	g_return_val_if_fail(value, FALSE);
+
+	nsCOMPtr<nsIPrefService> prefService = 
+				do_GetService (NS_PREFSERVICE_CONTRACTID);
+	nsCOMPtr<nsIPrefBranch> pref;
+	prefService->GetBranch("", getter_AddRefs(pref));
+
+	if (pref)
+	{
+		nsresult rv = pref->GetCharPref(preference_name, value);
+		return NS_SUCCEEDED(rv) ? TRUE : FALSE;
+	}
+
+	return FALSE;
+}
+
+static gboolean
+kz_gecko_embed_prefs_get_int (KzEmbedPrefs *embed_prefs,
+			      const gchar  *preference_name,
+			      gint         *value)
+{
+	g_return_val_if_fail(preference_name != NULL, FALSE);
+
+	g_return_val_if_fail(value, FALSE);
+
+	nsCOMPtr<nsIPrefService> prefService = 
+				do_GetService(NS_PREFSERVICE_CONTRACTID);
+	nsCOMPtr<nsIPrefBranch> pref;
+	prefService->GetBranch("", getter_AddRefs(pref));
+
+	if (pref)
+	{
+		nsresult rv = pref->GetIntPref(preference_name, value);
+		return NS_SUCCEEDED(rv) ? TRUE : FALSE;
+	}
+
+	return FALSE;
+}
+
+static gboolean
+kz_gecko_embed_prefs_get_boolean (KzEmbedPrefs *embed_prefs,
+				  const gchar  *preference_name,
+				  gboolean     *value)
+{
+	g_return_val_if_fail(preference_name != NULL, FALSE);
+
+	g_return_val_if_fail(value, FALSE);
+
+	nsCOMPtr<nsIPrefService> prefService = 
+				do_GetService(NS_PREFSERVICE_CONTRACTID);
+	nsCOMPtr<nsIPrefBranch> pref;
+	prefService->GetBranch("", getter_AddRefs(pref));
+
+	if (pref)
+	{
+		nsresult rv = pref->GetBoolPref(preference_name, value);
+		return NS_SUCCEEDED(rv) ? TRUE : FALSE;
+	}
+
+	return FALSE;
+}
+
+//
+// this function is picked from galeon-1.2.7
+// mozilla_preference_set: set a string mozilla preference
+//
+static gboolean
+kz_gecko_embed_prefs_set_string (KzEmbedPrefs *embed_prefs,
+				 const gchar  *preference_name,
+				 const gchar  *new_value)
+{
+	g_return_val_if_fail(preference_name != NULL, FALSE);
+
+	// It is legitimate to pass in a NULL value sometimes. So let's not
+	// assert and just check and return.
+	if (!new_value) return FALSE;
+
+	nsCOMPtr<nsIPrefService> prefService = 
+				do_GetService(NS_PREFSERVICE_CONTRACTID);
+	nsCOMPtr<nsIPrefBranch> pref;
+	prefService->GetBranch("", getter_AddRefs(pref));
+
+	if (pref)
+	{
+		nsresult rv = pref->SetCharPref(preference_name, new_value);
+		return NS_SUCCEEDED(rv) ? TRUE : FALSE;
+	}
+
+	return FALSE;
+}
+
+//
+// this function is picked from galeon-1.2.7
+// mozilla_preference_set_boolean: set a boolean mozilla preference
+//
+static gboolean
+kz_gecko_embed_prefs_set_boolean (KzEmbedPrefs *embed_prefs,
+				  const gchar  *preference_name,
+				  gboolean      new_boolean_value)
+{
+	g_return_val_if_fail(preference_name != NULL, FALSE);
+  
+	nsCOMPtr<nsIPrefService> prefService = 
+				do_GetService(NS_PREFSERVICE_CONTRACTID);
+	nsCOMPtr<nsIPrefBranch> pref;
+	prefService->GetBranch("", getter_AddRefs(pref));
+  
+	if (pref)
+	{
+		nsresult rv = pref->SetBoolPref(preference_name,
+				new_boolean_value ? PR_TRUE : PR_FALSE);
+		return NS_SUCCEEDED(rv) ? TRUE : FALSE;
+	}
+
+	return FALSE;
+}
+
+//
+// this function is picked from galeon-1.2.7
+// mozilla_preference_set_int: set an integer mozilla preference
+//
+static gboolean
+kz_gecko_embed_prefs_set_int (KzEmbedPrefs *embed_prefs,
+			      const gchar  *preference_name,
+			      gint          new_int_value)
+{
+	g_return_val_if_fail(preference_name != NULL, FALSE);
+
+	nsCOMPtr<nsIPrefService> prefService = 
+				do_GetService(NS_PREFSERVICE_CONTRACTID);
+	nsCOMPtr<nsIPrefBranch> pref;
+	prefService->GetBranch("", getter_AddRefs(pref));
+
+	if (pref)
+	{
+		nsresult rv = pref->SetIntPref(preference_name, new_int_value);
+		return NS_SUCCEEDED(rv) ? TRUE : FALSE;
+	}
+
+	return FALSE;
+}
+
+//
+//  Picked from Epiphany-0.7.0 (embed/mozilla/mozilla-embed-single.cpp).
+//  Copyright (C) 2000, 2001, 2002 Marco Pesenti Gritti
+//
+static gboolean
+kz_gecko_embed_prefs_get_font_list (KzEmbedPrefs *embed_prefs,
+				    const gchar  *lang_group,
+				    const gchar  *font_type,
+				    GList      **font_list,
+				    GList      **all_font_list,
+				    gchar       **default_font)
+
+{
+	nsresult rv;
+	PRUint32 count;
+	PRUnichar **fontArray;
+
+	nsCOMPtr<nsIFontEnumerator> mozFontEnumerator;
+	mozFontEnumerator = do_CreateInstance("@mozilla.org/gfx/fontenumerator;1");
+	NS_ENSURE_TRUE (mozFontEnumerator, FALSE);
+
+	// get the language proper fonts
+	rv = mozFontEnumerator->EnumerateFonts(lang_group, font_type,
+					       &count, &fontArray);
+	NS_ENSURE_SUCCESS (rv, FALSE);
+
+	if (font_list)
+	{
+		GList *list = NULL;
+		for (PRUint32 i = 0; i < count; i++)
+		{
+			char *gFontString;
+
+			nsEmbedCString tmp;
+			NS_UTF16ToCString(nsEmbedString(fontArray[i]),
+					  NS_CSTRING_ENCODING_UTF8, tmp);
+			gFontString = g_strdup(tmp.get());
+			list = g_list_prepend(list, gFontString);
+			nsMemory::Free (fontArray[i]);
+		}
+		*font_list = g_list_reverse(list);
+	}
+	nsMemory::Free (fontArray);
+
+	// get all fonts
+	rv = mozFontEnumerator->EnumerateAllFonts(&count, &fontArray);
+	NS_ENSURE_SUCCESS (rv, FALSE);
+
+	if (font_list)
+	{
+		GList *list = NULL;
+		for (PRUint32 i = 0; i < count; i++)
+		{
+			char *gFontString;
+
+			nsEmbedCString tmp;
+			NS_UTF16ToCString(nsEmbedString(fontArray[i]),
+					  NS_CSTRING_ENCODING_UTF8, tmp);
+			if (!g_list_find_custom(*font_list, tmp.get(),
+					        (GCompareFunc)strcmp))
+			{
+				gFontString = g_strdup(tmp.get());
+				list = g_list_prepend(list, gFontString);
+				nsMemory::Free (fontArray[i]);
+			}
+		}
+		*all_font_list = g_list_reverse(list);
+	}
+	nsMemory::Free (fontArray);
+
+	if (default_font != NULL)
+	{
+		char key[255];
+		char *value = NULL;
+		nsCOMPtr<nsIPrefService> prefService;
+
+	        prefService = do_GetService(NS_PREFSERVICE_CONTRACTID);
+		g_return_val_if_fail(prefService != NULL, FALSE);
+	
+	        nsCOMPtr<nsIPrefBranch> pref;
+	        prefService->GetBranch("", getter_AddRefs(pref));
+		g_return_val_if_fail(pref != NULL, FALSE);
+
+		g_snprintf(key, sizeof(key), "font.name.%s.%s",
+			   font_type, lang_group);
+		
+		pref->GetCharPref(key, &value);
+		*default_font = g_strdup(value);
+		nsMemory::Free(value);
+	}
+
+	return TRUE;
+}
+
+static gboolean
+kz_gecko_embed_prefs_get_passwords (KzEmbedPrefs *embed_prefs, GList **passwords)
+{
+}
+
+static gboolean
+kz_gecko_embed_prefs_remove_passwords (KzEmbedPrefs *embed_prefs, GList *passwords)
+{
+}
+
+static void
+kz_gecko_embed_prefs_set_proxy (KzEmbedPrefs *embed_prefs, KzProxyItem *item)
+{
+	gboolean use_same_proxy;
+	gchar *http_host, *https_host, *ftp_host, *no_proxies_on;
+	guint http_port, https_port, ftp_port;
+
+	g_return_if_fail(KZ_IS_PROXY_ITEM(item));
+
+	g_object_get(G_OBJECT(item),
+		     "use_same_proxy", &use_same_proxy,
+		     "http_host", &http_host,
+		     "http_port", &http_port,
+		     "https_host", &https_host,
+		     "https_port", &https_port,
+		     "ftp_host", &ftp_host,
+		     "ftp_port", &ftp_port,
+		     "no_proxies_on", &no_proxies_on,
+		     NULL);
+
+	mozilla_prefs_set_use_proxy(TRUE);
+	mozilla_prefs_set_string("network.proxy.http",          http_host);
+	mozilla_prefs_set_int   ("network.proxy.http_port",     http_port);
+	mozilla_prefs_set_string("network.proxy.no_proxies_on", no_proxies_on);
+
+	if (use_same_proxy)
+	{
+		if (https_host)
+			g_free(https_host);
+		if (ftp_host)
+			g_free(ftp_host);
+
+		https_host = ftp_host = http_host;
+		http_port = ftp_port = http_port;
+	}
+	else
+	{
+		if (!https_host)
+		{
+			https_host = "";
+			https_port = 0;
+		}
+		if (!ftp_host)
+		{
+			ftp_host = "";
+			ftp_port = 0;
+		}
+	}
+	mozilla_prefs_set_string("network.proxy.ssl",      https_host);
+	mozilla_prefs_set_int   ("network.proxy.ssl_port", https_port);
+	mozilla_prefs_set_string("network.proxy.ftp",      ftp_host);
+	mozilla_prefs_set_int   ("network.proxy.ftp_port", ftp_port);
+
+	if (http_host)
+		g_free(http_host);
+	if (no_proxies_on)
+		g_free(no_proxies_on);
+}
+
+static void
+kz_gecko_embed_prefs_set_use_proxy (KzEmbedPrefs *embed_prefs, gboolean use)
+{
+	if (use)
+		mozilla_prefs_set_int("network.proxy.type", 1);
+	else
+		mozilla_prefs_set_int("network.proxy.type", 0);
+}
+

Modified: kazehakase/trunk/src/kz-embed-module-impl.h
===================================================================
--- kazehakase/trunk/src/kz-embed-module-impl.h	2007-03-20 23:41:18 UTC (rev 2929)
+++ kazehakase/trunk/src/kz-embed-module-impl.h	2007-03-20 23:59:54 UTC (rev 2930)
@@ -22,6 +22,7 @@
 #define __KZ_EMBED_MODULE_IMPL_H__
 
 #include <glib-object.h>
+#include "kz-app.h"
 
 G_BEGIN_DECLS
 
@@ -36,7 +37,7 @@
 #define KZ_EMBED_MODULE_IMPL_CREATE         kz_embed_module_impl_create
 
 
-void       KZ_EMBED_MODULE_IMPL_INIT           (GTypeModule  *module);
+void       KZ_EMBED_MODULE_IMPL_INIT           (GTypeModule  *module, KzApp *kz_app);
 void       KZ_EMBED_MODULE_IMPL_EXIT           (void);
 GtkWidget *KZ_EMBED_MODULE_IMPL_CREATE         (const gchar *url);
 





More information about the Kazehakase-cvs mailing list
Back to archive index