Closed Bug 17159 Opened 23 years ago Closed 23 years ago

right click doesn't work within context menus

Categories

(Core :: XUL, defect, P3)

x86
Linux
defect

Tracking

()

VERIFIED FIXED

People

(Reporter: dbaron, Assigned: mikepinkerton)

References

Details

(Whiteboard: [PDT+]w/b minus on 03/03 - Fix in hand)

Attachments

(5 files)

DESCRIPTION:  One should be able to use a right-click to select an item within a
context menu.  Right now I have to right-click to get the context menu and
left-click to select an item within it.  (Is this a regression?)

STEPS TO REPRODUCE:
 * launch apprunner
 * right click on the document
 * right click on something in the context menu

ACTUAL RESULTS:
 * nothing happens

EXPECTED RESULTS:
 * the item should be activated, just like it is for a left-click

DOES NOT WORK CORRECTLY ON:
 * Linux, apprunner, 1999-10-24-08-M11
Assignee: trudelle → saari
Target Milestone: M13
reproduced in today's opt bits, reassigning to saari as p3 for m13
mass-moving all m13 bugs to m14
QA Contact: claudius → elig
[Contextual menu bug --- QA Assigning to self.]
Component: XP Toolkit/Widgets → XPMenus
QA Contact: elig → sairuh
reassigned QA contact to me & updated component.
Status: NEW → ASSIGNED
Target Milestone: M14 → M15
*** Bug 21646 has been marked as a duplicate of this bug. ***
Assignee: saari → pinkerton
Status: ASSIGNED → NEW
Taking menu/popup bugs.
BULK MOVE: Changing component from XP Menus to XP Toolkit/Widgets: Menus.  XP 
Menus component will be deleted.
Component: XPMenus → XP Toolkit/Widgets: Menus
Blocks: 21549
With NN 4.7, at least on NT, the right mouse button can be used to activate
a context menu item in one of two ways:
1. Right-click to bring up the menu, right-click again to chose the item.
2. Press the right mouse button to bring up the menu, hold it down, move the 
   cursor to the desired item, let up the button to chose the item.

(1) makes this bug [4.xP]; (2) makes bug 21549, dependent on this bug, [4.xP].

Tested with: Netscape Navigator 4.7 on Windows NT.
Summary: right click doesn't work within context menus → [4.xP] right click doesn't work within context menus
No longer blocks: 21549
bulk accepting xpmenu/popup bugs. sigh.
Status: NEW → ASSIGNED
Is this related to bug 16766?
no, they're separate issues.
Setting the keyword all open [4.xp] bugs to 4xp.
Keywords: 4xp
*** Bug 25398 has been marked as a duplicate of this bug. ***
*** Bug 25398 has been marked as a duplicate of this bug. ***
Does the attachment also address bug <A 
HREF="http://bugzilla.mozilla.org/show_bug.cgi?id=16766">#16766</A>?  I can't 
seem to get things to compile properly (I finally took the leap and am 
attempting to get this working), or I'd check it myself.
OK, I got things up and compiling and it looks like the patch is close, but it
may have gone too far.  Now a right-click works on both context menus and
menu-bar menus (might want to save this for future features, eg. right-click on
bookmarks menu).  What's missing in the patch is a check to see if the current
menu is a context menu.  Not quite sure how to do this yet...

And no, it doesn't address Bug 16766, either.

ps. Sorry about the botched url in my last comment.  Some day I'll learn how to
enter these comments properly.
It looks to me like the reason that smorrison's patch works a little too well is 
because the isMenuBar flag will be true for any right-clicks on the menu unless 
the right click takes place on the actual menu bar.

I guess the question is, what's the proper way to tell if the current menu is a 
popup/context menu or not?  I was looking for / dreaming of an IsContextMenu() 
function, but wasn't really surprised when I couldn't find one.
hyatt knows, he will comment. we talked about this at denny's tonight.
This patch isn't quite right, as Dean points out, but hopefully I can give you 
enough guidelines to stab it out fully.

(1) Context menus are only created through createPopup over in 
layout/xul/base/src/nsPopupSetFrame.cpp.  The popup type ("context") is passed 
in. 

(2) When you create the popup (over in the createPopup method) set some flag on 
it that indicates that it is a context menu.  Do this if the popup type is 
("context").  You'll need to add a new method to nsMenuPopupFrame (or perhaps 
the nsIMenuParent interface; nsMenuBarFrame can simply ignore you).

(3) When submenu popups are created, they'll need to inherit the fact that 
they're context menus.

(4) Only process the right mouse down if the menu parent is a context menu.

I'd love to see a complete patch for this in M14.  Send me the patch in email 
when it's ready, and i'll be happy to review it and get it into the tree 
quickly.

Thanks for working on this!
Meant to say "right mouse up", not "right mouse down".
Well, hey, I'm a sucker for punishment.  This is along the lines of what I was 
considering doing before I realized that I have to get some sleep between now 
and four hours from now when work starts.  If nobody minds waiting a few 
days for this, I'll try and take a shot at this by the end of the weekend.
I was trucking merrily away on this (bah! who needs sleep?) and got down to 
compile time when I ran into problems.  Steps 1, 3, and 4 should be no 
problem.  But maybe it's the lack of sleep, or the fact that this is my first 
couple hours of looking at the menu code, because I'm missing the link between 
nsPopupSetFrame and nsMenuPopupFrame (and thus nsIMenuParent).  To me, it looks 
like there isn't a direct one.  Which is going to make step 2 a little tricky.  
Is my mind just too fragged right now to be thinking about this?
In case anyone was wondering it was the lack of sleep, although I haven't slept 
much since then.  I've got this working right now, and am trying to get a patch 
together that I can mail to Hyatt.  But I'm still really green with cvs so this 
may take a little while.
(Hmmm... this comment got lost along the way.)

