aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarlos Garcia Campos <cgarcia@igalia.com>2013-03-16 18:50:59 +0800
committerCarlos Garcia Campos <carlosgc@gnome.org>2013-03-17 19:53:05 +0800
commit26435511e0a9579257ff97abc9af2e08a14c8103 (patch)
tree635b0d9835029b5596f575ebaed68c81a7f24b19
parentd091063aaf74153d37b50cb82e2b4b14d1a0fcb0 (diff)
downloadgsoc2013-epiphany-26435511e0a9579257ff97abc9af2e08a14c8103.tar
gsoc2013-epiphany-26435511e0a9579257ff97abc9af2e08a14c8103.tar.gz
gsoc2013-epiphany-26435511e0a9579257ff97abc9af2e08a14c8103.tar.bz2
gsoc2013-epiphany-26435511e0a9579257ff97abc9af2e08a14c8103.tar.lz
gsoc2013-epiphany-26435511e0a9579257ff97abc9af2e08a14c8103.tar.xz
gsoc2013-epiphany-26435511e0a9579257ff97abc9af2e08a14c8103.tar.zst
gsoc2013-epiphany-26435511e0a9579257ff97abc9af2e08a14c8103.zip
Add spelling suggestion to the context menu in WebKit2
https://bugzilla.gnome.org/show_bug.cgi?id=695904
-rw-r--r--src/ephy-window.c60
-rw-r--r--src/popup-commands.c4
2 files changed, 57 insertions, 7 deletions
diff --git a/src/ephy-window.c b/src/ephy-window.c
index 26b902797..ef3a74837 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -1844,6 +1844,35 @@ find_item_in_context_menu (WebKitContextMenu *context_menu,
return NULL;
}
+static GList *
+find_spelling_guess_context_menu_items (WebKitContextMenu *context_menu)
+{
+ GList *items, *iter;
+ guint i;
+ GList *retval = NULL;
+
+ items = webkit_context_menu_get_items (context_menu);
+ for (iter = items, i = 0; iter && i < MAX_SPELL_CHECK_GUESSES; iter = g_list_next (iter), i++)
+ {
+ WebKitContextMenuItem *item = (WebKitContextMenuItem *)iter->data;
+
+ if (webkit_context_menu_item_get_stock_action (item) == WEBKIT_CONTEXT_MENU_ACTION_SPELLING_GUESS)
+ {
+ retval = g_list_prepend (retval, g_object_ref (item));
+ }
+ else
+ {
+ /* Spelling guesses are always at the beginning of the context menu, so
+ * we can break the loop as soon as we find the first item that is not
+ * spelling guess.
+ */
+ break;
+ }
+ }
+
+ return g_list_reverse (retval);
+}
+
static gboolean
populate_context_menu (WebKitWebView *web_view,
WebKitContextMenu *context_menu,
@@ -1852,14 +1881,18 @@ populate_context_menu (WebKitWebView *web_view,
EphyWindow *window)
{
EphyWindowPrivate *priv = window->priv;
- WebKitContextMenuItem *input_methods_item;
- WebKitContextMenuItem *unicode_item;
+ WebKitContextMenuItem *input_methods_item = NULL;
+ WebKitContextMenuItem *unicode_item = NULL;
+ GList *spelling_guess_items = NULL;
EphyEmbedEvent *embed_event;
gboolean is_document = FALSE;
gboolean app_mode;
- input_methods_item = find_item_in_context_menu (context_menu, WEBKIT_CONTEXT_MENU_ACTION_INPUT_METHODS);
- unicode_item = find_item_in_context_menu (context_menu, WEBKIT_CONTEXT_MENU_ACTION_UNICODE);
+ if (webkit_hit_test_result_context_is_editable (hit_test_result)) {
+ input_methods_item = find_item_in_context_menu (context_menu, WEBKIT_CONTEXT_MENU_ACTION_INPUT_METHODS);
+ unicode_item = find_item_in_context_menu (context_menu, WEBKIT_CONTEXT_MENU_ACTION_UNICODE);
+ spelling_guess_items = find_spelling_guess_context_menu_items (context_menu);
+ }
webkit_context_menu_remove_all (context_menu);
@@ -1920,6 +1953,25 @@ populate_context_menu (WebKitWebView *web_view,
}
else if (webkit_hit_test_result_context_is_editable (hit_test_result))
{
+ GList *l;
+ gboolean has_guesses = FALSE;
+
+ for (l = spelling_guess_items; l; l = g_list_next (l))
+ {
+ WebKitContextMenuItem *item = WEBKIT_CONTEXT_MENU_ITEM (l->data);
+
+ webkit_context_menu_append (context_menu, item);
+ g_object_unref (item);
+ has_guesses = TRUE;
+ }
+ g_list_free (spelling_guess_items);
+
+ if (has_guesses)
+ {
+ webkit_context_menu_append (context_menu,
+ webkit_context_menu_item_new_separator ());
+ }
+
update_edit_actions_sensitivity (window, FALSE);
add_action_to_context_menu (context_menu,
diff --git a/src/popup-commands.c b/src/popup-commands.c
index 1a1d973a5..2896fb22b 100644
--- a/src/popup-commands.c
+++ b/src/popup-commands.c
@@ -491,9 +491,7 @@ void
popup_replace_spelling (GtkAction *action,
EphyWindow *window)
{
-#ifdef HAVE_WEBKIT2
- /* TODO: Context Menu, Spellchecker */
-#else
+#ifndef HAVE_WEBKIT2
EphyEmbed *embed;
WebKitWebView *view;
WebKitWebFrame *frame;