[Bug][vw7.5] PulldownMenu

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[Bug][vw7.5] PulldownMenu

Reinout Heeck-2

vw75 on WinXP SP2

My colleagues report a problem in pull down menus that happens roughly
half of the times they select an item.

Find attached a tiny application that demos this bug. We verified on 7.4
and 7.4.1, the problem does not occur there.

We suspect that this report by Andreas Wacknitz may cover the same bug:
http://groups.google.com/group/comp.lang.smalltalk/browse_thread/thread/7566318094f7c4ce/07c0e9173d7d33ae?#07c0e9173d7d33ae



Cheers,

Reinout
-------


Unhandled exception: Message not understood: #value
ByteString(Object)>>doesNotUnderstand:
[] in Win95MenuButtonController(MenuButtonController)>>pullDownAction
BlockClosure>>ensure:
Win95MenuButtonController(MenuButtonController)>>pullDownAction
Win95MenuButtonController(MenuButtonController)>>redButtonPressedEvent:
RedButtonPressedEvent>>dispatchTo:
Win95MenuButtonController(Controller)>>handleEvent:
EventDispatcher>>dispatch:to:
EventDispatcher>>dispatchEvent:
RedButtonPressedEvent(Event)>>dispatch
optimized [] in WindowManager>>inputEvent:
BlockClosure>>on:do:
WindowManager>>inputEvent:
RedButtonPressedEvent(StatefullEvent)>>dispatchForWindowManager:
optimized [] in WindowManager>>safelyDispatchForWindowManager:
BlockClosure>>on:do:
WindowManager>>safelyDispatchForWindowManager:
WindowManager>>processNextEvent
optimized [] in [] in WindowManager>>newProcess
BlockClosure>>on:do:
optimized [] in WindowManager>>newProcess
BlockClosure>>on:do:
optimized [] in Process class>>forBlock:priority:

----------------------------------------------------------------------
ByteString(Object)>>doesNotUnderstand:
Receiver:
    a ByteString
Arguments:
    aMessage = a Message with selector: #value and arguments: #()
Temporaries:
    excpt = a MessageNotUnderstood
    resumeValue = nil
Context PC = 25

----------------------------------------------------------------------
[] in Win95MenuButtonController(MenuButtonController)>>pullDownAction
Receiver:
    a Win95MenuButtonController
Instance Variables:
    model = a ValueHolder on: '26'
    view = a Win95MenuButtonView
    sensor = a TranslatingSensor
    keyboardProcessor = a KeyboardProcessor
    keyboardHook = nil
    dispatcher = nil
Temporaries:
    menu = a Menu
    choice = '20'
    menuView = a Win95MenuView
    .self = a Win95MenuButtonController
    .menu = a Menu
Context PC = 43

----------------------------------------------------------------------
BlockClosure>>ensure:
Receiver:
    a BlockClosure
Instance Variables:
    method = ProbedCompiledBlock [] in MenuButtonController>>pullDownAction
    outerContext =
Win95MenuButtonController(MenuButtonController)>>pullDownAction
    copiedValues = an Array[2]
Arguments:
    aBlock = BlockClosure [] in MenuButtonController>>pullDownAction
Temporaries:
    result = nil
Context PC = 4

----------------------------------------------------------------------
Win95MenuButtonController(MenuButtonController)>>pullDownAction
Receiver:
    a Win95MenuButtonController
Instance Variables:
    model = a ValueHolder on: '26'
    view = a Win95MenuButtonView
    sensor = a TranslatingSensor
    keyboardProcessor = a KeyboardProcessor
    keyboardHook = nil
    dispatcher = nil
Temporaries:
    menu = a Menu
Context PC = 30

----------------------------------------------------------------------
Win95MenuButtonController(MenuButtonController)>>redButtonPressedEvent:
Receiver:
    a Win95MenuButtonController
