Add Ignore Spelling and Add Spelling context menu options
We want to make a non-awful spellchecking context menu, but it's blocked on a couple WebKit bugs we discovered:
The following discussion from !343 (merged) should be addressed:
-
@mcatanzaro started a discussion: (+4 comments) I tested the Ignore Spelling feature, but it crashes:
** (epiphany:13725): CRITICAL **: 16:32:37.536: enchant_dict_add_to_session: assertion 'len' failed Trace/breakpoint trap (core dumped)
(gdb) bt #0 _g_log_abort (breakpoint=1) at ../../../../Projects/glib/glib/gmessages.c:557 #1 0x00007f4d767213da in g_logv (log_domain=0x0, log_level=G_LOG_LEVEL_CRITICAL, format=0x7f4d7678170d "%s: assertion '%s' failed", args=0x7fff369168b8) at ../../../../Projects/glib/glib/gmessages.c:1371 #2 0x00007f4d767214cb in g_log (log_domain=0x0, log_level=G_LOG_LEVEL_CRITICAL, format=0x7f4d7678170d "%s: assertion '%s' failed") at ../../../../Projects/glib/glib/gmessages.c:1413 #3 0x00007f4d7672337a in g_return_if_fail_warning (log_domain=0x0, pretty_function=0x7f4d6e9467d0 "enchant_dict_add_to_session", expression=0x7f4d6e946069 "len") at ../../../../Projects/glib/glib/gmessages.c:2767 #4 0x00007f4d74d4c818 in WebCore::TextCheckerEnchant::ignoreWord ( this=<optimized out>, word=...) at /usr/include/c++/9/bits/unique_ptr.h:357 #5 0x00007f4d73771706 in IPC::callMemberFunctionImpl<WebKit::WebPageProxy, void (WebKit::WebPageProxy::*)(WTF::String const&), std::tuple<WTF::String>, 0ul> ( args=..., function= (void (WebKit::WebPageProxy::*)(class WebKit::WebPageProxy * const, const class WTF::String &)) 0x7f4d73992cb0 <WebKit::WebPageProxy::ignoreWord(WTF::String const&)>, object=0x7f4d1ddf8000) at /usr/include/c++/9/tuple:1332 #6 IPC::callMemberFunction<WebKit::WebPageProxy, void (WebKit::WebPageProxy::*) (WTF::String const&), std::tuple<WTF::String>, std::integer_sequence<unsigned long, 0ul> > (function=(void (WebKit::WebPageProxy::*)(class WebKit::WebPageProxy * const, const class WTF::String &)) 0x7f4d73992cb0 <WebKit::WebPageProxy::ignoreWord(WTF::String const&)>, object=0x7f4d1ddf8000, args=...) at /home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:47 #7 IPC::handleMessage<Messages::WebPageProxy::IgnoreWord, WebKit::WebPageProxy, void (WebKit::WebPageProxy::*)(WTF::String const&)> (decoder=..., object=object@entry=0x7f4d1ddf8000, function=(void (WebKit::WebPageProxy::*)(class WebKit::WebPageProxy * const, const class WTF::String &)) 0x7f4d73992cb0 <WebKit::WebPageProxy::ignoreWord(WTF::String const&)>) at /home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/HandleMessage.h:120 #8 0x00007f4d73766f8a in WebKit::WebPageProxy::didReceiveMessage (this=0x7f4d1ddf8000, connection=..., decoder=...) at DerivedSources/WebKit/WebPageProxyMessageReceiver.cpp:1400 #9 0x00007f4d738e609f in IPC::MessageReceiverMap::dispatchMessage (this=this@entry=0x7f4d5dfad3f0, connection=..., decoder=...) at /home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/MessageReceiverMap.cpp:123 #10 0x00007f4d7395c839 in WebKit::AuxiliaryProcessProxy::dispatchMessage (this=this@entry=0x7f4d5dfad3c0, connection=..., decoder=...) at /home/mcatanzaro/Projects/WebKit/Source/WebKit/UIProcess/AuxiliaryProcessProxy.cpp:155 #11 0x00007f4d739cfe13 in WebKit::WebProcessProxy::didReceiveMessage (this=0x7f4d5dfad3c0, connection=..., decoder=...) at /home/mcatanzaro/Projects/WebKit/Source/WebKit/UIProcess/WebProcessProxy.cpp:631 #12 0x00007f4d738df720 in IPC::Connection::dispatchMessage (this=0x7f4d5dfd31a0, decoder=...) at /home/mcatanzaro/Projects/WebKit/Source/WebKit/Platform/IPC/Connection.cpp:983 #13 0x00007f4d738e0bb8 in IPC::Connection::dispatchMessage (this=0x7f4d5dfd31a0, message=std::unique_ptr<class IPC::Decoder> = {...}) at /usr/include/c++/9/bits/unique_ptr.h:357 #14 0x00007f4d738e1c82 in IPC::Connection::dispatchIncomingMessages (this=0x7f4d5dfd31a0) at /usr/include/c++/9/bits/move.h:74 #15 0x00007f4d72ded405 in WTF::Function<void ()>::operator()() const (this=<synthetic pointer>) at /home/mcatanzaro/Projects/WebKit/Source/WTF/wtf/Lock.h:84 #16 WTF::RunLoop::performWork (this=0x7f4d5dffa000) at /home/mcatanzaro/Projects/WebKit/Source/WTF/wtf/RunLoop.cpp:106 #17 0x00007f4d72e34469 in WTF::RunLoop::<lambda(gpointer)>::operator() (__closure=0x0, userData=<optimized out>) at /home/mcatanzaro/Projects/WebKit/Source/WTF/wtf/glib/RunLoopGLib.cpp:68 #18 WTF::RunLoop::<lambda(gpointer)>::_FUN(gpointer) () at /home/mcatanzaro/Projects/WebKit/Source/WTF/wtf/glib/RunLoopGLib.cpp:70 #19 0x00007f4d7671719d in g_main_dispatch (context=0x208ba60) at ../../../../Projects/glib/glib/gmain.c:3176 #20 0x00007f4d76717ffa in g_main_context_dispatch (context=0x208ba60) at ../../../../Projects/glib/glib/gmain.c:3841 #21 0x00007f4d767181de in g_main_context_iterate (context=0x208ba60, block=1, dispatch=1, self=0x2075b00) at ../../../../Projects/glib/glib/gmain.c:3914 #22 0x00007f4d767182a2 in g_main_context_iteration (context=0x208ba60, may_block=1) at ../../../../Projects/glib/glib/gmain.c:3975 #23 0x00007f4d7696207b in g_application_run (application=0x2336230, argc=1, argv=0x7fff36916fc8) at ../../../../Projects/glib/gio/gapplication.c:2554 #24 0x00000000004102b2 in main (argc=1, argv=0x7fff36916fc8) at ../../../../Projects/epiphany/src/ephy-main.c:428
Sadly gdb itself crashes when trying to use 'bt full'.