[BUG 741,75] wrapped menu bar fails under certain conditions

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

[BUG 741,75] wrapped menu bar fails under certain conditions

Reinout Heeck-2

When we
-have a menu bar in a window and
-the window is narrow so it wraps to multiple lines of menu buttons and
-the first item in a menu (under a button of the top row of menu buttons
) is a sub menu and
-the chosen action alters the menu bar

We get an UHE.


Some digging suggests that this is due to caching of a menu button in
ivar nextMenuButton of our WinXPMenuBar.
This cached item is used after the menu's window is closed (and the
chosen action is performed).
However since the chosen action changed the menu the cached button has
already been released (has no container) leading to the UHE.

I created a little demo app (attached) which also uncovers another bug
(at least under win XP) - it is very hard to select an item (from a sub
menu off the top row of buttons) because the relevant sub menu window
fails to open.


After loading open the demo with
  NextMenuButtonBug open


Reinout Heeck
---------------


Unhandled exception: Message not understood: #localPointToGlobal:
UndefinedObject(Object)>>doesNotUnderstand:
WinXPMenuBarButtonView(VisualPart)>>localPointToGlobal:
WinXPMenuView(MenuView)>>displayBoxOfView:
WinXPMenuView(Win95MenuView)>>openFromMenuBarButton:
optimized [] in Win95MenuBarButtonController>>menuBarActionForMenu:
BlockClosure>>ensure:
WinXPMenuBarButtonController(Win95MenuBarButtonController)>>menuBarActionForMenu:
WinXPMenuBarButtonController(MenuBarButtonController)>>menuBarAction
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
WinXPMenuBarButtonController>>controlTerminate
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
WinXPMenuBarButtonController>>controlTerminate
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
WinXPMenuBarButtonController>>controlTerminate
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
WinXPMenuBarButtonController>>controlTerminate
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
WinXPMenuBarButtonController>>controlTerminate
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
WinXPMenuBarButtonController>>controlTerminate
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
WinXPMenuBarButtonController>>controlTerminate
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
WinXPMenuBarButtonController>>controlTerminate
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
WinXPMenuBarButtonController>>controlTerminate
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
WinXPMenuBarButtonController>>controlTerminate
WinXPMenuBarButtonController(MenuBarButtonController)>>redButtonPressedEvent:
RedButtonPressedEvent>>dispatchTo:
WinXPMenuBarButtonController(Controller)>>handleEvent:
EventDispatcher>>dispatch:to:
EventDispatcher>>dispatchEvent:
RedButtonPressedEvent(Event)>>dispatch
RedButtonPressedEvent(Event)>>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:

----------------------------------------------------------------------
UndefinedObject(Object)>>doesNotUnderstand:
Receiver:
    an UndefinedObject
Arguments:
    aMessage = a Message with selector: #localPointToGlobal: and
arguments: #(0@0)
Temporaries:
    excpt = a MessageNotUnderstood
    resumeValue = nil
Context PC = 25

----------------------------------------------------------------------
WinXPMenuBarButtonView(VisualPart)>>localPointToGlobal:
Receiver:
    a WinXPMenuBarButtonView
Instance Variables:
    container = nil
    eventHandlers = nil
    model = nil
    controller = a WinXPMenuBarButtonController
    properties = nil
    state = a WidgetState
    isInTransition = true
    latestValue = nil
    referenceValue = true
    label = Label for '<new item>'
    textStyle = a VariableSizeTextAttributes
    helpText = nil
    menuHolder = a Menu
    menuBar = a WinXPMenuBar
    accessChar = nil
    flyingOver = true
Arguments:
    aPoint = 0@0
Context PC = 4

----------------------------------------------------------------------
WinXPMenuView(MenuView)>>displayBoxOfView:
Receiver:
    a WinXPMenuView
Instance Variables:
    container = nil
    eventHandlers = nil
    components = an OrderedCollection[1]
    preferredBounds = nil
    model = a Menu
    controller = a Win95MenuFromMenuBarController
    menuItemViews = an OrderedCollection[1]
    parentMenuItemView = nil
    selectedValue = nil
    selectionFinal = nil
    highlightedMenuItemView = nil
    usedSelectionMemory = nil
    parentMenuBarButtonView = a WinXPMenuBarButtonView
    commonTextIndent = 15
    shortcutColumnIndent = 0
Arguments:
    aView = a WinXPMenuBarButtonView
Temporaries:
    localBounds = 0@0 corner: 71@20