Instance Variables:
    model = a ValueHolder on: '26'
    view = a Win95MenuButtonView
    sensor = a TranslatingSensor
    keyboardProcessor = a KeyboardProcessor
    keyboardHook = nil
    dispatcher = nil
Arguments:
    event = a RedButtonPressedEvent
Context PC = 17

----------------------------------------------------------------------
RedButtonPressedEvent>>dispatchTo:
Receiver:
    a RedButtonPressedEvent
Instance Variables:
    time = 359705968
    initiator = an EventDispatcher
    window = an ApplicationWindow 37482
    state = 1
    x = 117
    y = 70
    gx = 1701
    gy = 360
    buttonNumber = 1
Arguments:
    anObject = a Win95MenuButtonController
Context PC = 4

----------------------------------------------------------------------
Win95MenuButtonController(Controller)>>handleEvent:
Receiver:
    a Win95MenuButtonController
Instance Variables:
    model = a ValueHolder on: '26'
    view = a Win95MenuButtonView
    sensor = a TranslatingSensor
    keyboardProcessor = a KeyboardProcessor
    keyboardHook = nil
    dispatcher = nil
Arguments:
    event = a RedButtonPressedEvent
Context PC = 4

----------------------------------------------------------------------
EventDispatcher>>dispatch:to:
Receiver:
    an EventDispatcher
Instance Variables:
    windowController = an ApplicationStandardSystemController
    currentMouseConsumer = nil
    grabbingMouse = false
    keyboardProcessor = a KeyboardProcessor
    lastControlObject = nil
    trapList = nil
    state = nil
    repairDamageWhenDebugging = true
    flushQueueAfterError = true
    distributeEventsWhenDebugging = true
    dragDropInProgress = false
    dragDropTracker = nil
    dispatchUnknownEvents = false
Arguments:
    event = a RedButtonPressedEvent
    object = a Win95MenuButtonController
Temporaries:
    tmp = nil
Context PC = 10

----------------------------------------------------------------------
EventDispatcher>>dispatchEvent:
Receiver:
    an EventDispatcher
Instance Variables:
    windowController = an ApplicationStandardSystemController
    currentMouseConsumer = nil
    grabbingMouse = false
    keyboardProcessor = a KeyboardProcessor
    lastControlObject = nil
    trapList = nil
    state = nil
    repairDamageWhenDebugging = true
    flushQueueAfterError = true
    distributeEventsWhenDebugging = true
    dragDropInProgress = false
    dragDropTracker = nil
    dispatchUnknownEvents = false
Arguments:
    event = a RedButtonPressedEvent
Temporaries:
    objectWantingControl = a Win95MenuButtonController
    targetKeyboardProcessor = nil
Context PC = 113

----------------------------------------------------------------------
RedButtonPressedEvent(Event)>>dispatch
Receiver:
    a RedButtonPressedEvent
Instance Variables:
    time = 359705968
    initiator = an EventDispatcher
    window = an ApplicationWindow 37482
    state = 1
    x = 117
    y = 70
    gx = 1701
    gy = 360
    buttonNumber = 1
Context PC = 16

----------------------------------------------------------------------
optimized [] in WindowManager>>inputEvent:
Receiver:
    an UndefinedObject
Temporaries:
    .anEvent = a RedButtonPressedEvent
Context PC = 5

----------------------------------------------------------------------
BlockClosure>>on:do:
Receiver:
    a BlockClosure
Instance Variables:
    method = CompiledBlock [] in WindowManager>>inputEvent:
    outerContext = nil
    copiedValues = a RedButtonPressedEvent
Arguments:
    anExceptionSelector = ForgetEventError
    handlerBlock = BlockClosure [] in WindowManager>>inputEvent:
Context PC = 18

----------------------------------------------------------------------
WindowManager>>inputEvent:
Receiver:
    a WindowManager
Instance Variables:
    windows = an OrderedCollection[7]
    activeController = nil
    interruptLock = false
    outstandingMetaOrDamage = false
    openInProgress = false
    eventQueue = an EventQueue
    baseProcess = a Process in Semaphore>>wait
    dontFilterEvents = false
    ignoreInputEvents = nil
