[MacRuby-devel] [MacRuby] #720: dynamically defined method called by menu items bug

MacRuby ruby-noreply at macosforge.org
Sun May 16 23:20:58 PDT 2010


#720: dynamically defined method called by menu items bug
-------------------------------------+--------------------------------------
 Reporter:  mattaimonetti@…          |       Owner:  lsansonetti@…        
     Type:  defect                   |      Status:  new                  
 Priority:  blocker                  |   Milestone:  MacRuby 0.7          
Component:  MacRuby                  |    Keywords:                       
-------------------------------------+--------------------------------------
 Here is a reduction of the bug encountered when a menu item calls a
 dynamically defined method.

 Run the following code and click on one of the two first menu items to
 reproduce the bug.

 {{{
 framework 'AppKit'

 app = NSApplication.sharedApplication

 class ItemDelegate

   def define_actions(actions)
     actions.each do |command|
       self.class.send(:define_method, command) do |sender|
         puts command
       end
     end
   end

   def quit(sender)
     exit
   end

 end

 @menu = NSMenu.alloc.init
 actions = ['test', 'test2']
 menu_delegate = ItemDelegate.new
 menu_delegate.define_actions(actions)

 actions.each do |action|
   item = @menu.addItemWithTitle(action, action: action, keyEquivalent: "")
   item.target = menu_delegate
 end

 item = @menu.addItemWithTitle("Quit", action: 'quit:', keyEquivalent: "q")
 item.toolTip = "Click to close this App"
 item.target = menu_delegate

 bar =
 NSStatusBar.systemStatusBar.statusItemWithLength(NSSquareStatusItemLength)
 bar.title = "test"
 bar.menu = @menu
 bar.highlightMode = true

 app.run
 }}}

 http://gist.github.com/403462



 {{{
 2010-05-16 23:15:19.037 macruby[29001:903] HIToolbox: ignoring exception
 '/Users/mattetti/bug.rb:1:in `<main>': wrong number of arguments (5393856
 for 1) (ArgumentError)
 ' that raised inside Carbon event dispatch
 (
         0   CoreFoundation                      0x00007fff86dbad24
 __exceptionPreprocess + 180
         1   libobjc.A.dylib                     0x00007fff851440f3
 objc_exception_throw + 45
         2   libmacruby.dylib                    0x0000000100160a4f
 rb_vm_raise + 335
         3   libmacruby.dylib                    0x0000000100045cf9
 rb_exc_raise + 9
         4   libmacruby.dylib                    0x0000000100044234
 rb_raise + 308
         5   libmacruby.dylib                    0x0000000100148cf8
 rb_vm_block_eval2 + 2104
         6   ???                                 0x0000000101101380 0x0 +
 4312798080
         7   AppKit                              0x00007fff8324d8ea
 -[NSApplication sendAction:to:from:] + 95
         8   AppKit                              0x00007fff83271e5a
 -[NSMenuItem _corePerformAction] + 365
         9   AppKit                              0x00007fff83271bc4
 -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] + 121
         10  AppKit                              0x00007fff834f593d
 -[NSMenu _internalPerformActionForItemAtIndex:] + 35
         11  AppKit                              0x00007fff833a7729
 -[NSCarbonMenuImpl _carbonCommandProcessEvent:handlerCallRef:] + 136
         12  AppKit                              0x00007fff832543b0
 NSSLMMenuEventHandler + 321
         13  HIToolbox                           0x00007fff85664b57
 _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec
 + 1002
         14  HIToolbox                           0x00007fff856640a6
 _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec
 + 395
         15  HIToolbox                           0x00007fff85681d85
 SendEventToEventTarget + 45
         16  HIToolbox                           0x00007fff856b0e61
 _ZL18SendHICommandEventjPK9HICommandjjhPKvP20OpaqueEventTargetRefS5_PP14OpaqueEventRef
 + 387
         17  HIToolbox                           0x00007fff856ddbf6
 SendMenuCommandWithContextAndModifiers + 56
         18  HIToolbox                           0x00007fff856ddbae
 SendMenuItemSelectedEvent + 101
         19  HIToolbox                           0x00007fff856ddabe
 _ZL19FinishMenuSelectionP13SelectionDataP10MenuResultS2_ + 150
         20  HIToolbox                           0x00007fff857e6acb
 _ZL19PopUpMenuSelectCoreP8MenuData5PointdS1_tjPK4RecttjS4_S4_PK10__CFStringPP13OpaqueMenuRefPt
 + 1618
         21  HIToolbox                           0x00007fff857e6e24
 _HandlePopUpMenuSelection7 + 665
         22  AppKit                              0x00007fff833a46db
 _NSSLMPopUpCarbonMenu3 + 3720
         23  AppKit                              0x00007fff835d41b5
 -[NSStatusBarButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 162
         24  AppKit                              0x00007fff832d7c59
 -[NSControl mouseDown:] + 624
         25  AppKit                              0x00007fff831f1f1b
 -[NSWindow sendEvent:] + 5409
         26  AppKit                              0x00007fff835d4f54
 -[NSStatusBarWindow sendEvent:] + 68
         27  AppKit                              0x00007fff83127662
 -[NSApplication sendEvent:] + 4719
         28  AppKit                              0x00007fff830be0aa
 -[NSApplication run] + 474
         29  ???                                 0x0000000101101ac7 0x0 +
 4312799943
         30  libmacruby.dylib                    0x000000010014b5c0
 rb_vm_dispatch + 3184
         31  ???                                 0x0000000101100834 0x0 +
 4312795188
         32  libmacruby.dylib                    0x000000010015f35f
 rb_vm_run + 351
         33  libmacruby.dylib                    0x0000000100045f59
 ruby_run_node + 73
         34  macruby                             0x0000000100000d28 main +
 152
         35  macruby                             0x0000000100000c88 start +
 52
 )

 }}}

 (tested with MacRuby 0.6 final)

-- 
Ticket URL: <http://www.macruby.org/trac/ticket/720>
MacRuby <http://macruby.org/>



More information about the MacRuby-devel mailing list