Context PC = 11

----------------------------------------------------------------------
WinXPMenuView(Win95MenuView)>>openFromMenuBarButton:
Receiver:
    a WinXPMenuView
Instance Variables:
    container = nil
    eventHandlers = nil
    components = an OrderedCollection[1]
    preferredBounds = nil
    model = a Menu
    controller = a Win95MenuFromMenuBarController
    menuItemViews = an OrderedCollection[1]
    parentMenuItemView = nil
    selectedValue = nil
    selectionFinal = nil
    highlightedMenuItemView = nil
    usedSelectionMemory = nil
    parentMenuBarButtonView = a WinXPMenuBarButtonView
    commonTextIndent = 15
    shortcutColumnIndent = 0
Arguments:
    theParentMenuBarButtonView = a WinXPMenuBarButtonView
Temporaries:
    theScreen = a Screen
    parentDisplayBox = nil
    monitorRectangle = nil
    wrappedMenu = nil
    menuWindowBounds = nil
    intoMonitor = nil
    menuWindow = nil
Context PC = 23

----------------------------------------------------------------------
optimized [] in Win95MenuBarButtonController>>menuBarActionForMenu:
Receiver:
    an UndefinedObject
Temporaries:
    valueResult = nil
    menuView = a WinXPMenuView
    .self = a WinXPMenuBarButtonController
    .aMenu = a Menu
Context PC = 33

----------------------------------------------------------------------
BlockClosure>>ensure:
Receiver:
    a BlockClosure
Instance Variables:
    method = CompiledBlock [] in
Win95MenuBarButtonController>>menuBarActionForMenu:
    outerContext = nil
    copiedValues = an Array[2]
Arguments:
    aBlock = BlockClosure [] in
Win95MenuBarButtonController>>menuBarActionForMenu:
Temporaries:
    result = nil
Context PC = 4

----------------------------------------------------------------------
WinXPMenuBarButtonController(Win95MenuBarButtonController)>>menuBarActionForMenu:
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = nil
    highlightOnOpen = false
Arguments:
    aMenu = a Menu
Temporaries:
    performer = a NextMenuButtonBug
Context PC = 31

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>menuBarAction
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = nil
    highlightOnOpen = false
Temporaries:
    theMenu = a Menu
Context PC = 20

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = nil
    highlightOnOpen = false
Context PC = 7

----------------------------------------------------------------------
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
Receiver:
    a WinXPMenuBar
Instance Variables:
    container = a MenuBarWrapper on: a WinXPMenuBar
    eventHandlers = nil
    components = an OrderedCollection[5]
    preferredBounds = 0@0 corner: 142@60
    leftSpace = 0
    spaceBetweenItems = 0
    extraSpaceTop = 0
    extraSpaceBottom = 0
    extraSpaceBetweenLines = 0
    menuChannel = a ValueHolder on: a Menu
    performer = a NextMenuButtonBug
    menuButtons = an OrderedCollection[5]
    nextMenuButton = nil
    lastMousePosition = 762@455
Temporaries:
    thisMenuButton = a WinXPMenuBarButtonView
Context PC = 15

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBarButtonController>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 8

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
Receiver:
    a WinXPMenuBar
Instance Variables:
    container = a MenuBarWrapper on: a WinXPMenuBar
    eventHandlers = nil
    components = an OrderedCollection[5]
    preferredBounds = 0@0 corner: 142@60
    leftSpace = 0
    spaceBetweenItems = 0
    extraSpaceTop = 0
    extraSpaceBottom = 0
    extraSpaceBetweenLines = 0
    menuChannel = a ValueHolder on: a Menu
    performer = a NextMenuButtonBug
    menuButtons = an OrderedCollection[5]
    nextMenuButton = nil
    lastMousePosition = 762@455
Temporaries:
    thisMenuButton = a WinXPMenuBarButtonView
Context PC = 15

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBarButtonController>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 8

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
Receiver:
    a WinXPMenuBar
Instance Variables:
    container = a MenuBarWrapper on: a WinXPMenuBar
    eventHandlers = nil
    components = an OrderedCollection[5]
    preferredBounds = 0@0 corner: 142@60
    leftSpace = 0
    spaceBetweenItems = 0
    extraSpaceTop = 0
    extraSpaceBottom = 0
    extraSpaceBetweenLines = 0
    menuChannel = a ValueHolder on: a Menu
    performer = a NextMenuButtonBug
    menuButtons = an OrderedCollection[5]
    nextMenuButton = nil
    lastMousePosition = 762@455