Arguments:
    anEvent = a RedButtonPressedEvent
Context PC = 14

----------------------------------------------------------------------
RedButtonPressedEvent(StatefullEvent)>>dispatchForWindowManager:
Receiver:
    a RedButtonPressedEvent
Instance Variables:
    time = 359705968
    initiator = an EventDispatcher
    window = an ApplicationWindow 37482
    state = 1
    x = 117
    y = 70
    gx = 1701
    gy = 360
    buttonNumber = 1
Arguments:
    aWinMgr = a WindowManager
Context PC = 4

----------------------------------------------------------------------
optimized [] in WindowManager>>safelyDispatchForWindowManager:
Receiver:
    an UndefinedObject
Temporaries:
    .event = a RedButtonPressedEvent
    .self = a WindowManager
Context PC = 6

----------------------------------------------------------------------
BlockClosure>>on:do:
Receiver:
    a BlockClosure
Instance Variables:
    method = CompiledBlock [] in
WindowManager>>safelyDispatchForWindowManager:
    outerContext = nil
    copiedValues = an Array[2]
Arguments:
    anExceptionSelector = BadControllerError
    handlerBlock = BlockClosure [] in
WindowManager>>safelyDispatchForWindowManager:
Context PC = 18

----------------------------------------------------------------------
WindowManager>>safelyDispatchForWindowManager:
Receiver:
    a WindowManager
Instance Variables:
    windows = an OrderedCollection[7]
    activeController = nil
    interruptLock = false
    outstandingMetaOrDamage = false
    openInProgress = false
    eventQueue = an EventQueue
    baseProcess = a Process in Semaphore>>wait
    dontFilterEvents = false
    ignoreInputEvents = nil
Arguments:
    event = a RedButtonPressedEvent
Context PC = 13

----------------------------------------------------------------------
WindowManager>>processNextEvent
Receiver:
    a WindowManager
Instance Variables:
    windows = an OrderedCollection[7]
    activeController = nil
    interruptLock = false
    outstandingMetaOrDamage = false
    openInProgress = false
    eventQueue = an EventQueue
    baseProcess = a Process in Semaphore>>wait
    dontFilterEvents = false
    ignoreInputEvents = nil
Temporaries:
    event = a RedButtonPressedEvent
Context PC = 9

----------------------------------------------------------------------
optimized [] in [] in WindowManager>>newProcess
Receiver:
    an UndefinedObject
Temporaries:
    .self = a WindowManager
Context PC = 13

----------------------------------------------------------------------
BlockClosure>>on:do:
Receiver:
    a BlockClosure
Instance Variables:
    method = CompiledBlock [] in [] in WindowManager>>newProcess
    outerContext = nil
    copiedValues = a WindowManager
Arguments:
    anExceptionSelector = TerminateException
    handlerBlock = BlockClosure [] in [] in WindowManager>>newProcess
Context PC = 18

----------------------------------------------------------------------
optimized [] in WindowManager>>newProcess
Receiver:
    an UndefinedObject
Temporaries:
    .self = a WindowManager
Context PC = 15

----------------------------------------------------------------------
BlockClosure>>on:do:
Receiver:
    a BlockClosure
Instance Variables:
    method = CompiledBlock [] in WindowManager>>newProcess
    outerContext = nil
    copiedValues = a WindowManager
Arguments:
    anExceptionSelector = TerminateException
    handlerBlock = BlockClosure [] in [] in Process
class>>forBlock:priority:
Context PC = 18

----------------------------------------------------------------------
optimized [] in Process class>>forBlock:priority:
Receiver:
    an UndefinedObject
Temporaries:
    .aBlock = BlockClosure [] in WindowManager>>newProcess
Context PC = 9




<?xml version="1.0"?>