I just realized that I didn't confirm that this works for sub-menus in context 
menus.  Any attempts that I made to hack the xul to create this, however, failed 
pitifully.  Can anyone whip up a test-case navigator.xul that implements a 
cascading context menu?
Great!  This is nearly ready to go.  Here are the things that still need to be 
fixed.

(1) nsIMenuParent is an XPCOM interface, and that means that we don't want it to 
contain anything other than pure virtual functions.  That means no member 
variables.  You need to make Get/SetAllowRightClick pure virtual functions on 
nsIMenuParent, and then you need to implement those functions in nsMenuBarFrame 
and nsMenuPopupFrame.  In nsMenuBarFrame, they'd simply do nothing.  In 
nsMenuPopupFrame, add the member variable and define the functions just as you 
did in nsIMenuParent.

(2) I'd rather you used Set/GetIsContextMenu rather than "AllowRightClick".  I 
suspect we'll be using this in more than one place, and so I don't think the 
methods should be so specifically named.

Remove the "fix for bug #17159" comments.  This is just basic functionality, and 
we don't need to include that.

Thanks for doing this!  This is really great.  If you have any other menu bugs 
you'd like to tackle, I would be happy to give you more roadmaps for those bugs 
(I know how to fix them all, so I can continue to give instructions).
  
Also, make sure to initialize the member variable to PR_FALSE in the 
nsMenuPopupFrame constructor.
These two shouldn't be a problem.  Just to confirm, though, will I have to make 
changes to nsMenuBarFrame or can I just leave it without any knowledge of the 
new functions?

Also, I started with "IsContextMenu" but moved to "AllowRightClick" because I 
was thinking that in the future we will probably allow such actions as 
right-clicking on bookmarks in the menu to get a context menu.  In this case the 
bookmarks menu wouldn't be a context menu, but it would allow/accept the right 
click.
If it inherits from nsIMenuParent, you will have to change nsMenuBarFrame when 
adding the two pure virtual methods. that's just c++.

Regarding your 2nd point, stick with IsContextMenu() for now and if we ever need 
that, we can always add another method that just returns the same value, but with 
the appropriate name.

Thanks so much for your help on this.
awesome, i'll try to get this in today or this weekend.
"awesome, i'll try to get this in today or this weekend."

Ummm.... it's not done yet.  I haven't implemented Hyatt's suggestions yet.
oops, i commented on the wrong bug ;)
OK, I've attached a patch with Hyatt's suggestions implemented.  I clobbered the 
layout and rebuilt it and everything worked properly.  The only thing I'm not 
sure of is how I implemented the GetIsContextMenu() and SetIsContextMenu() 
functions in nsMenuBarFrame.h.
Crap, I lied.  The build didn't go.  I'll have a new patch soon.  Anyone want to 
give a newbie C++ guy a hint as to how to resolve the error:

raptorxulbase_s.lib(nsMenuPopupFrame.obj) : error LNK2001: unresolved external s
ymbol "public: virtual unsigned int __stdcall nsMenuPopupFrame::GetIsContextMenu
(int &)" (?GetIsContextMenu@nsMenuPopupFrame@@UAGIAAH@Z)
Summary: [4.xP] right click doesn't work within context menus → right click doesn't work within context menus
Odd.  I was doing my work using the M13 tarball and it worked fine.  Now when I 
pull a fresh tree and apply my patch it fails.  No idea why yet, but I'm 
looking...
Aw crap, helps if I do a clobber_layout first when I'm modifying interfaces et 
al.  I've got a couple more comments from Dave and then I'll post hopefully the 
last patch.
Keywords: patch
dean, i want to get this in, but we're getting lots of shit from management about 
doing things not marked PDT+ for M14, and this bug ain't. Don't fret, we love 
this patch and we want to get it in, just be patient with us.
I was beginning to think that you had forgotten me ( * sniff * ).Just jokin'.  
No big rush for me, because I already have the patch installed, but I know of 
mroe than a few people that would be really happy to get this fix.
Nominating for beta1. Fix in hand from external developer. Very well understood, 
very localized. Tested on mac, win32, linux (builds and works). Patch has 
undergone several iterations with me and hyatt and the external contributor.

Not being able to use the right mouse button to select an item in a context menu 
is a big usability black eye. It's just one of those things that will make people 
swear at us and wonder what we've been wasting all of aol's money on all this 
time.
Keywords: beta1
Whiteboard: Fix in hand
Putting on PDT+ radar for beta1.  But will move to PDT- if not fixed by 03/03 or 
regression occurs.
Whiteboard: Fix in hand → [PDT+]w/b minus on 03/03 - Fix in hand
whoo hoo! fixed!
Status: ASSIGNED → RESOLVED
Closed: 23 years ago
Resolution: --- → FIXED
Sorry to be repetitive here, but woo-hoo!
[Win32] Now that I look at this again (it's been a while), I notice that when I 
right-click a menu item, the browser window becomes inactive for a split second.  
This doesn't happen when I left-click an item.  Minor, I know, but still Ugh.  
Should this be a new bug?
After some further investigation, what I just mentioned is unrelated to this, so
I opened a separate bug (bug 29851).
verif w/this morning's opt bits [2000.03.01] on linux [comm], winNT [comm] and
mac [mozilla].
Status: RESOLVED → VERIFIED
Component: XP Toolkit/Widgets: Menus → XUL
QA Contact: bugzilla → xptoolkit.widgets
right click sometimes not working.. (opens right click menu once every 4~5 clicks) 
mac 10.11.6 
firefox 59.0.1 (64-bit)
You need to log in before you can comment on or make changes to this bug.