Menu DropdownI put a breakpoint at libo/vcl/source/window/winproc.cxx:2405, at the case SAL_EVENTMOUSEDOWN, to seewhat happens when I click a mouse.I clicked on File Menu, it hit the breakpoint. Then off it goes to calls ImplHandleSalMouseButtonDown ()with the following details stored in pEvent and pWindow.pEventmnTime = 78764380 //TimemnX = 18 //x co-ordinatemnY = 9 //y co-ordinatemnButton = 1 //left button, 4 for right click, 2 for clicking with the scrollermnCode = 0 //to find whether click is part of some select etc.pWindow - the window object.The ImplHandleSalMouseButtonDown () function is in ./libo/vcl/source/window/winproc.cxx:2068, it checkswhether shift, ctrl or alt keys were pressed in 2076, and then calls ImplGetMouseButtonMode () with pEvent(function is at ./libo/vcl/source/window/winproc.cxx:2030) to get further details of whether it is a simpleclick event or whether it is part of select, multi (ctrl+click?) or range select, using pEvent's mnCodevariable.The ImplGetMouseButtonMode () function returns nMode as 3. The first two if statements were true, ie.MOUSE_SIMPLECLICK and MOUSE_SELECT. Once, this returns, ImplHandleSalMouseButtonDown () calls the functionImplHandleMouseEvent (), with- the window object - pWindow- nSVEvent = 1 (EVENT_MOUSEBUTTONDOWN)- bMouseLeave = False- x,y co-ordinates- time of the event nMsgTime- nCode = 1, to indicate status of shift,ctrl keys- and mode of click , nMode = 3The function then does the following,- gets the details of the frame- checks the previous location of the mouse.- updates the frame data with the latest details- checks whether the mouse has left or entered (?).- finds the window- after finding the window- it checks whether the window was disabled- it comes to line 666 (after several if conditions turned out to be false), for the mouse click event- here it checks for double click.- it then updates the details in the child window object- It creates the MouseEvent object at line 709- It notifies the child window of the event. Off to the next function.- In the next call, first the constructor of ImplDelData is called (maybe due to someinheritance) ImplDelData::ImplDelData () at /home/jesso/Downloads/libreoffice/libo/vcl/inc/svdata.hxx:424, this is there to protect against the window from getting destroyed.- The NotifyEvent object is created.- It then checks whether it should bring the window into focus, if it previously didn't have focus,close context menus etc.- ImplCallPreNotify function- calls long Application::CallEventHooks () at ./libo/vcl/source/app/svapp.cxx:1657- that function returns 0- so it gets the PreNotify () method on the window object in the event object.- Finally it calls the MouseButtonDown() method on the pChild pointer, which happens to beMenuBarWindow::MouseButtonDown () at ./libo/vcl/source/window/menu.cxx:5366The MenuBarWindow::MouseButtonDown () then does the following,- It first finds the entry on which the action happened.- It then calls ChangeHighlightItem (which needs to be refactored, btw)- This decides whether to update the focus etc- It then finally creates the pop up in line 5477
Tuesday, July 17, 2012
So you clicked on the menu, huh?
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment