Hi,
Again me with another question about Reaction/Intuition.
Sorry for all these newby questions... It's my first Reaction project...
In my program i have to catch MouseX/MouseY where the user hit the RMB.
I do that without problem in WMHI_MOUSEBUTTONS / MENUDOWN. I can even use a popupmenu.
I only have to add WINDOW_GadgetHelp,TRUE and WA_RMBTrap, TRUE to my window.
It works, it's perfect !
Now, I try to replace my PopupMenu by a NewMenu to be able to add menu entry to the Workbench TitleBar BUT I have to remove WA_RMBTrap otherwise the NewMenu doesn't work at all.
By removing WA_RMBTrap and by using NewMenu, WMHI_MOUSEBUTTON doesn't work anymore. And unfortunately WMHI_MENUPICK seems to retrieve only the mouse coordinates AFTER RMB release.
Is somebody know how to :
1) to detect MouseX/MouseY when RMB is pressed when using NewMenu ?
OR
2) a way to add menus entries to the WB TitleBar when using PopupMenu ?
Here is the SDK sample where I tried to show the problem.
By uncommenting
WINDOW_GadgetHelp,TRUE, WA_RMBTrap, TRUE,
and by commenting
//WA_NewLookMenus, TRUE, //WINDOW_NewMenu, mynewmenu,
the RMB coordinates will be retrieved as soon as RMB is pressed (print of "MENUDOWN MouseX") but NewMenu will not work
By commenting
// WINDOW_GadgetHelp,TRUE, // zzd10h // WA_RMBTrap, TRUE, // zzd10h
and by uncommenting
WA_NewLookMenus, TRUE, WINDOW_NewMenu, mynewmenu,
the RMB coordinates will be retrieved only after RMB is released (print of "MENUPICK MouseX") but NewMenu will work
http://zzd10h.amiga-ng.org/Divers/Menu_Intuition.lha
Thank you by advance for your help
Guillaume
You can have only one. With RMBTRAP set you disable the menu strip but receive MOUSEBUTTON events for the right mouse button. With RMBTRAP clear you enable the menu strip but will never hear about right mouse clicks.
Now I have difficulties to understand your problem. You say you want mouse coordinates in conjunction with a menu strip. Why? If the menu strip opens, you never receive control, so why do you need mouse coordinates?
One behaviour one could think of is that the menu strip opens only if the user moves the mouse to the top of the screen or at least outside of your window. And when the user instead right-clicks into your window, something else happens, but not the menu strip.
In order to achieve this, you can dynamically change the RMBTRAP flag dependent on the mouse position. You have to activate WFLG_REPORTMOUSE and IDCMP_MOUSEMOVE. For ReAction you probably also have to code a IDCMP hook because IIRC IDCMP_MOUSEMOVE is filtered by window.class and not reported as WMHI event.
Another way to get control before the menu strip opens is IDCMP_MENUVERIFY. But this does not hinder the menu to open when you are done with the message.
Thank you Thomas for your reply.
"so why do you need mouse coordinates?"
Related to this topic that I opened too ;
http://www.os4coding.net/forum/solved-how-retrieve-gadget-id-wmhimousebuttons-or-windowappmsghook-hook
I need to know X/Y at RMB time to determine on which gadget/button I clicked with RMB button.
For example, I have a toolbar with 10 buttons of 5 pixels width each. My window is therefore 50 pixels width.
I can RMB on one of this button, save the X/Y, open a popupmenu and select "remove button".
Thanks to RMBTrap, I can scan my window to find which button is at X.
It works well but not when I try to use NewMenu (and therefore when I disable RMBTrap)
I think that I found a bypass.
I simply save the gadgetID, when my cursor is over my window.
Therefore even without RMBTrap, I always have the latest gadgetid just before RMB is pressed.
Look up MENUVERIFY
I think this gives you option to cancel a system menu and open your popup instead depening on position.
{edit] I'm thining of the wrong thing, it doesn't do that.
Another option is to disable menus when the mouse is over certain section of your window and open popups there as required instead.
Yet another option might be to apply a qualifier for popups or use the Middlemose button.
I see Thomas beta me on most of those suggestions, should have read his post before jumping in!
Move the mouse quickly and you could be in trouble here.
I will try tomorrow nevertheless in my program, if I click RMB :
-I'm in my window (i inhibit menu opening outside of the window)
-I'm really on a gadget, I don't have gap between the objects.
It should work (in theory ;) )