[Laszlo-dev] For Review: Change 20090519-bargull-2Mz Summary: DHTML: contextmenu part two

Max Carlson max at openlaszlo.org
Thu May 21 19:06:21 PDT 2009


André Bargull wrote:
> Ok, let's see what we've got:
> 
> (1) You've added this line to "__mouseEvent()":
>  > > if (e.button == 2 && eventname != 'oncontextmenu') return;
> So the event processing is stopped for any event with "button==2" 
> (unless the eventname is "oncontextmenu" -> btw, when does this happen? 
> There is no listener attached to the click divs for "oncontextmenu"..).

It shouldn't ever happen, because as you point out the oncontextmenu is
only sent from the document.

> (2) And earlier, the bubbling is already stopped when calling 
> "__keybardEvent()", because "event.keyCode" is >=0 (at least for Safari,
> Opera, IE).
> 
> (3) And just for "onmouseup" the event bubbling is reenabled.
> 
> 
> My questions:
> I suppose you're testing with Safari, right? May you test if "keyCode" 
> is >=0 for every mouse-event? Because in that case the event bubbling is 
> stopped by (2). And "onmouseup" events with right button won't be 
> reenabled (3) because of (1).

Actually, I was testing under Firefox OS X.  Safari OS X has different 
issues with this patch - the context menu sends onmouseup events but no 
onmousedown - leading to issues with dragging.

We really need to get you a hackintosh or something so you can test on OS X!

> On 5/20/2009 12:33 AM, Max Carlson wrote:
>> Nope, that doesn't do it.  I think it has to do with the fact that 
>> onmouseup events no longer bubble...
>>
>> André Bargull wrote:
>>> Hm, it works for me perfectly on Windows (IE, Firefox, Safari).
>>> Do you get different results if you replace in "__clickDispatcher()":
>>>> e.preventDefault();
>>>> e.stopPropagation();
>>>
>>> with:
>>>> e.returnValue = false;
>>>> e.cancelBubble = true;
>>> ?
>>>
>>>
>>>
>>>
>>> On 5/19/2009 11:26 PM, Max Carlson wrote:
>>>> Not approved.  In OS X, test/contextmenu/lpp-6980.lzx no longer 
>>>> shows context menus for the red or blue boxes.  If I change 
>>>> LzMouseKernel.js as follows, everything works again:
>>>>
>>>> 46c46
>>>> <         } else if (eventname == 'oncontextmenu' || (e.button == 2 
>>>> && eventname == 'onmouseup') ) {
>>>> ---
>>>>  >         } else if (eventname == 'oncontextmenu' || (e.button == 2 
>>>> && eventname == 'onclick') ) {
>>>>
>>>> André Bargull wrote:
>>>>> Change 20090519-bargull-2Mz by bargull at dell--p4--2-53 on 2009-05-19 
>>>>> 19:41:02
>>>>> in /home/Admin/src/svn/openlaszlo/trunk
>>>>> for http://svn.openlaszlo.org/openlaszlo/trunk
>>>>>
>>>>> Summary: DHTML: contextmenu part two
>>>>>
>>>>> New Features:
>>>>>
>>>>> Bugs Fixed: LPP-8189 (Right click fires an erroneous mousedown and 
>>>>> mouseup in DHTML) (partial)
>>>>>
>>>>> Technical Reviewer: max
>>>>> QA Reviewer: (pending)
>>>>> Doc Reviewer: (pending)
>>>>>
>>>>> Documentation:
>>>>>
>>>>> Release Notes:
>>>>>
>>>>> Details:
>>>>> LzSprite:
>>>>> - canceling event-bubbling for all mouse-events => this was already 
>>>>> done for all browsers (except Firefox) and all events (except 
>>>>> onmouseup). Why wasn't Firefox affected? => All other browsers set 
>>>>> "event.keyCode" to '0' for mouse-events, only Firefox sets 
>>>>> "keyCode" to 'undefined'. Now take a look at 
>>>>> "LzKeyboardKernel.__keyboardEvent()", every event was canceled in 
>>>>> that function if "keyCode" was '>= 0'!
>>>>>
>>>>> LzKeyboardKernel:
>>>>> - move handling for control keys (ctrl, shift, alt) into separate 
>>>>> function. It should be obvious why having a single function for 
>>>>> both, mouse-events and keyboard-events, is a bad idea (see keyCode 
>>>>> issue from above).
>>>>>
>>>>>
>>>>> Tests:
>>>>>
>>>>> Files:
>>>>> M WEB-INF/lps/lfc/kernel/dhtml/LzKeyboardKernel.js
>>>>> M WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js
>>>>> M WEB-INF/lps/lfc/kernel/dhtml/LzMouseKernel.js
>>>>>
>>>>> Changeset: 
>>>>> http://svn.openlaszlo.org/openlaszlo/patches/20090519-bargull-2Mz.tar
>>>>>
>>>>
>>

-- 
Regards,
Max Carlson
OpenLaszlo.org





More information about the Laszlo-dev mailing list