- Add CefFocusHandler::OnFocusedNodeChanged() notification (issue #379).
- Add CefDOMNode::IsFormControlElement() and CefDOMNode::GetFormControlElementType() methods (issue #379). - Add space bar handling example to cefclient. git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@318 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
parent
06b7e9ab53
commit
9c6dcab73a
|
@ -1331,6 +1331,19 @@ public:
|
||||||
/*--cef()--*/
|
/*--cef()--*/
|
||||||
virtual bool OnSetFocus(CefRefPtr<CefBrowser> browser,
|
virtual bool OnSetFocus(CefRefPtr<CefBrowser> browser,
|
||||||
FocusSource source) { return false; }
|
FocusSource source) { return false; }
|
||||||
|
|
||||||
|
///
|
||||||
|
// Called when a new node in the the browser gets focus. The |node| value may
|
||||||
|
// be empty if no specific node has gained focus. The node object passed to
|
||||||
|
// this method represents a snapshot of the DOM at the time this method is
|
||||||
|
// executed. DOM objects are only valid for the scope of this method. Do not
|
||||||
|
// keep references to or attempt to access any DOM objects outside the scope
|
||||||
|
// of this method.
|
||||||
|
///
|
||||||
|
/*--cef()--*/
|
||||||
|
virtual void OnFocusedNodeChanged(CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
CefRefPtr<CefDOMNode> node) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1345,10 +1358,11 @@ public:
|
||||||
typedef cef_handler_keyevent_type_t KeyEventType;
|
typedef cef_handler_keyevent_type_t KeyEventType;
|
||||||
|
|
||||||
///
|
///
|
||||||
// Called when the browser component receives a keyboard event. |type| is the
|
// Called when the browser component receives a keyboard event that has not
|
||||||
// type of keyboard event, |code| is the windows scan-code for the event,
|
// been intercepted via JavaScript. |type| is the type of keyboard event,
|
||||||
// |modifiers| is a set of bit-flags describing any pressed modifier keys and
|
// |code| is the windows scan-code for the event, |modifiers| is a set of bit-
|
||||||
// |isSystemKey| is true if Windows considers this a 'system key' message (see
|
// flags describing any pressed modifier keys and |isSystemKey| is true if
|
||||||
|
// Windows considers this a 'system key' message (see
|
||||||
// http://msdn.microsoft.com/en-us/library/ms646286(VS.85).aspx). Return
|
// http://msdn.microsoft.com/en-us/library/ms646286(VS.85).aspx). Return
|
||||||
// true if the keyboard event was handled or false to allow the browser
|
// true if the keyboard event was handled or false to allow the browser
|
||||||
// component to handle the event.
|
// component to handle the event.
|
||||||
|
@ -3267,6 +3281,18 @@ public:
|
||||||
/*--cef()--*/
|
/*--cef()--*/
|
||||||
virtual bool IsElement() =0;
|
virtual bool IsElement() =0;
|
||||||
|
|
||||||
|
///
|
||||||
|
// Returns true if this is a form control element node.
|
||||||
|
///
|
||||||
|
/*--cef()--*/
|
||||||
|
virtual bool IsFormControlElement() =0;
|
||||||
|
|
||||||
|
///
|
||||||
|
// Returns the type of this form control element node.
|
||||||
|
///
|
||||||
|
/*--cef()--*/
|
||||||
|
virtual CefString GetFormControlElementType() =0;
|
||||||
|
|
||||||
///
|
///
|
||||||
// Returns true if this object is pointing to the same handle as |that|
|
// Returns true if this object is pointing to the same handle as |that|
|
||||||
// object.
|
// object.
|
||||||
|
|
|
@ -1138,6 +1138,18 @@ typedef struct _cef_focus_handler_t
|
||||||
int (CEF_CALLBACK *on_set_focus)(struct _cef_focus_handler_t* self,
|
int (CEF_CALLBACK *on_set_focus)(struct _cef_focus_handler_t* self,
|
||||||
struct _cef_browser_t* browser, enum cef_handler_focus_source_t source);
|
struct _cef_browser_t* browser, enum cef_handler_focus_source_t source);
|
||||||
|
|
||||||
|
///
|
||||||
|
// Called when a new node in the the browser gets focus. The |node| value may
|
||||||
|
// be NULL if no specific node has gained focus. The node object passed to
|
||||||
|
// this function represents a snapshot of the DOM at the time this function is
|
||||||
|
// executed. DOM objects are only valid for the scope of this function. Do not
|
||||||
|
// keep references to or attempt to access any DOM objects outside the scope
|
||||||
|
// of this function.
|
||||||
|
///
|
||||||
|
void (CEF_CALLBACK *on_focused_node_changed)(
|
||||||
|
struct _cef_focus_handler_t* self, struct _cef_browser_t* browser,
|
||||||
|
struct _cef_frame_t* frame, struct _cef_domnode_t* node);
|
||||||
|
|
||||||
} cef_focus_handler_t;
|
} cef_focus_handler_t;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1151,13 +1163,14 @@ typedef struct _cef_keyboard_handler_t
|
||||||
cef_base_t base;
|
cef_base_t base;
|
||||||
|
|
||||||
///
|
///
|
||||||
// Called when the browser component receives a keyboard event. |type| is the
|
// Called when the browser component receives a keyboard event that has not
|
||||||
// type of keyboard event, |code| is the windows scan-code for the event,
|
// been intercepted via JavaScript. |type| is the type of keyboard event,
|
||||||
// |modifiers| is a set of bit-flags describing any pressed modifier keys and
|
// |code| is the windows scan-code for the event, |modifiers| is a set of bit-
|
||||||
// |isSystemKey| is true (1) if Windows considers this a 'system key' message
|
// flags describing any pressed modifier keys and |isSystemKey| is true (1) if
|
||||||
// (see http://msdn.microsoft.com/en-us/library/ms646286(VS.85).aspx). Return
|
// Windows considers this a 'system key' message (see
|
||||||
// true (1) if the keyboard event was handled or false (0) to allow the
|
// http://msdn.microsoft.com/en-us/library/ms646286(VS.85).aspx). Return true
|
||||||
// browser component to handle the event.
|
// (1) if the keyboard event was handled or false (0) to allow the browser
|
||||||
|
// component to handle the event.
|
||||||
///
|
///
|
||||||
int (CEF_CALLBACK *on_key_event)(struct _cef_keyboard_handler_t* self,
|
int (CEF_CALLBACK *on_key_event)(struct _cef_keyboard_handler_t* self,
|
||||||
struct _cef_browser_t* browser, enum cef_handler_keyevent_type_t type,
|
struct _cef_browser_t* browser, enum cef_handler_keyevent_type_t type,
|
||||||
|
@ -3045,6 +3058,18 @@ typedef struct _cef_domnode_t
|
||||||
///
|
///
|
||||||
int (CEF_CALLBACK *is_element)(struct _cef_domnode_t* self);
|
int (CEF_CALLBACK *is_element)(struct _cef_domnode_t* self);
|
||||||
|
|
||||||
|
///
|
||||||
|
// Returns true (1) if this is a form control element node.
|
||||||
|
///
|
||||||
|
int (CEF_CALLBACK *is_form_control_element)(struct _cef_domnode_t* self);
|
||||||
|
|
||||||
|
///
|
||||||
|
// Returns the type of this form control element node.
|
||||||
|
///
|
||||||
|
// The resulting string must be freed by calling cef_string_userfree_free().
|
||||||
|
cef_string_userfree_t (CEF_CALLBACK *get_form_control_element_type)(
|
||||||
|
struct _cef_domnode_t* self);
|
||||||
|
|
||||||
///
|
///
|
||||||
// Returns true (1) if this object is pointing to the same handle as |that|
|
// Returns true (1) if this object is pointing to the same handle as |that|
|
||||||
// object.
|
// object.
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "browser_webstoragenamespace_impl.h"
|
#include "browser_webstoragenamespace_impl.h"
|
||||||
#include "browser_zoom_map.h"
|
#include "browser_zoom_map.h"
|
||||||
#include "cef_context.h"
|
#include "cef_context.h"
|
||||||
|
#include "dom_document_impl.h"
|
||||||
#include "request_impl.h"
|
#include "request_impl.h"
|
||||||
#include "v8_impl.h"
|
#include "v8_impl.h"
|
||||||
|
|
||||||
|
@ -462,6 +463,30 @@ void BrowserWebViewDelegate::focusPrevious() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BrowserWebViewDelegate::focusedNodeChanged(const WebKit::WebNode& node) {
|
||||||
|
CefRefPtr<CefClient> client = browser_->GetClient();
|
||||||
|
if (client.get()) {
|
||||||
|
CefRefPtr<CefFocusHandler> handler = client->GetFocusHandler();
|
||||||
|
if (handler.get()) {
|
||||||
|
if (node.isNull()) {
|
||||||
|
handler->OnFocusedNodeChanged(browser_, browser_->GetFocusedFrame(),
|
||||||
|
NULL);
|
||||||
|
} else {
|
||||||
|
const WebKit::WebDocument& document = node.document();
|
||||||
|
if (!document.isNull()) {
|
||||||
|
WebKit::WebFrame* frame = document.frame();
|
||||||
|
CefRefPtr<CefDOMDocumentImpl> documentImpl =
|
||||||
|
new CefDOMDocumentImpl(browser_, frame);
|
||||||
|
handler->OnFocusedNodeChanged(browser_,
|
||||||
|
browser_->UIT_GetCefFrame(frame),
|
||||||
|
documentImpl->GetOrCreateNode(node));
|
||||||
|
documentImpl->Detach();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void BrowserWebViewDelegate::navigateBackForwardSoon(int offset) {
|
void BrowserWebViewDelegate::navigateBackForwardSoon(int offset) {
|
||||||
browser_->UIT_GetNavigationController()->GoToOffset(offset);
|
browser_->UIT_GetNavigationController()->GoToOffset(offset);
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,6 +112,7 @@ class BrowserWebViewDelegate : public WebKit::WebViewClient,
|
||||||
virtual bool acceptsLoadDrops() OVERRIDE { return true; }
|
virtual bool acceptsLoadDrops() OVERRIDE { return true; }
|
||||||
virtual void focusNext() OVERRIDE;
|
virtual void focusNext() OVERRIDE;
|
||||||
virtual void focusPrevious() OVERRIDE;
|
virtual void focusPrevious() OVERRIDE;
|
||||||
|
virtual void focusedNodeChanged(const WebKit::WebNode& node) OVERRIDE;
|
||||||
virtual void navigateBackForwardSoon(int offset) OVERRIDE;
|
virtual void navigateBackForwardSoon(int offset) OVERRIDE;
|
||||||
virtual int historyBackListCount() OVERRIDE;
|
virtual int historyBackListCount() OVERRIDE;
|
||||||
virtual int historyForwardListCount() OVERRIDE;
|
virtual int historyForwardListCount() OVERRIDE;
|
||||||
|
|
|
@ -159,6 +159,40 @@ bool CefDOMNodeImpl::IsElement()
|
||||||
return node_.isElementNode();
|
return node_.isElementNode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CefDOMNodeImpl::IsFormControlElement()
|
||||||
|
{
|
||||||
|
if (!VerifyContext())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (node_.isElementNode()) {
|
||||||
|
const WebElement& element = node_.toConst<WebElement>();
|
||||||
|
return element.isFormControlElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CefString CefDOMNodeImpl::GetFormControlElementType()
|
||||||
|
{
|
||||||
|
CefString str;
|
||||||
|
if (!VerifyContext())
|
||||||
|
return str;
|
||||||
|
|
||||||
|
if (node_.isElementNode()) {
|
||||||
|
const WebElement& element = node_.toConst<WebElement>();
|
||||||
|
if (element.isFormControlElement()) {
|
||||||
|
// Retrieve the type from the form control element.
|
||||||
|
const WebFormControlElement& formElement =
|
||||||
|
node_.toConst<WebFormControlElement>();
|
||||||
|
|
||||||
|
const string16& form_control_type = formElement.formControlType();
|
||||||
|
str = form_control_type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
bool CefDOMNodeImpl::IsSame(CefRefPtr<CefDOMNode> that)
|
bool CefDOMNodeImpl::IsSame(CefRefPtr<CefDOMNode> that)
|
||||||
{
|
{
|
||||||
if (!VerifyContext())
|
if (!VerifyContext())
|
||||||
|
|
|
@ -20,6 +20,8 @@ public:
|
||||||
virtual Type GetType() OVERRIDE;
|
virtual Type GetType() OVERRIDE;
|
||||||
virtual bool IsText() OVERRIDE;
|
virtual bool IsText() OVERRIDE;
|
||||||
virtual bool IsElement() OVERRIDE;
|
virtual bool IsElement() OVERRIDE;
|
||||||
|
virtual bool IsFormControlElement() OVERRIDE;
|
||||||
|
virtual CefString GetFormControlElementType() OVERRIDE;
|
||||||
virtual bool IsSame(CefRefPtr<CefDOMNode> that) OVERRIDE;
|
virtual bool IsSame(CefRefPtr<CefDOMNode> that) OVERRIDE;
|
||||||
virtual CefString GetName() OVERRIDE;
|
virtual CefString GetName() OVERRIDE;
|
||||||
virtual CefString GetValue() OVERRIDE;
|
virtual CefString GetValue() OVERRIDE;
|
||||||
|
|
|
@ -40,6 +40,9 @@ public:
|
||||||
// instance to the other side.
|
// instance to the other side.
|
||||||
static StructName* Wrap(CefRefPtr<BaseName> c)
|
static StructName* Wrap(CefRefPtr<BaseName> c)
|
||||||
{
|
{
|
||||||
|
if (!c.get())
|
||||||
|
return NULL;
|
||||||
|
|
||||||
// Wrap our object with the CefCppToC class.
|
// Wrap our object with the CefCppToC class.
|
||||||
ClassName* wrapper = new ClassName(c);
|
ClassName* wrapper = new ClassName(c);
|
||||||
// Add a reference to our wrapper object that will be released once our
|
// Add a reference to our wrapper object that will be released once our
|
||||||
|
@ -53,6 +56,8 @@ public:
|
||||||
// our wrapper structure back from the other side.
|
// our wrapper structure back from the other side.
|
||||||
static CefRefPtr<BaseName> Unwrap(StructName* s)
|
static CefRefPtr<BaseName> Unwrap(StructName* s)
|
||||||
{
|
{
|
||||||
|
DCHECK(s);
|
||||||
|
|
||||||
// Cast our structure to the wrapper structure type.
|
// Cast our structure to the wrapper structure type.
|
||||||
Struct* wrapperStruct = reinterpret_cast<Struct*>(s);
|
Struct* wrapperStruct = reinterpret_cast<Struct*>(s);
|
||||||
// Add the underlying object instance to a smart pointer.
|
// Add the underlying object instance to a smart pointer.
|
||||||
|
|
|
@ -46,6 +46,26 @@ int CEF_CALLBACK domnode_is_element(struct _cef_domnode_t* self)
|
||||||
return CefDOMNodeCppToC::Get(self)->IsElement();
|
return CefDOMNodeCppToC::Get(self)->IsElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CEF_CALLBACK domnode_is_form_control_element(struct _cef_domnode_t* self)
|
||||||
|
{
|
||||||
|
DCHECK(self);
|
||||||
|
if (!self)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return CefDOMNodeCppToC::Get(self)->IsFormControlElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
cef_string_userfree_t CEF_CALLBACK domnode_get_form_control_element_type(
|
||||||
|
struct _cef_domnode_t* self)
|
||||||
|
{
|
||||||
|
DCHECK(self);
|
||||||
|
if (!self)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
CefString str = CefDOMNodeCppToC::Get(self)->GetFormControlElementType();
|
||||||
|
return str.DetachToUserFree();
|
||||||
|
}
|
||||||
|
|
||||||
int CEF_CALLBACK domnode_is_same(struct _cef_domnode_t* self,
|
int CEF_CALLBACK domnode_is_same(struct _cef_domnode_t* self,
|
||||||
struct _cef_domnode_t* that)
|
struct _cef_domnode_t* that)
|
||||||
{
|
{
|
||||||
|
@ -292,6 +312,9 @@ CefDOMNodeCppToC::CefDOMNodeCppToC(CefDOMNode* cls)
|
||||||
struct_.struct_.get_type = domnode_get_type;
|
struct_.struct_.get_type = domnode_get_type;
|
||||||
struct_.struct_.is_text = domnode_is_text;
|
struct_.struct_.is_text = domnode_is_text;
|
||||||
struct_.struct_.is_element = domnode_is_element;
|
struct_.struct_.is_element = domnode_is_element;
|
||||||
|
struct_.struct_.is_form_control_element = domnode_is_form_control_element;
|
||||||
|
struct_.struct_.get_form_control_element_type =
|
||||||
|
domnode_get_form_control_element_type;
|
||||||
struct_.struct_.is_same = domnode_is_same;
|
struct_.struct_.is_same = domnode_is_same;
|
||||||
struct_.struct_.get_name = domnode_get_name;
|
struct_.struct_.get_name = domnode_get_name;
|
||||||
struct_.struct_.get_value = domnode_get_value;
|
struct_.struct_.get_value = domnode_get_value;
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
|
|
||||||
#include "libcef_dll/cpptoc/focus_handler_cpptoc.h"
|
#include "libcef_dll/cpptoc/focus_handler_cpptoc.h"
|
||||||
#include "libcef_dll/ctocpp/browser_ctocpp.h"
|
#include "libcef_dll/ctocpp/browser_ctocpp.h"
|
||||||
|
#include "libcef_dll/ctocpp/domnode_ctocpp.h"
|
||||||
|
#include "libcef_dll/ctocpp/frame_ctocpp.h"
|
||||||
|
|
||||||
|
|
||||||
// MEMBER FUNCTIONS - Body may be edited by hand.
|
// MEMBER FUNCTIONS - Body may be edited by hand.
|
||||||
|
@ -40,6 +42,21 @@ int CEF_CALLBACK focus_handler_on_set_focus(struct _cef_focus_handler_t* self,
|
||||||
CefBrowserCToCpp::Wrap(browser), source);
|
CefBrowserCToCpp::Wrap(browser), source);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CEF_CALLBACK focus_handler_on_focused_node_changed(
|
||||||
|
struct _cef_focus_handler_t* self, cef_browser_t* browser,
|
||||||
|
cef_frame_t* frame, struct _cef_domnode_t* node)
|
||||||
|
{
|
||||||
|
DCHECK(self);
|
||||||
|
DCHECK(browser);
|
||||||
|
DCHECK(frame);
|
||||||
|
if (!self || !browser || !frame)
|
||||||
|
return;
|
||||||
|
|
||||||
|
return CefFocusHandlerCppToC::Get(self)->OnFocusedNodeChanged(
|
||||||
|
CefBrowserCToCpp::Wrap(browser), CefFrameCToCpp::Wrap(frame),
|
||||||
|
CefDOMNodeCToCpp::Wrap(node));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// CONSTRUCTOR - Do not edit by hand.
|
// CONSTRUCTOR - Do not edit by hand.
|
||||||
|
|
||||||
|
@ -49,6 +66,8 @@ CefFocusHandlerCppToC::CefFocusHandlerCppToC(CefFocusHandler* cls)
|
||||||
{
|
{
|
||||||
struct_.struct_.on_take_focus = focus_handler_on_take_focus;
|
struct_.struct_.on_take_focus = focus_handler_on_take_focus;
|
||||||
struct_.struct_.on_set_focus = focus_handler_on_set_focus;
|
struct_.struct_.on_set_focus = focus_handler_on_set_focus;
|
||||||
|
struct_.struct_.on_focused_node_changed =
|
||||||
|
focus_handler_on_focused_node_changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
|
|
|
@ -21,6 +21,9 @@ public:
|
||||||
// received from the other side.
|
// received from the other side.
|
||||||
static CefRefPtr<BaseName> Wrap(StructName* s)
|
static CefRefPtr<BaseName> Wrap(StructName* s)
|
||||||
{
|
{
|
||||||
|
if (!s)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
// Wrap their structure with the CefCToCpp object.
|
// Wrap their structure with the CefCToCpp object.
|
||||||
ClassName* wrapper = new ClassName(s);
|
ClassName* wrapper = new ClassName(s);
|
||||||
// Put the wrapper object in a smart pointer.
|
// Put the wrapper object in a smart pointer.
|
||||||
|
@ -36,6 +39,8 @@ public:
|
||||||
// instance for return back to the other side.
|
// instance for return back to the other side.
|
||||||
static StructName* Unwrap(CefRefPtr<BaseName> c)
|
static StructName* Unwrap(CefRefPtr<BaseName> c)
|
||||||
{
|
{
|
||||||
|
DCHECK(c.get());
|
||||||
|
|
||||||
// Cast the object to our wrapper class type.
|
// Cast the object to our wrapper class type.
|
||||||
ClassName* wrapper = static_cast<ClassName*>(c.get());
|
ClassName* wrapper = static_cast<ClassName*>(c.get());
|
||||||
// Add a reference to the CefCppToC wrapper object on the other side that
|
// Add a reference to the CefCppToC wrapper object on the other side that
|
||||||
|
|
|
@ -42,6 +42,26 @@ bool CefDOMNodeCToCpp::IsElement()
|
||||||
return struct_->is_element(struct_) ? true : false;
|
return struct_->is_element(struct_) ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CefDOMNodeCToCpp::IsFormControlElement()
|
||||||
|
{
|
||||||
|
if (CEF_MEMBER_MISSING(struct_, is_form_control_element))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return struct_->is_form_control_element(struct_) ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CefString CefDOMNodeCToCpp::GetFormControlElementType()
|
||||||
|
{
|
||||||
|
CefString str;
|
||||||
|
if (CEF_MEMBER_MISSING(struct_, get_form_control_element_type))
|
||||||
|
return str;
|
||||||
|
|
||||||
|
cef_string_userfree_t strPtr =
|
||||||
|
struct_->get_form_control_element_type(struct_);
|
||||||
|
str.AttachToUserFree(strPtr);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
bool CefDOMNodeCToCpp::IsSame(CefRefPtr<CefDOMNode> that)
|
bool CefDOMNodeCToCpp::IsSame(CefRefPtr<CefDOMNode> that)
|
||||||
{
|
{
|
||||||
if (CEF_MEMBER_MISSING(struct_, is_same))
|
if (CEF_MEMBER_MISSING(struct_, is_same))
|
||||||
|
|
|
@ -34,6 +34,8 @@ public:
|
||||||
virtual Type GetType() OVERRIDE;
|
virtual Type GetType() OVERRIDE;
|
||||||
virtual bool IsText() OVERRIDE;
|
virtual bool IsText() OVERRIDE;
|
||||||
virtual bool IsElement() OVERRIDE;
|
virtual bool IsElement() OVERRIDE;
|
||||||
|
virtual bool IsFormControlElement() OVERRIDE;
|
||||||
|
virtual CefString GetFormControlElementType() OVERRIDE;
|
||||||
virtual bool IsSame(CefRefPtr<CefDOMNode> that) OVERRIDE;
|
virtual bool IsSame(CefRefPtr<CefDOMNode> that) OVERRIDE;
|
||||||
virtual CefString GetName() OVERRIDE;
|
virtual CefString GetName() OVERRIDE;
|
||||||
virtual CefString GetValue() OVERRIDE;
|
virtual CefString GetValue() OVERRIDE;
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "libcef_dll/cpptoc/browser_cpptoc.h"
|
#include "libcef_dll/cpptoc/browser_cpptoc.h"
|
||||||
|
#include "libcef_dll/cpptoc/domnode_cpptoc.h"
|
||||||
|
#include "libcef_dll/cpptoc/frame_cpptoc.h"
|
||||||
#include "libcef_dll/ctocpp/focus_handler_ctocpp.h"
|
#include "libcef_dll/ctocpp/focus_handler_ctocpp.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,6 +37,17 @@ bool CefFocusHandlerCToCpp::OnSetFocus(CefRefPtr<CefBrowser> browser,
|
||||||
source) ? true : false;
|
source) ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CefFocusHandlerCToCpp::OnFocusedNodeChanged(CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame, CefRefPtr<CefDOMNode> node)
|
||||||
|
{
|
||||||
|
if (CEF_MEMBER_MISSING(struct_, on_focused_node_changed))
|
||||||
|
return;
|
||||||
|
|
||||||
|
struct_->on_focused_node_changed(struct_,
|
||||||
|
CefBrowserCppToC::Wrap(browser), CefFrameCppToC::Wrap(frame),
|
||||||
|
CefDOMNodeCppToC::Wrap(node));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
template<> long CefCToCpp<CefFocusHandlerCToCpp, CefFocusHandler,
|
template<> long CefCToCpp<CefFocusHandlerCToCpp, CefFocusHandler,
|
||||||
|
|
|
@ -36,6 +36,8 @@ public:
|
||||||
virtual void OnTakeFocus(CefRefPtr<CefBrowser> browser, bool next) OVERRIDE;
|
virtual void OnTakeFocus(CefRefPtr<CefBrowser> browser, bool next) OVERRIDE;
|
||||||
virtual bool OnSetFocus(CefRefPtr<CefBrowser> browser,
|
virtual bool OnSetFocus(CefRefPtr<CefBrowser> browser,
|
||||||
FocusSource source) OVERRIDE;
|
FocusSource source) OVERRIDE;
|
||||||
|
virtual void OnFocusedNodeChanged(CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame, CefRefPtr<CefDOMNode> node) OVERRIDE;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BUILDING_CEF_SHARED
|
#endif // BUILDING_CEF_SHARED
|
||||||
|
|
|
@ -20,7 +20,8 @@ ClientHandler::ClientHandler()
|
||||||
m_BackHwnd(NULL),
|
m_BackHwnd(NULL),
|
||||||
m_ForwardHwnd(NULL),
|
m_ForwardHwnd(NULL),
|
||||||
m_StopHwnd(NULL),
|
m_StopHwnd(NULL),
|
||||||
m_ReloadHwnd(NULL)
|
m_ReloadHwnd(NULL),
|
||||||
|
m_bFormElementHasFocus(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,6 +202,37 @@ bool ClientHandler::OnConsoleMessage(CefRefPtr<CefBrowser> browser,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ClientHandler::OnFocusedNodeChanged(CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
CefRefPtr<CefDOMNode> node)
|
||||||
|
{
|
||||||
|
REQUIRE_UI_THREAD();
|
||||||
|
|
||||||
|
// Set to true if a form element has focus.
|
||||||
|
m_bFormElementHasFocus = (node.get() && node->IsFormControlElement());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ClientHandler::OnKeyEvent(CefRefPtr<CefBrowser> browser,
|
||||||
|
KeyEventType type,
|
||||||
|
int code,
|
||||||
|
int modifiers,
|
||||||
|
bool isSystemKey)
|
||||||
|
{
|
||||||
|
REQUIRE_UI_THREAD();
|
||||||
|
|
||||||
|
if (!m_bFormElementHasFocus && code == 0x20) {
|
||||||
|
// Special handling for the space character if a form element does not have
|
||||||
|
// focus.
|
||||||
|
if (type == KEYEVENT_RAWKEYDOWN) {
|
||||||
|
browser->GetMainFrame()->ExecuteJavaScript(
|
||||||
|
"alert('You pressed the space bar!');", "", 0);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool ClientHandler::GetPrintHeaderFooter(CefRefPtr<CefBrowser> browser,
|
bool ClientHandler::GetPrintHeaderFooter(CefRefPtr<CefBrowser> browser,
|
||||||
CefRefPtr<CefFrame> frame,
|
CefRefPtr<CefFrame> frame,
|
||||||
const CefPrintInfo& printInfo,
|
const CefPrintInfo& printInfo,
|
||||||
|
|
|
@ -21,6 +21,8 @@ class ClientHandler : public CefClient,
|
||||||
public CefLoadHandler,
|
public CefLoadHandler,
|
||||||
public CefRequestHandler,
|
public CefRequestHandler,
|
||||||
public CefDisplayHandler,
|
public CefDisplayHandler,
|
||||||
|
public CefFocusHandler,
|
||||||
|
public CefKeyboardHandler,
|
||||||
public CefPrintHandler,
|
public CefPrintHandler,
|
||||||
public CefJSBindingHandler,
|
public CefJSBindingHandler,
|
||||||
public CefDragHandler,
|
public CefDragHandler,
|
||||||
|
@ -39,6 +41,10 @@ public:
|
||||||
{ return this; }
|
{ return this; }
|
||||||
virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler() OVERRIDE
|
virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler() OVERRIDE
|
||||||
{ return this; }
|
{ return this; }
|
||||||
|
virtual CefRefPtr<CefFocusHandler> GetFocusHandler() OVERRIDE
|
||||||
|
{ return this; }
|
||||||
|
virtual CefRefPtr<CefKeyboardHandler> GetKeyboardHandler() OVERRIDE
|
||||||
|
{ return this; }
|
||||||
virtual CefRefPtr<CefPrintHandler> GetPrintHandler() OVERRIDE
|
virtual CefRefPtr<CefPrintHandler> GetPrintHandler() OVERRIDE
|
||||||
{ return this; }
|
{ return this; }
|
||||||
virtual CefRefPtr<CefJSBindingHandler> GetJSBindingHandler() OVERRIDE
|
virtual CefRefPtr<CefJSBindingHandler> GetJSBindingHandler() OVERRIDE
|
||||||
|
@ -97,6 +103,18 @@ public:
|
||||||
const CefString& source,
|
const CefString& source,
|
||||||
int line) OVERRIDE;
|
int line) OVERRIDE;
|
||||||
|
|
||||||
|
// CefFocusHandler methods.
|
||||||
|
virtual void OnFocusedNodeChanged(CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
CefRefPtr<CefDOMNode> node) OVERRIDE;
|
||||||
|
|
||||||
|
// CefKeyboardHandler methods.
|
||||||
|
virtual bool OnKeyEvent(CefRefPtr<CefBrowser> browser,
|
||||||
|
KeyEventType type,
|
||||||
|
int code,
|
||||||
|
int modifiers,
|
||||||
|
bool isSystemKey) OVERRIDE;
|
||||||
|
|
||||||
// CefPrintHandler methods.
|
// CefPrintHandler methods.
|
||||||
virtual bool GetPrintHeaderFooter(CefRefPtr<CefBrowser> browser,
|
virtual bool GetPrintHeaderFooter(CefRefPtr<CefBrowser> browser,
|
||||||
CefRefPtr<CefFrame> frame,
|
CefRefPtr<CefFrame> frame,
|
||||||
|
@ -192,6 +210,9 @@ protected:
|
||||||
typedef std::map<std::string, CefRefPtr<CefDOMVisitor> > DOMVisitorMap;
|
typedef std::map<std::string, CefRefPtr<CefDOMVisitor> > DOMVisitorMap;
|
||||||
DOMVisitorMap m_DOMVisitors;
|
DOMVisitorMap m_DOMVisitors;
|
||||||
|
|
||||||
|
// True if a form element currently has focus
|
||||||
|
bool m_bFormElementHasFocus;
|
||||||
|
|
||||||
// Include the default reference counting implementation.
|
// Include the default reference counting implementation.
|
||||||
IMPLEMENT_REFCOUNTING(ClientHandler);
|
IMPLEMENT_REFCOUNTING(ClientHandler);
|
||||||
// Include the default locking implementation.
|
// Include the default locking implementation.
|
||||||
|
|
Loading…
Reference in New Issue