summaryrefslogtreecommitdiffstats
path: root/www/epiphany/files
diff options
context:
space:
mode:
authorahze <ahze@df743ca5-7f9a-e211-a948-0013205c9059>2008-04-02 02:55:52 +0800
committerahze <ahze@df743ca5-7f9a-e211-a948-0013205c9059>2008-04-02 02:55:52 +0800
commit500fae7d6a94906b40bcc4e9d25664f53c97217b (patch)
tree9a340f96490600b253a5bf43719952dd5b2e0ade /www/epiphany/files
parentb842306392c8e8678c4da963fd32f2c118f98eea (diff)
downloadmarcuscom-ports-500fae7d6a94906b40bcc4e9d25664f53c97217b.tar
marcuscom-ports-500fae7d6a94906b40bcc4e9d25664f53c97217b.tar.gz
marcuscom-ports-500fae7d6a94906b40bcc4e9d25664f53c97217b.tar.bz2
marcuscom-ports-500fae7d6a94906b40bcc4e9d25664f53c97217b.tar.lz
marcuscom-ports-500fae7d6a94906b40bcc4e9d25664f53c97217b.tar.xz
marcuscom-ports-500fae7d6a94906b40bcc4e9d25664f53c97217b.tar.zst
marcuscom-ports-500fae7d6a94906b40bcc4e9d25664f53c97217b.zip
- Update webkit-gtk2 to 31436
- Add support for LOCALBASE/lib/browser_plugins (doesn't work yet) git-svn-id: svn://creme-brulee.marcuscom.com/ports/trunk@10845 df743ca5-7f9a-e211-a948-0013205c9059
Diffstat (limited to 'www/epiphany/files')
-rw-r--r--www/epiphany/files/patch-lib_ephy-spell-check.c20
-rw-r--r--www/epiphany/files/patch-src_bookmarks_ephy-bookmarks.c498
2 files changed, 518 insertions, 0 deletions
diff --git a/www/epiphany/files/patch-lib_ephy-spell-check.c b/www/epiphany/files/patch-lib_ephy-spell-check.c
new file mode 100644
index 000000000..bd68a07d9
--- /dev/null
+++ b/www/epiphany/files/patch-lib_ephy-spell-check.c
@@ -0,0 +1,20 @@
+--- lib/ephy-spell-check.c.orig 2008-03-17 00:41:47.000000000 -0400
++++ lib/ephy-spell-check.c 2008-03-17 00:47:22.000000000 -0400
+@@ -69,8 +69,15 @@ ephy_spell_check_init (EphySpellCheck *s
+ priv->dict = enchant_broker_request_dict (priv->broker, *locale);
+ if (priv->dict != NULL) break;
+ }
+- if (priv->dict == NULL)
+- g_warning (enchant_broker_get_error (priv->broker));
++ if (priv->dict == NULL) {
++ g_warning ("No dictionary found for current locale; trying 'en'");
++ priv->dict = enchant_broker_request_dict (priv->broker, "en");
++
++ if (priv->dict == NULL) {
++ g_warning (enchant_broker_get_error (priv->broker));
++ g_warning ("No dictionary found; expect a crash until LANG is properly set");
++ }
++ }
+ }
+
+ static void
diff --git a/www/epiphany/files/patch-src_bookmarks_ephy-bookmarks.c b/www/epiphany/files/patch-src_bookmarks_ephy-bookmarks.c
new file mode 100644
index 000000000..afe4f26f1
--- /dev/null
+++ b/www/epiphany/files/patch-src_bookmarks_ephy-bookmarks.c
@@ -0,0 +1,498 @@
+--- src/bookmarks/ephy-bookmarks.c 2008/01/14 19:29:31 7863
++++ src/bookmarks/ephy-bookmarks.c 2008/03/13 14:09:36 8102
+@@ -136,39 +136,10 @@
+ static void ephy_bookmarks_finalize (GObject *object);
+ static char *impl_resolve_address (EphyBookmarks*, const char*, const char*);
+
+-static GObjectClass *parent_class = NULL;
+-
+-GType
+-ephy_bookmarks_get_type (void)
+-{
+- static GType type = 0;
+-
+- if (G_UNLIKELY (type == 0))
+- {
+- const GTypeInfo our_info =
+- {
+- sizeof (EphyBookmarksClass),
+- NULL, /* base_init */
+- NULL, /* base_finalize */
+- (GClassInitFunc) ephy_bookmarks_class_init,
+- NULL,
+- NULL, /* class_data */
+- sizeof (EphyBookmarks),
+- 0, /* n_preallocs */
+- (GInstanceInitFunc) ephy_bookmarks_init
+- };
+- volatile GType flags_type; /* work around gcc's optimiser */
+-
+- /* make sure the flags type is known */
+- flags_type = EPHY_TYPE_BOOKMARK_PROPERTY;
+-
+- type = g_type_register_static (G_TYPE_OBJECT,
+- "EphyBookmarks",
+- &our_info, 0);
+- }
+-
+- return type;
+-}
++G_DEFINE_TYPE_WITH_CODE (EphyBookmarks, ephy_bookmarks, G_TYPE_OBJECT,
++ volatile GType flags_type; /* work around gcc's optimiser */
++ /* make sure the flags type is known */
++ flags_type = EPHY_TYPE_BOOKMARK_PROPERTY;)
+
+ static void
+ ephy_bookmarks_init_defaults (EphyBookmarks *eb)
+@@ -194,8 +165,6 @@
+ {
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+- parent_class = g_type_class_peek_parent (klass);
+-
+ object_class->finalize = ephy_bookmarks_finalize;
+
+ klass->resolve_address = impl_resolve_address;
+@@ -799,7 +768,10 @@
+ char *key_dup, *value_dup;
+ char *raw_txt;
+ size_t raw_txt_len;
+-
++
++ if (!input_text)
++ return NULL;
++
+ raw_txt_len = avahi_string_list_serialize (input_text, NULL, 0);
+ raw_txt = g_malloc (raw_txt_len);
+ raw_txt_len = avahi_string_list_serialize (input_text, raw_txt, raw_txt_len);
+@@ -868,41 +840,14 @@
+ name);
+ }
+
+-static EphyNode *
+-get_node_for_id (EphyBookmarks *bookmarks,
+- char *node_id)
+-{
+- EphyBookmarksPrivate *priv = bookmarks->priv;
+- EphyNode *kid, *node = NULL;
+- GPtrArray *children;
+- const char *id;
+- guint i;
+-
+- children = ephy_node_get_children (priv->local);
+- for (i = 0; i < children->len; i++)
+- {
+- kid = g_ptr_array_index (children, i);
+-
+- id = ephy_node_get_property_string (kid,
+- EPHY_NODE_BMK_PROP_SERVICE_ID);
+-
+- if (g_str_equal (id, node_id))
+- {
+- node = kid;
+- break;
+- }
+- }
+-
+- g_free (node_id);
+-
+- return node;
+-}
+-
+ typedef struct
+ {
+ EphyBookmarks *bookmarks;
++ GaServiceResolver *resolver;
+ EphyNode *node;
+- guint new_node : 1;
++ char *name;
++ char *type;
++ char *domain;
+ } ResolveData;
+
+ static void
+@@ -921,20 +866,20 @@
+ {
+ EphyBookmarks *bookmarks = data->bookmarks;
+ EphyBookmarksPrivate *priv = bookmarks->priv;
+- EphyNode *node = data->node;
+ GValue value = { 0, };
+ const char *path = NULL;
+ char host[128];
+ GHashTable *text_table;
+ char *url;
+ gboolean was_immutable;
++ gboolean is_new_node = FALSE;
+ guint i;
+
++ LOG ("resolver_found_cb resolver %p\n", resolver);
++
+ was_immutable = ephy_node_db_is_immutable (priv->db);
+ ephy_node_db_set_immutable (priv->db, FALSE);
+
+- g_hash_table_steal (priv->resolve_handles, node);
+-
+ /* Find the protocol */
+ for (i = 0; i < G_N_ELEMENTS (zeroconf_protos); ++i)
+ {
+@@ -945,6 +890,12 @@
+ }
+ if (i == G_N_ELEMENTS (zeroconf_protos)) return;
+
++ if (address == NULL)
++ {
++ g_warning ("Zeroconf failed to resolve host %s", name);
++ return;
++ }
++
+ text_table = decode_txt_record (txt);
+
+ if (text_table != NULL)
+@@ -956,32 +907,60 @@
+ path = "/";
+ }
+
+- if (address == NULL)
+- {
+- g_warning ("Zeroconf failed to resolve host %s", name);
+- return;
+- }
+ avahi_address_snprint (host, sizeof (host), address);
+
+ LOG ("0conf RESOLVED type=%s domain=%s name=%s => proto=%s host=%s port=%d path=%s\n",
+ type, domain, name,
+ zeroconf_protos[i], host, port, path);
+
++ was_immutable = ephy_node_db_is_immutable (priv->db);
++ ephy_node_db_set_immutable (priv->db, FALSE);
++
++ if (data->node == NULL)
++ {
++ is_new_node = TRUE;
++
++ data->node = ephy_node_new (priv->db);
++ g_assert (data->node != NULL);
++
++ /* don't allow dragging this node */
++ ephy_node_set_is_drag_source (data->node, FALSE);
++
++ g_value_init (&value, G_TYPE_STRING);
++ g_value_take_string (&value,
++ get_id_for_response (data->type,
++ data->domain,
++ data->name));
++ ephy_node_set_property (data->node, EPHY_NODE_BMK_PROP_SERVICE_ID, &value);
++ g_value_unset (&value);
++
++ /* FIXME: limit length! */
++ ephy_node_set_property_string (data->node,
++ EPHY_NODE_BMK_PROP_TITLE,
++ name);
++
++ ephy_node_set_property_boolean (data->node,
++ EPHY_NODE_BMK_PROP_IMMUTABLE,
++ TRUE);
++ }
++
+ /* FIXME: limit length! */
+ url = g_strdup_printf ("%s://%s:%d%s", zeroconf_protos[i], host, port, path);
+
+ g_value_init (&value, G_TYPE_STRING);
+ g_value_take_string (&value, url);
+- ephy_node_set_property (node, EPHY_NODE_BMK_PROP_LOCATION, &value);
++ ephy_node_set_property (data->node, EPHY_NODE_BMK_PROP_LOCATION, &value);
+ g_value_unset (&value);
+
+- if (data->new_node)
++ if (is_new_node)
+ {
+- ephy_node_add_child (priv->bookmarks, node);
+- ephy_node_add_child (priv->local, node);
++ ephy_node_add_child (priv->bookmarks, data->node);
++ ephy_node_add_child (priv->local, data->node);
+ }
+
+ ephy_node_db_set_immutable (priv->db, was_immutable);
++
++ g_hash_table_unref (text_table);
+ }
+
+ static void
+@@ -989,53 +968,33 @@
+ GError *error,
+ ResolveData *data)
+ {
+- EphyBookmarks *bookmarks = data->bookmarks;
+- EphyBookmarksPrivate *priv = bookmarks->priv;
+- EphyNode *node = data->node;
+- gboolean was_immutable;
++ LOG ("resolver_failure_cb resolver %p: %s\n", resolver, error?error->message:"(null)");
+
+- was_immutable = ephy_node_db_is_immutable (priv->db);
+- ephy_node_db_set_immutable (priv->db, FALSE);
+-
+- g_hash_table_steal (priv->resolve_handles, node);
+-
+- /* Error, don't add the service */
+- ephy_node_unref (node);
+- ephy_node_db_set_immutable (priv->db, was_immutable);
+-
+- return;
+-}
++ /* Remove the node, if present */
++ if (data->node != NULL)
++ {
++ EphyBookmarks *bookmarks = data->bookmarks;
++ EphyBookmarksPrivate *priv = bookmarks->priv;
++ gboolean was_immutable;
+
+-static void
+-free_resolve_cb_data (gpointer data)
+-{
+- g_slice_free (ResolveData, data);
++ was_immutable = ephy_node_db_is_immutable (priv->db);
++ ephy_node_db_set_immutable (priv->db, FALSE);
++ ephy_node_unref (data->node);
++ data->node = NULL;
++ ephy_node_db_set_immutable (priv->db, was_immutable);
++ }
+ }
+
+ static void
+-browser_removed_service_cb (GaServiceBrowser *browser,
+- int interface,
+- GaProtocol protocol,
+- const char *name,
+- const char *type,
+- const char *domain,
+- glong flags,
+- EphyBookmarks *bookmarks)
++resolve_data_free (ResolveData* data)
+ {
+- EphyBookmarksPrivate *priv = bookmarks->priv;
+- EphyNode *node;
+- char *node_id;
+-
+- node_id = get_id_for_response (type, domain, name);
+- node = get_node_for_id (bookmarks, node_id);
++ if (data->resolver)
++ g_object_unref (data->resolver);
+
+- if (node != NULL)
+- {
+- g_hash_table_remove (priv->resolve_handles, node);
+- ephy_node_unref (node);
+- }
+-
+- return;
++ g_free (data->type);
++ g_free (data->name);
++ g_free (data->domain);
++ g_slice_free (ResolveData, data);
+ }
+
+ static void
+@@ -1049,81 +1008,88 @@
+ EphyBookmarks *bookmarks)
+ {
+ EphyBookmarksPrivate *priv = bookmarks->priv;
+- EphyNode *node;
+- GValue value = { 0, };
+- gboolean new_node = FALSE;
+- GaServiceResolver *resolver = NULL;
+ ResolveData *data;
+ char *node_id;
++ GError *error = NULL;
+
+ node_id = get_id_for_response (type, domain, name);
+- node = get_node_for_id (bookmarks, node_id);
+
+ LOG ("0conf ADD: type=%s domain=%s name=%s\n",
+ type, domain, name);
+
+- if (node != NULL &&
+- g_hash_table_lookup (priv->resolve_handles, node) != NULL) return;
+-
+- if (node == NULL)
++ if (g_hash_table_lookup (priv->resolve_handles, node_id) != NULL)
+ {
+- gboolean was_immutable;
+-
+- was_immutable = ephy_node_db_is_immutable (priv->db);
+- ephy_node_db_set_immutable (priv->db, FALSE);
+-
+- node = ephy_node_new (priv->db);
+- g_assert (node != NULL);
+-
+- new_node = TRUE;
+-
+- /* don't allow dragging this node */
+- ephy_node_set_is_drag_source (node, FALSE);
+-
+- g_value_init (&value, G_TYPE_STRING);
+- g_value_take_string (&value, get_id_for_response (type, domain, name));
+- ephy_node_set_property (node, EPHY_NODE_BMK_PROP_SERVICE_ID, &value);
+- g_value_unset (&value);
+-
+- /* FIXME: limit length! */
+- ephy_node_set_property_string (node,
+- EPHY_NODE_BMK_PROP_TITLE,
+- name);
+-
+- ephy_node_set_property_boolean (node,
+- EPHY_NODE_BMK_PROP_IMMUTABLE,
+- TRUE);
+-
+- ephy_node_db_set_immutable (priv->db, was_immutable);
++ g_free (node_id);
++ return;
+ }
+
+ data = g_slice_new0 (ResolveData);
+ data->bookmarks = bookmarks;
+- data->node = node;
+- data->new_node = new_node;
+-
+- resolver = ga_service_resolver_new (AVAHI_IF_UNSPEC,
+- AVAHI_PROTO_UNSPEC,
+- name, type, domain,
+- AVAHI_PROTO_UNSPEC,
+- GA_LOOKUP_USE_MULTICAST);
+- g_signal_connect_data (resolver, "found",
+- G_CALLBACK (resolver_found_cb), data,
+- (GClosureNotify) free_resolve_cb_data, 0);
+- g_signal_connect_data (resolver, "failure",
+- G_CALLBACK (resolver_failure_cb), data,
+- (GClosureNotify) free_resolve_cb_data, 0);
+- if (!ga_service_resolver_attach (resolver,
++ data->node = NULL;
++ data->type = g_strdup (type);
++ data->name = g_strdup (name);
++ data->domain = g_strdup (domain);
++
++ data->resolver = ga_service_resolver_new (AVAHI_IF_UNSPEC,
++ AVAHI_PROTO_UNSPEC,
++ name, type, domain,
++ AVAHI_PROTO_UNSPEC,
++ GA_LOOKUP_USE_MULTICAST);
++ g_signal_connect (data->resolver, "found",
++ G_CALLBACK (resolver_found_cb), data);
++ g_signal_connect (data->resolver, "failure",
++ G_CALLBACK (resolver_failure_cb), data);
++ if (!ga_service_resolver_attach (data->resolver,
+ priv->ga_client,
+- NULL))
++ &error))
+ {
+- g_warning ("Unable to resolve Zeroconf service %s", name);
+- ephy_node_unref (node);
+- free_resolve_cb_data (data);
++ g_warning ("Unable to resolve Zeroconf service %s: %s", name, error ? error->message : "(null)");
++ g_clear_error (&error);
++ resolve_data_free (data);
++ g_free (node_id);
+ return;
+ }
++
+ g_hash_table_insert (priv->resolve_handles,
+- node, resolver);
++ node_id /* transfer ownership */, data);
++}
++
++static void
++browser_removed_service_cb (GaServiceBrowser *browser,
++ int interface,
++ GaProtocol protocol,
++ const char *name,
++ const char *type,
++ const char *domain,
++ glong flags,
++ EphyBookmarks *bookmarks)
++{
++ EphyBookmarksPrivate *priv = bookmarks->priv;
++ char *node_id;
++ ResolveData *data;
++
++ node_id = get_id_for_response (type, domain, name);
++ data = g_hash_table_lookup (priv->resolve_handles, node_id);
++ /* shouldn't really happen, but let's play safe */
++ if (!data)
++ {
++ g_free (node_id);
++ return;
++ }
++
++ if (data->node != NULL)
++ {
++ gboolean was_immutable;
++
++ was_immutable = ephy_node_db_is_immutable (priv->db);
++ ephy_node_db_set_immutable (priv->db, FALSE);
++ ephy_node_unref (data->node);
++ data->node = NULL;
++ ephy_node_db_set_immutable (priv->db, was_immutable);
++ }
++
++ g_hash_table_remove (priv->resolve_handles, node_id);
++ g_free (node_id);
+ }
+
+ static void
+@@ -1150,9 +1116,10 @@
+ NULL))
+ {
+ g_warning ("Unable to start Zeroconf subsystem");
++ g_object_unref (browser);
+ return;
+ }
+-
++
+ priv->browse_handles[i] = browser;
+ }
+ }
+@@ -1166,6 +1133,7 @@
+ {
+ if (avahi_client_errno (ga_client->avahi_client) == AVAHI_ERR_DISCONNECTED)
+ {
++ /* FIXMEchpe: is this correct */
+ /* Destroy and reconnect */
+ avahi_client_free (ga_client->avahi_client);
+ ga_client->avahi_client = NULL;
+@@ -1197,7 +1165,9 @@
+ return;
+ }
+ priv->ga_client = ga_client;
+- priv->resolve_handles = g_hash_table_new (g_direct_hash, g_direct_equal);
++ priv->resolve_handles = g_hash_table_new_full (g_str_hash, g_str_equal,
++ g_free,
++ (GDestroyNotify) resolve_data_free);
+ }
+
+ static void
+@@ -1210,6 +1180,7 @@
+ {
+ if (priv->browse_handles[i] != NULL)
+ {
++ g_object_unref (priv->browse_handles[i]);
+ priv->browse_handles[i] = NULL;
+ }
+ }
+@@ -1222,7 +1193,8 @@
+
+ if (priv->local != NULL)
+ {
+- ephy_node_remove_child (priv->keywords, priv->local);
++ ephy_node_unref (priv->local);
++ priv->local = NULL;
+ }
+
+ if (priv->ga_client != NULL)
+@@ -1431,7 +1403,7 @@
+
+ LOG ("Bookmarks finalized");
+
+- G_OBJECT_CLASS (parent_class)->finalize (object);
++ G_OBJECT_CLASS (ephy_bookmarks_parent_class)->finalize (object);
+ }
+
+ EphyBookmarks *