No kMouseLeave events?


Putting custom objects in a TRootEmbeddedCanvas, I do not seem to be able to get kMouseLeave events, while I do get kMouseEnter ones. Is there something special to implement in my objects (besides what I currently have, i.e. DistanceToPrimitive and ExecuteEvent) to solve this ?


root 5.16/00 on macos intel


The following information might help. Please see the tutorials example $ROOTSYS/tutorials/exec3.C. In a similar way you can do:TCanvas *myc = fEcan->GetCanvas(); myc->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)","MyMainFrame",this, "EventInfo(Int_t,Int_t,Int_t,TObject*)"); where fEcan is TRootEmbeddedCanvas pointer; ProcessedEvent is a signal method of TCanvas, MyMainFrame is the name of a user class, containing the slot method EventInfo. If EventInfo contain the following lines[code]void MyMainFrame::EventInfo(Int_t event, Int_t px, Int_t py, TObject *selected)

if (event == kMouseLeave)
printf(“kMouseLeave happens\n”);

[/code]you should see the printout message anytime the mouse cursor leaves the TCanvas area.

Cheers, Ilka

I forgot about another tutorials we have: $ROOTSYS/tutorials/gui/statusBar.C

Cheers, Ilka

Yes, this indeed works. But I find strange that the object itself is not informed that it looses focus, i.e. the object itself does not get the kMouseLeave event, while it gets the kMouseEnter.
Is there a special reason for this “asymmetry” ?



In addition, you may use in your code something as:if (gPad->GetEvent() == kMouseLeave) // do what is needed Cheers, Ilka

you mean that in MyClass::ExecuteEvent I should add :

if ( gPad->GetEvent() == kMouseLeave ) { ... }

after the normal sequence of

switch (event) { case kButton1Down: .... break; }



No 100% sure without an example from your side; just an idea. May be you can include the case kMouseLeave in your switch(event) statement. I hope some of our ExecuteEvent experts will anser further your questions.

Cheers, Ilka