Temporaries:
    thisMenuButton = a WinXPMenuBarButtonView
Context PC = 15

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBarButtonController>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 8

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
Receiver:
    a WinXPMenuBar
Instance Variables:
    container = a MenuBarWrapper on: a WinXPMenuBar
    eventHandlers = nil
    components = an OrderedCollection[5]
    preferredBounds = 0@0 corner: 142@60
    leftSpace = 0
    spaceBetweenItems = 0
    extraSpaceTop = 0
    extraSpaceBottom = 0
    extraSpaceBetweenLines = 0
    menuChannel = a ValueHolder on: a Menu
    performer = a NextMenuButtonBug
    menuButtons = an OrderedCollection[5]
    nextMenuButton = nil
    lastMousePosition = 762@455
Temporaries:
    thisMenuButton = a WinXPMenuBarButtonView
Context PC = 15

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBarButtonController>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 8

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
Receiver:
    a WinXPMenuBar
Instance Variables:
    container = a MenuBarWrapper on: a WinXPMenuBar
    eventHandlers = nil
    components = an OrderedCollection[5]
    preferredBounds = 0@0 corner: 142@60
    leftSpace = 0
    spaceBetweenItems = 0
    extraSpaceTop = 0
    extraSpaceBottom = 0
    extraSpaceBetweenLines = 0
    menuChannel = a ValueHolder on: a Menu
    performer = a NextMenuButtonBug
    menuButtons = an OrderedCollection[5]
    nextMenuButton = nil
    lastMousePosition = 762@455
Temporaries:
    thisMenuButton = a WinXPMenuBarButtonView
Context PC = 15

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBarButtonController>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 8

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
Receiver:
    a WinXPMenuBar
Instance Variables:
    container = a MenuBarWrapper on: a WinXPMenuBar
    eventHandlers = nil
    components = an OrderedCollection[5]
    preferredBounds = 0@0 corner: 142@60
    leftSpace = 0
    spaceBetweenItems = 0
    extraSpaceTop = 0
    extraSpaceBottom = 0
    extraSpaceBetweenLines = 0
    menuChannel = a ValueHolder on: a Menu
    performer = a NextMenuButtonBug
    menuButtons = an OrderedCollection[5]
    nextMenuButton = nil
    lastMousePosition = 762@455
Temporaries:
    thisMenuButton = a WinXPMenuBarButtonView
Context PC = 15

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBarButtonController>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 8

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
Receiver:
    a WinXPMenuBar
Instance Variables:
    container = a MenuBarWrapper on: a WinXPMenuBar
    eventHandlers = nil
    components = an OrderedCollection[5]
    preferredBounds = 0@0 corner: 142@60
    leftSpace = 0
    spaceBetweenItems = 0
    extraSpaceTop = 0
    extraSpaceBottom = 0
    extraSpaceBetweenLines = 0
    menuChannel = a ValueHolder on: a Menu
    performer = a NextMenuButtonBug
    menuButtons = an OrderedCollection[5]
    nextMenuButton = nil
    lastMousePosition = 762@455
Temporaries:
    thisMenuButton = a WinXPMenuBarButtonView
Context PC = 15

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBarButtonController>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 8

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
Receiver:
    a WinXPMenuBar
Instance Variables:
    container = a MenuBarWrapper on: a WinXPMenuBar
    eventHandlers = nil
    components = an OrderedCollection[5]
    preferredBounds = 0@0 corner: 142@60
    leftSpace = 0
    spaceBetweenItems = 0
    extraSpaceTop = 0
    extraSpaceBottom = 0
    extraSpaceBetweenLines = 0
    menuChannel = a ValueHolder on: a Menu
    performer = a NextMenuButtonBug
    menuButtons = an OrderedCollection[5]
    nextMenuButton = nil
    lastMousePosition = 762@455
Temporaries:
    thisMenuButton = a WinXPMenuBarButtonView
Context PC = 15

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBarButtonController>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 8

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
Receiver:
    a WinXPMenuBar
Instance Variables:
    container = a MenuBarWrapper on: a WinXPMenuBar
    eventHandlers = nil
    components = an OrderedCollection[5]
    preferredBounds = 0@0 corner: 142@60
    leftSpace = 0
    spaceBetweenItems = 0
    extraSpaceTop = 0
    extraSpaceBottom = 0
    extraSpaceBetweenLines = 0
    menuChannel = a ValueHolder on: a Menu
    performer = a NextMenuButtonBug
    menuButtons = an OrderedCollection[5]
    nextMenuButton = nil
    lastMousePosition = 762@455
