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

Reply via email to