<st-source>
<!--
Name: PullDownActionValueError
DbIdentifier: Soops741
DbTrace: 70254
PackageName: PullDownActionValueError
Parcel: #('PullDownActionValueError')
PrintStringCache: (2,Tom)
Date: 1:55:32 pm July 20, 2007
 -->
<time-stamp>From VisualWorks®, 7.4.1 of May 30, 2006 on July 20, 2007 at 1:55:32 pm</time-stamp>


<do-it>(Dialog confirm: 'You are filing-in a Parcel source file!\\While this is possible it will not have\the same effect as loading the parcel.\None of the Parcel''s prerequisites will\be loaded and none of its load actions\will be performed.\\Are you sure you want to file-in?' withCRs) ifFalse: [self error: 'Parcel file-in abandoned.  Choose terminate or close.']</do-it>

<class>
<name>StringMenuTest</name>
<environment>Smalltalk</environment>
<super>UI.ApplicationModel</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>string </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>UIApplications-New</category>
<attributes>
<package>PullDownActionValueError</package>
</attributes>
</class>

<comment>
<class-id>StringMenuTest</class-id>
<body>This shows a reproducable uhe in vw7.5, #value being sent to a menu choice, which is a string...
Do: StringMenuTest open, and select an item from the dropdown menu until it crashes

</body>
</comment>

<methods>
<class-id>StringMenuTest</class-id> <category>aspects</category>

<body package="PullDownActionValueError" selector="string">string
        "This method was generated by UIDefiner.  Any edits made here
        may be lost whenever methods are automatically defined.  The
        initialization provided below may have been preempted by an
        initialize method."

        ^string isNil
                ifTrue:
                        [string := nil asValue]
                ifFalse:
                        [string]</body>

<body package="PullDownActionValueError" selector="stringMenu">stringMenu
        | mb |
        mb := MenuBuilder new.
        1 to: 100 do: [:n | mb add: n printString-&gt;n printString ].
        ^mb menu</body>

<body package="PullDownActionValueError" selector="stringMenuSimple">stringMenuSimple
        | mb fnames |
        mb := MenuBuilder new.
        fnames := #('lkj' 'lkjlkj' 'lkjlkj').
        fnames do: [:n | mb add: n-&gt;n ].
        ^mb menu</body>
</methods>

<methods>
<class-id>StringMenuTest class</class-id> <category>example</category>

<body package="PullDownActionValueError" selector="example">example

"This shows a reproducable uhe in vw7.5, #value being sent to a menu choice, which is a string...
Do: StringMenuTest open, and select an item from the dropdown menu until it crashes"


        self open</body>
</methods>

<methods>
<class-id>StringMenuTest class</class-id> <category>interface specs</category>

<body package="PullDownActionValueError" selector="windowSpec">windowSpec
        "Tools.UIPainter new openOnClass: self andSelector: #windowSpec"

        &lt;resource: #canvas&gt;
        ^#(#{UI.FullSpec}
                #window:
                #(#{UI.WindowSpec}
                        #label: 'Unlabeled Canvas'
                        #bounds: #(#{Graphics.Rectangle} 817 360 1490 804 ) )
                #component:
                #(#{UI.SpecCollection}
                        #collection: #(
                                #(#{UI.MenuButtonSpec}
                                        #layout: #(#{Graphics.Rectangle} 49 65 149 88 )
                                        #name: #StringMenuButton
                                        #model: #string
                                        #menu: #stringMenu ) ) ) )</body>
</methods>

<do-it>"Imported Classes:"</do-it>

<do-it>self error: 'Attempting to file-in parcel imports.  Choose terminate or close'</do-it>

<class>
<name>ApplicationModel</name>
<environment>UI</environment>
<super>UI.Model</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>builder uiSession eventHandlers </inst-vars>
<class-inst-vars>savedWindowInformation </class-inst-vars>
<imports></imports>
<category>UIBuilder-Framework</category>
<attributes>
<package>UIBuilder-Framework</package>
</attributes>
</class>

</st-source>

PullDownActionValueError.pcl (3K) Download Attachment