Temporaries:
    thisMenuButton = a WinXPMenuBarButtonView
Context PC = 15

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBarButtonController>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 8

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>startUpWithMenuBarAction
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBar(MenuBar)>>menuBarButtonControlTerminates
Receiver:
    a WinXPMenuBar
Instance Variables:
    container = a MenuBarWrapper on: a WinXPMenuBar
    eventHandlers = nil
    components = an OrderedCollection[5]
    preferredBounds = 0@0 corner: 142@60
    leftSpace = 0
    spaceBetweenItems = 0
    extraSpaceTop = 0
    extraSpaceBottom = 0
    extraSpaceBetweenLines = 0
    menuChannel = a ValueHolder on: a Menu
    performer = a NextMenuButtonBug
    menuButtons = an OrderedCollection[5]
    nextMenuButton = nil
    lastMousePosition = 762@455
Temporaries:
    thisMenuButton = a WinXPMenuBarButtonView
Context PC = 15

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 10

----------------------------------------------------------------------
WinXPMenuBarButtonController>>controlTerminate
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Context PC = 8

----------------------------------------------------------------------
WinXPMenuBarButtonController(MenuBarButtonController)>>redButtonPressedEvent:
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
Arguments:
    event = a RedButtonPressedEvent
Context PC = 13

----------------------------------------------------------------------
RedButtonPressedEvent>>dispatchTo:
Receiver:
    a RedButtonPressedEvent
Instance Variables:
    time = 32031687
    initiator = an EventDispatcher
    window = an ApplicationWindow 272
    state = 1
    x = 28
    y = 7
    gx = 628
    gy = 432
    buttonNumber = 1
Arguments:
    anObject = a WinXPMenuBarButtonController
Context PC = 4

----------------------------------------------------------------------
WinXPMenuBarButtonController(Controller)>>handleEvent:
Receiver:
    a WinXPMenuBarButtonController
Instance Variables:
    model = nil
    view = a WinXPMenuBarButtonView
    sensor = a TranslatingSensor
    highlightOnOpen = false
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 = a WinXPMenuBarButtonController
    trapList = nil
    state = nil
    repairDamageWhenDebugging = true
    flushQueueAfterError = true
    distributeEventsWhenDebugging = true
    dragDropInProgress = false
    dragDropTracker = nil
    dispatchUnknownEvents = false
Arguments:
    event = a RedButtonPressedEvent
    object = a WinXPMenuBarButtonController
Temporaries:
    tmp = nil
Context PC = 10

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

----------------------------------------------------------------------
RedButtonPressedEvent(Event)>>dispatch
Receiver:
    a RedButtonPressedEvent
Instance Variables:
    time = 32031687
    initiator = an EventDispatcher
    window = an ApplicationWindow 272
    state = 1
    x = 28
    y = 7
    gx = 628
    gy = 432
    buttonNumber = 1
Context PC = 16

----------------------------------------------------------------------
RedButtonPressedEvent(Event)>>dispatchForWindowManager:
Receiver:
    a RedButtonPressedEvent
Instance Variables:
    time = 32031687
    initiator = an EventDispatcher
    window = an ApplicationWindow 272
    state = 1
    x = 28
    y = 7
    gx = 628
    gy = 432
    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[2]
    activeController = nil
    interruptLock = false
    outstandingMetaOrDamage = false
    openInProgress = false
    eventQueue = an EventQueue
    baseProcess = a Process in Semaphore>>wait
    dontFilterEvents = false
Arguments:
    event = a RedButtonPressedEvent
Context PC = 13

----------------------------------------------------------------------
WindowManager>>processNextEvent
Receiver:
    a WindowManager
Instance Variables:
    windows = an OrderedCollection[2]
    activeController = nil
    interruptLock = false
    outstandingMetaOrDamage = false
    openInProgress = false
    eventQueue = an EventQueue
    baseProcess = a Process in Semaphore>>wait
    dontFilterEvents = false
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: NextMenuButtonBug
DbIdentifier: Soops75
DbTrace: 74095
PackageName: NextMenuButtonBug
Parcel: #('NextMenuButtonBug')
PrintStringCache: (1,Albert)
Date: 4:45:56 pm October 25, 2007
 -->
