Hi,
can I scroll document by sending page down DOM key events from my component?
I tried this so far with no result:
#if 0
nsCOMPtr<nsIWebNavigation> webNav( do_QueryInterface( sWebBrowser ) );
nsCOMPtr<nsIDOMDocument> domDocument;
webNav->GetDocument(getter_AddRefs(domDocument));
nsCOMPtr<nsIDOMEventReceiver> receiver ( do_QueryInterface(
domDocument ) );
nsCOMPtr<nsIDOMEventTarget> target( do_QueryInterface( domDocument ) );
nsCOMPtr<nsIDOMDocumentView> docView(do_QueryInterface( domDocument ) );
// NS_ENSURE_TRUE(docView, NS_ERROR_FAILURE);
nsCOMPtr<nsIDOMAbstractView> defaultView;
docView->GetDefaultView(getter_AddRefs(defaultView));
#else
nsCOMPtr<nsIWindowWatcher>
wwatch(do_GetService(NS_WINDOWWATCHER_CONTRACTID));
nsIDOMDocument* domDocument = NULL;
nsCOMPtr<nsIDOMAbstractView> defaultView;
nsIDOMWindow *wind = NULL;
wwatch->GetActiveWindow(&wind);
wind->GetDocument(&domDocument);
#if 0
PRUint32 nNumberOfWindows = 0;
nsIDOMWindowCollection *windCollection = NULL;
wind->GetFrames(&windCollection);
windCollection->GetLength(&nNumberOfWindows);
for (int nCnt=0;nCnt<nNumberOfWindows;nCnt++)
{
nsIDOMWindow *wind2 = NULL;
windCollection->Item(nCnt, &wind2);
wind2->GetDocument(&domDocument);
if( domDocument ) break;
}
#endif
nsCOMPtr<nsIDOMEventReceiver> receiver ( do_QueryInterface(
domDocument ) );
nsCOMPtr<nsIDOMEventTarget> target( do_QueryInterface( domDocument ) );
nsCOMPtr<nsIDOMDocumentView> docView(do_QueryInterface( domDocument ) );
#endif
nsKeyEvent aKeyEvent(NS_KEY_PRESS, 0);
aKeyEvent.eventStructType = NS_KEY_EVENT;
aKeyEvent.widget = nsnull;
aKeyEvent.flags = NS_EVENT_FLAG_INIT | NS_EVENT_FLAG_NO_DEFAULT;
aKeyEvent.keyCode = NS_VK_PAGE_DOWN;
aKeyEvent.charCode = 0;
aKeyEvent.isShift = PR_FALSE;
aKeyEvent.isControl = PR_FALSE;
aKeyEvent.isAlt = PR_FALSE;
aKeyEvent.isMeta = PR_FALSE;
aKeyEvent.time = PR_IntervalNow();
nsKeyEvent aKeyDownEvent(NS_KEY_DOWN, 0);
aKeyDownEvent.eventStructType = NS_KEY_EVENT;
aKeyDownEvent.widget = nsnull;
aKeyDownEvent.flags = NS_EVENT_FLAG_INIT;
aKeyDownEvent.keyCode = NS_VK_PAGE_DOWN;
aKeyDownEvent.charCode = 0;
aKeyDownEvent.isShift = PR_FALSE;
aKeyDownEvent.isControl = PR_FALSE;
aKeyDownEvent.isAlt = PR_FALSE;
aKeyDownEvent.isMeta = PR_FALSE;
aKeyDownEvent.time = PR_IntervalNow();
nsIDOMEvent* domEvent = nsnull;
nsIDOMEvent** aDOMEvent = &domEvent;
nsAutoString keyEventString;
keyEventString.AssignWithConversion("KeyEvent");
// listenermanager is an nsIEventListenerManager I got via
nsCOMPtr<nsIEventListenerManager> listenerManager;
receiver->GetListenerManager(getter_AddRefs(listenerManager));
nsCOMPtr<nsIDocument> doc( do_QueryInterface( domDocument ) );
nsIPresShell* presShell = doc->GetShellAt(0);
if (!presShell) return;
nsCOMPtr<nsPresContext> presContext = presShell->GetPresContext();
listenerManager->CreateEvent( presContext, &aKeyEvent, keyEventString,
aDOMEvent );
nsCOMPtr<nsIDOMKeyEvent> domKeyEvent ( do_QueryInterface(domEvent) );
listenerManager->CreateEvent( presContext, &aKeyDownEvent,
keyEventString, aDOMEvent );
nsCOMPtr<nsIDOMKeyEvent> domKeyDownEvent ( do_QueryInterface(domEvent) );
nsAutoString s;
s.AssignWithConversion("keydown");
domKeyDownEvent->InitKeyEvent(s,1,1,defaultView, 0,0,0,0,NS_VK_PAGE_DOWN,
0 );
receiver->HandleEvent(domKeyDownEvent);
s.AssignWithConversion("keypress");
// domKeyEvent->InitKeyEvent(s,1,1,nsnull, 0,0,0,0,NS_VK_PAGE_DOWN, 0 );
domKeyEvent->InitKeyEvent(s,1,1,defaultView, 0,0,0,0,NS_VK_PAGE_DOWN,
0 );
receiver->HandleEvent(domKeyEvent);
Regards, Sergey
_______________________________________________
Mozilla-xpcom mailing list
[email protected]
http://mail.mozilla.org/listinfo/mozilla-xpcom