[webkit-qt] QtWebkit & Virtual Keyboard
Andrew Webster
apwebster at gmail.com
Tue Apr 27 06:30:39 PDT 2010
I did something similar for text inputs. I hacked a class called
QWebPageEx that extends QWebPage into webkit that is able to determine
if a text field is selected and get and set the text in it. In my
user app, I extended QWebPageEx and then every time there is a
MouseButtonRelease I check if a text field is selected and then open a
soft keyboard.
It's not the cleanest method and it breaks every time there's a major
update to webkit, but it does work. You may be able to do something
similar for list/combo boxes.
Here is the header:
#include "qwebpage.h"
namespace WebCore
{
class Node;
class HTMLInputElement;
}
class QWEBKIT_EXPORT QWebPageEx : public QWebPage
{
public:
QWebPageEx(QObject *parent = 0);
~QWebPageEx();
bool isTextField() const;
bool isPasswordField() const;
QString text() const;
void setText(const QString& text);
QString getAttribute(const QString& attrName);
private:
WebCore::Node* selectedNode() const;
WebCore::HTMLInputElement* selectedInput() const;
};
And the source:
#include "qwebpageex.h"
#include "config.h"
#include "qwebpage_p.h"
#include "Frame.h"
#include "Page.h"
#include "FocusController.h"
#include "HTMLInputElement.h"
#include "HTMLNames.h"
#include "ClientRect.h"
#include "JSDOMWindow.h"
QWebPageEx::QWebPageEx(QObject *parent) :
QWebPage(parent)
{
}
QWebPageEx::~QWebPageEx()
{
}
bool QWebPageEx::isTextField() const
{
const WebCore::HTMLInputElement *input = selectedInput();
if (input)
{
return input->isTextField();
}
return false;
}
bool QWebPageEx::isPasswordField() const
{
const WebCore::HTMLInputElement *input = selectedInput();
if (input)
{
return input->isPasswordField();
}
return false;
}
QString QWebPageEx::text() const
{
const WebCore::HTMLInputElement *input = selectedInput();
if (input)
{
return input->value();
}
return QString();
}
void QWebPageEx::setText(const QString& text)
{
WebCore::HTMLInputElement *input = selectedInput();
if (input)
{
input->setValue(text);
input->dispatchFormControlChangeEvent();
}
}
QString QWebPageEx::getAttribute(const QString& attrName)
{
WebCore::Node *node = selectedNode();
if (node && node->hasAttributes())
{
WebCore::NamedNodeMap *attrs = node->attributes();
if (attrs)
{
WTF::PassRefPtr<WebCore::Node> nd = attrs->getNamedItem(attrName);
if (nd.get())
{
return nd->nodeValue();
}
}
}
return QString();
}
WebCore::Node* QWebPageEx::selectedNode() const
{
WebCore::Frame *frame =
handle()->page->focusController()->focusedOrMainFrame();
if (frame)
{
WebCore::Document *document = frame->document();
if (document)
{
WebCore::Node *node = document->focusedNode();
if (node)
{
return node;
}
}
}
return NULL;
}
WebCore::HTMLInputElement* QWebPageEx::selectedInput() const
{
WebCore::Node *node = selectedNode();
if (node && node->hasTagName(WebCore::HTMLNames::inputTag))
{
return static_cast<WebCore::HTMLInputElement*>(node);
}
return NULL;
}
Andrew
On Tue, Apr 27, 2010 at 3:07 AM, Ivan De Marino
<ivan.de.marino at gmail.com> wrote:
> Input methods in Qt are defined by-platform, and that should not change if
> you are in a QWebView.
> If you want to modify what do you get in terms of Keyboards, Combo-box and
> so forth, you might want to take a look to the actual source code of
> QtWebKit and see where you can "plug yourself" in. It's not going to be an
> easy task, I think.
> It might be that you are raising an interesting point: allowing developers
> to implement/extend the input methods for QWebKit, so that personalized
> Input Methods can be easily added. that's an interesting idea.
> Good luck.
>
> On 27 April 2010 07:39, sunny shah <sunny.cpp at gmail.com> wrote:
>>
>> Hi ,
>> But I want to make it for Qt for embedded linux ( My windowing server is
>> QWS ( Qt Windowing System) ), I want to mentioned functionality ( Want to
>> make mobile browser similar to iPhone | Android ). Isn't it possible that
>> textbox OR listbox OR combobox which QtWebkit uses will be derived by me ?
>> Or is there any other way? I am ready to do hacking in code, Just help me
>> for quick start.
>> Many Thanks,
>> Sunny.
>> On Tue, Apr 27, 2010 at 1:41 AM, Kenneth Christiansen
>> <kenneth.christiansen at openbossa.org> wrote:
>>>
>>> We would all like that :-) but it is a lot of work to get done right.
>>>
>>> With QtWebKit 2.0 which will soon be released, and if your embedded
>>> linux is based on Maemo5, you will get a dialog for selection (what
>>> you call combobox/listbox), event for the multiple selection case. On
>>> other platforms you are out of luck. Virtual keyboard will also work
>>> on that platform.
>>>
>>> Kenneth
>>>
>>> On Mon, Apr 26, 2010 at 2:59 PM, sunny shah <sunny.cpp at gmail.com> wrote:
>>> > Hi,
>>> >
>>> > I am making mobile browser for Qt for embedded linux. I want to have
>>> > virtual keyboard, separate window for listbox and combo box and custom
>>> > message box styles in QtWebkit. Please help me with this.
>>> >
>>> > Regards,
>>> > Sunny.
>>> > _______________________________________________
>>> > webkit-qt mailing list
>>> > webkit-qt at lists.webkit.org
>>> > http://lists.webkit.org/mailman/listinfo.cgi/webkit-qt
>>> >
>>> >
>>>
>>>
>>>
>>> --
>>> Kenneth Rohde Christiansen
>>> Technical Lead / Senior Software Engineer
>>> Qt Labs Americas, Nokia Technology Institute, INdT
>>> Phone +55 81 8895 6002 / E-mail kenneth.christiansen at openbossa.org
>>
>>
>> _______________________________________________
>> webkit-qt mailing list
>> webkit-qt at lists.webkit.org
>> http://lists.webkit.org/mailman/listinfo.cgi/webkit-qt
>>
>
>
>
> --
> Ivan De Marino | Software Engineer | France Telecom R&D UK - Orange Labs
> w. +44 20 8849 5806 | m. +44 7515 955 861 | m. +44 7974 156 216
> ivan[dot]demarino[at]orange-ftgroup.com |
> ivan[dot]de[dot]marino[at]gmail[dot]com
> www.detronizator.org | www.linkedin.com/in/ivandemarino
>
> _______________________________________________
> webkit-qt mailing list
> webkit-qt at lists.webkit.org
> http://lists.webkit.org/mailman/listinfo.cgi/webkit-qt
>
>
More information about the webkit-qt
mailing list