Hello ,
I am looking for the good way to resolve " the KeyEvents are consumed by the embeded WebBrowser " on windows mozilla. To catch the keyEvent, I implemented nsIDOMKeyListener ,but it couldn't work.Then I registered nsIDOMKeyListener,using AddEventListenerByIID, while it still couldn't work. Following 3 steps are the details. Could anyone can give some ideas.

1).
NS_INTERFACE_MAP_BEGIN(CBrowserImpl)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMKeyListener)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsIDOMEventListener, nsIDOMKeyListener)
NS_INTERFACE_MAP_ENTRY(nsIDOMKeyListener)
NS_INTERFACE_MAP_END

2).
NS_IMETHODIMP CBrowserImpl::KeyDown(nsIDOMEvent* aDOMEvent)
{
if (aDOMEvent == NULL)
{
return FALSE;
}
nsCOMPtr <nsIDOMKeyEvent> keyEvent;
keyEvent = do_QueryInterface(aDOMEvent);
PRUint32 keyCode = 0;
PRBool shiftKey = false;
PRBool altKey = false;
PRBool ctrlKey = false;
keyEvent->GetKeyCode(&keyCode);
keyEvent->GetShiftKey(&shiftKey);
keyEvent->GetAltKey(&altKey);
keyEvent->GetCtrlKey(&ctrlKey);
char buf[1024]={'\0'};
PRInt32 id = m_pBrowserFrame->GetBrowserId();
sprintf(buf, "CtrlKeyDown=%ld AltKeyDown=%ld ShiftDown=%ld KeyCode=%ld", ctrlKey, altKey, shiftKey, keyCode);
SendSocketMessage(id, CEVENT_KEY_DOWN, buf);
return NS_OK;
}


3).
NS_IMETHODIMP CBrowserImpl::OnProgressChange(nsIWebProgress *progress,
nsIRequest *request,
PRInt32 curSelfProgress,
PRInt32 maxSelfProgress,
PRInt32 curTotalProgress,
PRInt32 maxTotalProgress)
{
// Register key listener
nsresult rv; nsCOMPtr<nsIContent> content;
content= do_CreateInstance(kTextNodeCID, &rv);
nsCOMPtr<nsIDOMEventReceiver> receiver(do_QueryInterface(content, &rv));
if (receiver) {
nsIDOMKeyListener *pListener = NS_STATIC_CAST(nsIDOMKeyListener *, this);
rv=receiver->AddEventListenerByIID(pListener, NS_GET_IID(nsIDOMKeyListener));//PR_FALSE PR_TRUE
}
return NS_OK;
}


Thanks a lot in advance.
_______________________________________________
dev-embedding mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-embedding

Reply via email to