Bug in popupContextualMenu?

Hi all, I have experienced a weird behavior in popuContextualMenu where the value of the returned S_selection variable does not match what was in the menu's custom string in the case where an exclamation point is included in the menu list.

Example non-working code below: if the user clicks on a trace, a single-item popup menu displays, but the stringswitch statement returns nothing.

function fitContextMenuHook(hs)
  STRUCT WMWinHookStruct &hs
 
  variable ret=0
  strswitch(hs.eventName)
    case "mousedown":
      Variable isContextualMenu = hs.eventMod %& 0x10 //did the usr right click?
      if(!isContextualMenu)
        break //do nothing if it was a left click
      endif
      string clickedTraceName = tracefrompixel(hs.mouseLoc.h, hs.mouseLoc.v,"")
      print clickedTraceName
      if (strlen(clickedTraceName)) //if there was no trace evaluates to zero (ie false)
      popupContextualMenu/C=(hs.mouseLoc.h, hs.mouseLoc.v) "Fit me!;"
      print s_selection
      StrSwitch(S_selection)
        case "Fit me!": ///////DOES NOT RETURN TRUE WHEN USER SELECTS FROM THE SINGLE-ITEM MENU
          print "fit me baby one more time"
          break
      endswitch
      ret=1
      endif
      break
  endswitch
  return ret
end

However, the following code works:

function fitContextMenuHook(hs)
  STRUCT WMWinHookStruct &hs
 
  variable ret=0
  strswitch(hs.eventName)
    case "mousedown":
      Variable isContextualMenu = hs.eventMod %& 0x10 //did the usr right click?
      if(!isContextualMenu)
        break //do nothing if it was a left click
      endif
      string clickedTraceName = tracefrompixel(hs.mouseLoc.h, hs.mouseLoc.v,"")
      print clickedTraceName
      if (strlen(clickedTraceName)) //if there was no trace evaluates to zero (ie false)
      popupContextualMenu/C=(hs.mouseLoc.h, hs.mouseLoc.v) "Fit me!;"
      print s_selection
      StrSwitch(S_selection)
        case "Fit me":  ///THIS RETURNS TRUE
          print "fit me baby one more time"
          break
      endswitch
      ret=1
      endif
      break
  endswitch
  return ret
end

So it seems that while the popup menu contains just one item, the string "Fit me!", s_selection seems to return "Fit me", without the exclamation point.

 

Is this a bug? I haven't tested it with other non alphanumeric variables.

 

Your menu item ends with "!", which is a special character in a menu (it adds a check mark to the menu item). This is described in:

DisplayHelpTopic "Special Characters in Menu Item Strings"

You can get the behavior you expect if you tell Igor to turn off special character interpretation using this command instead of the one you were using:

popupContextualMenu/C=(hs.mouseLoc.h, hs.mouseLoc.v) "\\M0Fit me!;"

For more details, execute:

DisplayHelpTopic "Enabling and Disabling Special Character Interpretation"