<time-stamp>From VisualWorks®, 7.5 of April 16, 2007 on October 25, 2007 at 4:45:56 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>NextMenuButtonBug</name>
<environment>Smalltalk</environment>
<super>UI.ApplicationModel</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>menu </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>UIApplications-New</category>
<attributes>
<package>NextMenuButtonBug</package>
</attributes>
</class>

<methods>
<class-id>NextMenuButtonBug</class-id> <category>all</category>

<body package="NextMenuButtonBug" selector="initialize">initialize
        super initialize.
        menu := self class menu asValue</body>

<body package="NextMenuButtonBug" selector="menu">menu

        ^menu</body>

<body package="NextMenuButtonBug" selector="menuAction">menuAction

        "does nothing but alter the current menu."

        menu value: menu value copy</body>
</methods>

<methods>
<class-id>NextMenuButtonBug class</class-id> <category>resources</category>

<body package="NextMenuButtonBug" selector="menu">menu
        "Tools.MenuEditor new openOnClass: self andSelector: #menu"

        &lt;resource: #menu&gt;
        ^#(#{UI.Menu} #(
                        #(#{UI.MenuItem}
                                #rawLabel: '&lt;new item&gt;'
                                #submenu: #(#{UI.Menu} #(
                                                #(#{UI.MenuItem}
                                                        #rawLabel: '&lt;new item&gt;'
                                                        #submenu: #(#{UI.Menu} #(
                                                                        #(#{UI.MenuItem}
                                                                                #rawLabel: '&lt;new item&gt;'
                                                                                #value: #menuAction ) ) #(1 ) nil ) )
                                                #(#{UI.MenuItem}
                                                        #rawLabel: '&lt;new item&gt;'
                                                        #submenu: #(#{UI.Menu} #(
                                                                        #(#{UI.MenuItem}
                                                                                #rawLabel: '&lt;new item&gt;'
                                                                                #value: #menuAction ) ) #(1 ) nil ) ) ) #(2 ) nil ) )
                        #(#{UI.MenuItem}
                                #rawLabel: '&lt;new item&gt;'
                                #submenu: #(#{UI.Menu} #(
                                                #(#{UI.MenuItem}
                                                        #rawLabel: '&lt;new item&gt;'
                                                        #submenu: #(#{UI.Menu} #(
                                                                        #(#{UI.MenuItem}
                                                                                #rawLabel: '&lt;new item&gt;'
                                                                                #value: #menuAction ) ) #(1 ) nil ) ) ) #(1 ) nil ) )
                        #(#{UI.MenuItem}
                                #rawLabel: '&lt;new item&gt;'
                                #submenu: #(#{UI.Menu} #(
                                                #(#{UI.MenuItem}
                                                        #rawLabel: '&lt;new item&gt;'
                                                        #submenu: #(#{UI.Menu} #(
                                                                        #(#{UI.MenuItem}
                                                                                #rawLabel: '&lt;new item&gt;'
                                                                                #value: #menuAction ) ) #(1 ) nil ) ) ) #(1 ) nil ) )
                        #(#{UI.MenuItem}
                                #rawLabel: '&lt;new item&gt;'
                                #submenu: #(#{UI.Menu} #(
                                                #(#{UI.MenuItem}
                                                        #rawLabel: '&lt;new item&gt;'
                                                        #submenu: #(#{UI.Menu} #(
                                                                        #(#{UI.MenuItem}
                                                                                #rawLabel: '&lt;new item&gt;'
                                                                                #value: #menuAction ) ) #(1 ) nil ) ) ) #(1 ) nil ) )
                        #(#{UI.MenuItem}
                                #rawLabel: '&lt;new item&gt;'
                                #submenu: #(#{UI.Menu} #(
                                                #(#{UI.MenuItem}
                                                        #rawLabel: '&lt;new item&gt;'
                                                        #submenu: #(#{UI.Menu} #(
                                                                        #(#{UI.MenuItem}
                                                                                #rawLabel: '&lt;new item&gt;'
                                                                                #value: #menuAction ) ) #(1 ) nil ) ) ) #(1 ) nil ) ) ) #(5 ) nil ) decodeAsLiteralArray</body>
</methods>

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

<body package="NextMenuButtonBug" 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} 639 532 839 732 )
                        #flags: 4
                        #menu: #menu )
                #component:
                #(#{UI.SpecCollection}
                        #collection: #() ) )</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>

NextMenuButtonBug.pcl (4K) Download Attachment