[webkit-dev] problem with css :focus

Antonio Gomes (:tonikitoo) tonikitoo at gmail.com
Wed Jun 9 08:35:14 PDT 2010


Note you need to call both setActive and setFocused of FocusController
for it to work for you.

In gtk:

static void webkit_web_view_grab_focus(GtkWidget* widget)
{
  ...
  FocusController* focusController = core(webView)->focusController();
  focusController->setActive(true);
  if (focusController->focusedFrame())
    focusController->setFocused(true);
  else
    focusController->setFocusedFrame(core(webView)->mainFrame());
}

On Wed, Jun 9, 2010 at 8:24 AM, Alex Vazquez <alexvazquezfente at gmail.com> wrote:
> Right, the problem is the frame not being focused. That's why changing the
> condition to just e->document()->frame()->selection()->isFocused didn't work
> either.
>
> In the webkit/GTK port, it is focused, so we are trying to find the
> difference regarding to that in both ports. Maybe some GTK platform check
> ...
>
> Any further idea is greatly appreciated and i'll post back for reference if
> we find the fix.
>
> Thanks and kind regards,
>
> 2010/6/8 David Hyatt <hyatt at apple.com>
>>
>> isFocusedAndActive is asking if your frame is the focused frame and if the
>> window that contains your frame is also active.  I would guess that you are
>> not setting the state of your frames/windows correctly.  If your window is
>> considered inactive or if your frame is not considered focused, then :focus
>> is not going to be honored.
>> dave
>> (hyatt at apple.com)
>> On Jun 8, 2010, at 3:33 AM, Alex Vazquez wrote:
>>
>> Hello list,
>>
>> We're running a customized build of WebKit (actually a DirectFB port) and
>> we are experiencing problems with the css :focus pseudo-class. We use webkit
>> as GUI renderer and, when changing the focused element through JavaScript
>> (using the focus function), the style associated to the  :focus pseudo-class
>> is not applied. The attached page is our reduced testcase, it should show
>> two links, the first of them focused but it shows two unfocused links:
>>
>> <html>
>>
>>     <head>
>>
>>         <style type="text/css">
>>
>>         body {
>>                 color: #f00;
>>                 background-color:#ddd;
>>                 font-size:26px;
>>         }
>>
>>         div {
>>                 float: left;
>>                 padding: 50px;
>>         }
>>
>>         a, span {
>>                 float:left;
>>                 display:block;
>>                 clear:both;
>>         }
>>
>>         a:focus {
>>                 color:#f0f;
>>         }
>>
>>         </style>
>>
>>         <script type="text/javascript">
>>
>>         function init() {
>>         document.getElementById("uno").focus();
>>         }
>>
>>         </script>
>>
>>     </head>
>>
>>     <body onload="init();">
>>         <div>
>>
>>             <a id="uno" href="http://www.webkit.org/">WebKit</a>
>>             <a id="dos" href="http://nightly.webkit.org">Nightly
>> Builds</a>
>>
>>         </div>
>>     </body>
>>
>> </html>
>>
>>
>> The version with this problem is based on r58260 revision while a
>> previously one (with nearly the same adapted patches) based in r40084 worked
>> fine. We build webkit for an embedded MIPS processor and for x86 too. Both
>> versions show the undesired behaviour.
>>
>> Investigating through the WebKit code, we've found that applying the
>> following patch fixes the problem:
>>
>> --- a/WebCore/css/CSSStyleSelector.cpp    2010-06-04 13:35:19.000000000
>> +0000
>> +++ b/WebCore/css/CSSStyleSelector.cpp    2010-06-04 13:35:35.000000000
>> +0000
>> @@ -2428,7 +2428,7 @@
>>                  break;
>>              }
>>              case CSSSelector::PseudoFocus:
>> -                if (e && e->focused() &&
>> e->document()->frame()->selection()->isFocusedAndActive())
>> +        if (e && e->focused())
>>                      return true;
>>                  break;
>>              case CSSSelector::PseudoHover: {
>>
>> That line was there since r40084 and it worked so we have some questions
>> about the patch:
>>
>> * Does it have any problem that we have overlooked?
>>
>> * Can someone with knowledge on the css component explain why the active
>> state of the selection is checked in that line? We also try to change that
>> check by e->document()->frame()->selection()->isFocused() but it didn't fix
>> it.
>>
>> Kind regards,
>>
>> --
>> Alejandro Vazquez Fente
>>
>> <focus_index.html><css_style_selector_focus.patch>_______________________________________________
>> webkit-dev mailing list
>> webkit-dev at lists.webkit.org
>> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
>>
>
>
>
> --
> Alejandro Vazquez Fente
>
> _______________________________________________
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
>
>



-- 
--Antonio Gomes


More information about the webkit-dev mailing list