diff options
author | rsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-03 20:10:41 +0000 |
---|---|---|
committer | rsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-03 20:10:41 +0000 |
commit | 9c3ad87fcb8e2cf422aeb11454bb22ef17b54129 (patch) | |
tree | 7187da6ff8ef872037f64a782e3db5dabb303a8e | |
parent | 210363ef5175e2d619d1aada3285bfa8c728fb04 (diff) | |
download | chromium_src-9c3ad87fcb8e2cf422aeb11454bb22ef17b54129.zip chromium_src-9c3ad87fcb8e2cf422aeb11454bb22ef17b54129.tar.gz chromium_src-9c3ad87fcb8e2cf422aeb11454bb22ef17b54129.tar.bz2 |
[Mac] Enable click-drag-release behavior in the Wrench menu's custom items.
XIB changes:
* Replace the edit item's segmented control with 3 buttons
* Make the root view of both items a MenuTrackedRootView
* Use the custom MenuTrackedButton for all the buttons
BUG=49356
TEST=Click open the Wrench menu, hold, and drag over the buttons and they perform their function.
Review URL: http://codereview.chromium.org/3072014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@54804 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/app/nibs/Toolbar.xib | 1080 | ||||
-rw-r--r-- | chrome/browser/cocoa/menu_tracked_button.h | 28 | ||||
-rw-r--r-- | chrome/browser/cocoa/menu_tracked_button.mm | 32 | ||||
-rw-r--r-- | chrome/browser/cocoa/menu_tracked_button_unittest.mm | 117 | ||||
-rw-r--r-- | chrome/browser/cocoa/menu_tracked_root_view.h | 25 | ||||
-rw-r--r-- | chrome/browser/cocoa/menu_tracked_root_view.mm | 15 | ||||
-rw-r--r-- | chrome/browser/cocoa/menu_tracked_root_view_unittest.mm | 45 | ||||
-rw-r--r-- | chrome/browser/cocoa/wrench_menu_controller.h | 9 | ||||
-rw-r--r-- | chrome/browser/cocoa/wrench_menu_controller.mm | 65 | ||||
-rw-r--r-- | chrome/browser/cocoa/wrench_menu_controller_unittest.mm | 14 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 4 | ||||
-rw-r--r-- | chrome/chrome_tests.gypi | 2 |
12 files changed, 1273 insertions, 163 deletions
diff --git a/chrome/app/nibs/Toolbar.xib b/chrome/app/nibs/Toolbar.xib index c0d5f13..6c8e1b8 100644 --- a/chrome/app/nibs/Toolbar.xib +++ b/chrome/app/nibs/Toolbar.xib @@ -1,16 +1,20 @@ <?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03"> +<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10"> <data> <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">9L31a</string> - <string key="IBDocument.InterfaceBuilderVersion">677</string> - <string key="IBDocument.AppKitVersion">949.54</string> - <string key="IBDocument.HIToolboxVersion">353.00</string> + <string key="IBDocument.SystemVersion">10F569</string> + <string key="IBDocument.InterfaceBuilderVersion">762</string> + <string key="IBDocument.AppKitVersion">1038.29</string> + <string key="IBDocument.HIToolboxVersion">461.00</string> + <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="NS.object.0">762</string> + </object> <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="208"/> - <integer value="156"/> <integer value="1"/> + <integer value="208"/> + <integer value="211"/> </object> <object class="NSArray" key="IBDocument.PluginDependencies"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -18,7 +22,7 @@ </object> <object class="NSMutableDictionary" key="IBDocument.Metadata"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> + <object class="NSArray" key="dict.sortedKeys" id="0"> <bool key="EncodedWithXMLCoder">YES</bool> </object> <object class="NSMutableArray" key="dict.values"> @@ -61,7 +65,7 @@ <string key="NSContents">chromium.org</string> <object class="NSFont" key="NSSupport" id="654028904"> <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.300000e+01</double> + <double key="NSSize">13</double> <int key="NSfFlags">16</int> </object> <reference key="NSControlView" ref="535508469"/> @@ -99,7 +103,7 @@ <string key="NSContents"/> <object class="NSFont" key="NSSupport" id="64724822"> <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.300000e+01</double> + <double key="NSSize">13</double> <int key="NSfFlags">1044</int> </object> <reference key="NSControlView" ref="368496192"/> @@ -240,7 +244,6 @@ <int key="NSvFlags">270</int> <string key="NSFrame">{{17, 20}, {73, 17}}</string> <reference key="NSSuperview" ref="685460050"/> - <reference key="NSNextKeyView" ref="311802185"/> <bool key="NSEnabled">YES</bool> <object class="NSTextFieldCell" key="NSCell" id="881623077"> <int key="NSCellFlags">68288064</int> @@ -254,7 +257,7 @@ <string key="NSColorName">controlColor</string> <object class="NSColor" key="NSColor"> <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes> + <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes> </object> </object> <object class="NSColor" key="NSTextColor" id="722572692"> @@ -270,48 +273,88 @@ <reference key="NSSuperview" ref="974949794"/> <string key="NSClassName">GTMWidthBasedTweaker</string> </object> - <object class="NSSegmentedControl" id="311802185"> + <object class="NSCustomView" id="192185985"> <reference key="NSNextResponder" ref="974949794"/> <int key="NSvFlags">265</int> - <string key="NSFrame">{{134, 0}, {126, 21}}</string> - <reference key="NSSuperview" ref="974949794"/> - <bool key="NSEnabled">YES</bool> - <object class="NSSegmentedCell" key="NSCell" id="208223583"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">131072</int> - <object class="NSFont" key="NSSupport" id="26"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.100000e+01</double> - <int key="NSfFlags">3100</int> - </object> - <reference key="NSControlView" ref="311802185"/> - <object class="NSMutableArray" key="NSSegmentImages"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSSegmentItem"> - <string key="NSSegmentItemLabel">^IDS_CUT</string> - <int key="NSSegmentItemTag">36000</int> - <int key="NSSegmentItemImageScaling">0</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSButton" id="561116462"> + <reference key="NSNextResponder" ref="192185985"/> + <int key="NSvFlags">297</int> + <string key="NSFrame">{{91, 38}, {43, 21}}</string> + <reference key="NSSuperview" ref="192185985"/> + <int key="NSTag">36003</int> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="129505148"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134348800</int> + <string key="NSContents">^IDS_PASTE</string> + <object class="NSFont" key="NSSupport" id="26"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">11</double> + <int key="NSfFlags">3100</int> + </object> + <reference key="NSControlView" ref="561116462"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">162</int> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> </object> - <object class="NSSegmentItem"> - <string key="NSSegmentItemLabel">^IDS_COPY</string> - <int key="NSSegmentItemTag">36001</int> - <int key="NSSegmentItemImageScaling">0</int> + </object> + <object class="NSButton" id="924346418"> + <reference key="NSNextResponder" ref="192185985"/> + <int key="NSvFlags">297</int> + <string key="NSFrame">{{50, 38}, {43, 21}}</string> + <reference key="NSSuperview" ref="192185985"/> + <int key="NSTag">36001</int> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="273339899"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134348800</int> + <string key="NSContents">^IDS_COPY</string> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="924346418"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">162</int> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> </object> - <object class="NSSegmentItem"> - <string key="NSSegmentItemLabel">^IDS_PASTE</string> - <int key="NSSegmentItemTag">36003</int> - <int key="NSSegmentItemImageScaling">0</int> + </object> + <object class="NSButton" id="157954857"> + <reference key="NSNextResponder" ref="192185985"/> + <int key="NSvFlags">297</int> + <string key="NSFrame">{{9, 38}, {43, 21}}</string> + <reference key="NSSuperview" ref="192185985"/> + <int key="NSTag">36000</int> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="46853127"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134348800</int> + <string key="NSContents">^IDS_CUT</string> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="157954857"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">162</int> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> </object> </object> - <int key="NSTrackingMode">2</int> - <int key="NSSegmentStyle">6</int> </object> + <string key="NSFrame">{{126, -38}, {149, 59}}</string> + <reference key="NSSuperview" ref="974949794"/> + <string key="NSClassName">NSView</string> </object> </object> <string key="NSFrameSize">{275, 20}</string> <reference key="NSSuperview"/> <reference key="NSNextKeyView" ref="950178043"/> - <string key="NSClassName">NSView</string> + <string key="NSClassName">MenuTrackedRootView</string> </object> <object class="NSCustomView" id="388169352"> <reference key="NSNextResponder"/> @@ -456,7 +499,7 @@ <string key="NSFrameSize">{275, 20}</string> <reference key="NSSuperview"/> <reference key="NSNextKeyView" ref="370565926"/> - <string key="NSClassName">NSView</string> + <string key="NSClassName">MenuTrackedRootView</string> </object> <object class="NSCustomObject" id="301580502"> <string key="NSClassName">WrenchMenuController</string> @@ -642,14 +685,6 @@ <int key="connectionID">195</int> </object> <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">editControl_</string> - <reference key="source" ref="301580502"/> - <reference key="destination" ref="311802185"/> - </object> - <int key="connectionID">196</int> - </object> - <object class="IBConnectionRecord"> <object class="IBActionConnection" key="connection"> <string key="label">dispatchWrenchMenuCommand:</string> <reference key="source" ref="301580502"/> @@ -674,14 +709,6 @@ <int key="connectionID">199</int> </object> <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">dispatchWrenchMenuCommand:</string> - <reference key="source" ref="301580502"/> - <reference key="destination" ref="311802185"/> - </object> - <int key="connectionID">200</int> - </object> - <object class="IBConnectionRecord"> <object class="IBOutletConnection" key="connection"> <string key="label">wrenchMenuController_</string> <reference key="source" ref="1001"/> @@ -691,14 +718,6 @@ </object> <object class="IBConnectionRecord"> <object class="IBOutletConnection" key="connection"> - <string key="label">viewToSlide_</string> - <reference key="source" ref="685460050"/> - <reference key="destination" ref="311802185"/> - </object> - <int key="connectionID">205</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> <string key="label">viewToResize_</string> <reference key="source" ref="685460050"/> <reference key="destination" ref="974949794"/> @@ -721,34 +740,88 @@ </object> <int key="connectionID">210</int> </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">dispatchWrenchMenuCommand:</string> + <reference key="source" ref="301580502"/> + <reference key="destination" ref="157954857"/> + </object> + <int key="connectionID">218</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">dispatchWrenchMenuCommand:</string> + <reference key="source" ref="301580502"/> + <reference key="destination" ref="924346418"/> + </object> + <int key="connectionID">219</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">dispatchWrenchMenuCommand:</string> + <reference key="source" ref="301580502"/> + <reference key="destination" ref="561116462"/> + </object> + <int key="connectionID">220</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">editCut_</string> + <reference key="source" ref="301580502"/> + <reference key="destination" ref="157954857"/> + </object> + <int key="connectionID">221</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">editCopy_</string> + <reference key="source" ref="301580502"/> + <reference key="destination" ref="924346418"/> + </object> + <int key="connectionID">222</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">editPaste_</string> + <reference key="source" ref="301580502"/> + <reference key="destination" ref="561116462"/> + </object> + <int key="connectionID">223</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">viewToSlide_</string> + <reference key="source" ref="685460050"/> + <reference key="destination" ref="192185985"/> + </object> + <int key="connectionID">224</int> + </object> </object> <object class="IBMutableOrderedSet" key="objectRecords"> <object class="NSArray" key="orderedObjects"> <bool key="EncodedWithXMLCoder">YES</bool> <object class="IBObjectRecord"> <int key="objectID">0</int> - <object class="NSArray" key="object" id="806568350"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> + <reference key="object" ref="0"/> <reference key="children" ref="1000"/> <nil key="parent"/> </object> <object class="IBObjectRecord"> <int key="objectID">-2</int> <reference key="object" ref="1001"/> - <reference key="parent" ref="806568350"/> - <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string> + <reference key="parent" ref="0"/> + <string key="objectName">File's Owner</string> </object> <object class="IBObjectRecord"> <int key="objectID">-1</int> <reference key="object" ref="1003"/> - <reference key="parent" ref="806568350"/> + <reference key="parent" ref="0"/> <string key="objectName">First Responder</string> </object> <object class="IBObjectRecord"> <int key="objectID">-3</int> <reference key="object" ref="1004"/> - <reference key="parent" ref="806568350"/> + <reference key="parent" ref="0"/> <string key="objectName">Application</string> </object> <object class="IBObjectRecord"> @@ -764,7 +837,7 @@ <reference ref="421615633"/> <reference ref="602421009"/> </object> - <reference key="parent" ref="806568350"/> + <reference key="parent" ref="0"/> </object> <object class="IBObjectRecord"> <int key="objectID">2</int> @@ -853,12 +926,12 @@ <object class="IBObjectRecord"> <int key="objectID">122</int> <reference key="object" ref="1044322163"/> - <reference key="parent" ref="806568350"/> + <reference key="parent" ref="0"/> </object> <object class="IBObjectRecord"> <int key="objectID">130</int> <reference key="object" ref="306232897"/> - <reference key="parent" ref="806568350"/> + <reference key="parent" ref="0"/> </object> <object class="IBObjectRecord"> <int key="objectID">144</int> @@ -871,10 +944,10 @@ <reference key="object" ref="974949794"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="311802185"/> <reference ref="685460050"/> + <reference ref="192185985"/> </object> - <reference key="parent" ref="806568350"/> + <reference key="parent" ref="0"/> <string key="objectName">Wrench Menu - Edit Item</string> </object> <object class="IBObjectRecord"> @@ -885,27 +958,13 @@ <reference ref="38627075"/> <reference ref="1015660087"/> </object> - <reference key="parent" ref="806568350"/> + <reference key="parent" ref="0"/> <string key="objectName">Wrench Menu - Zoom Item</string> </object> <object class="IBObjectRecord"> - <int key="objectID">169</int> - <reference key="object" ref="311802185"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="208223583"/> - </object> - <reference key="parent" ref="974949794"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">170</int> - <reference key="object" ref="208223583"/> - <reference key="parent" ref="311802185"/> - </object> - <object class="IBObjectRecord"> <int key="objectID">189</int> <reference key="object" ref="301580502"/> - <reference key="parent" ref="806568350"/> + <reference key="parent" ref="0"/> </object> <object class="IBObjectRecord"> <int key="objectID">204</int> @@ -1021,11 +1080,64 @@ <reference key="object" ref="1052876110"/> <reference key="parent" ref="545855108"/> </object> + <object class="IBObjectRecord"> + <int key="objectID">211</int> + <reference key="object" ref="192185985"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="157954857"/> + <reference ref="924346418"/> + <reference ref="561116462"/> + </object> + <reference key="parent" ref="974949794"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">212</int> + <reference key="object" ref="157954857"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="46853127"/> + </object> + <reference key="parent" ref="192185985"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">213</int> + <reference key="object" ref="46853127"/> + <reference key="parent" ref="157954857"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">214</int> + <reference key="object" ref="924346418"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="273339899"/> + </object> + <reference key="parent" ref="192185985"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">215</int> + <reference key="object" ref="273339899"/> + <reference key="parent" ref="924346418"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">216</int> + <reference key="object" ref="561116462"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="129505148"/> + </object> + <reference key="parent" ref="192185985"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">217</int> + <reference key="object" ref="129505148"/> + <reference key="parent" ref="561116462"/> + </object> </object> </object> <object class="NSMutableDictionary" key="flattenedProperties"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> + <object class="NSArray" key="dict.sortedKeys"> <bool key="EncodedWithXMLCoder">YES</bool> <string>-1.IBPluginDependency</string> <string>-2.IBPluginDependency</string> @@ -1048,8 +1160,11 @@ <string>156.IBPluginDependency</string> <string>157.IBEditorWindowLastContentRect</string> <string>157.IBPluginDependency</string> + <string>159.CustomClassName</string> <string>159.IBPluginDependency</string> + <string>160.CustomClassName</string> <string>160.IBPluginDependency</string> + <string>161.CustomClassName</string> <string>161.IBPluginDependency</string> <string>162.IBPluginDependency</string> <string>163.IBPluginDependency</string> @@ -1057,10 +1172,6 @@ <string>165.IBPluginDependency</string> <string>166.IBPluginDependency</string> <string>168.IBPluginDependency</string> - <string>169.IBPluginDependency</string> - <string>170.IBNSSegmentedControlInspectorSelectedSegmentMetadataKey</string> - <string>170.IBPluginDependency</string> - <string>170.IBSegmentedControlInspectorSelectedSegmentMetadataKey</string> <string>171.IBPluginDependency</string> <string>186.IBPluginDependency</string> <string>187.IBPluginDependency</string> @@ -1068,6 +1179,16 @@ <string>2.CustomClassName</string> <string>2.IBAttributePlaceholdersKey</string> <string>2.IBPluginDependency</string> + <string>211.IBPluginDependency</string> + <string>212.CustomClassName</string> + <string>212.IBPluginDependency</string> + <string>213.IBPluginDependency</string> + <string>214.CustomClassName</string> + <string>214.IBPluginDependency</string> + <string>215.IBPluginDependency</string> + <string>216.CustomClassName</string> + <string>216.IBPluginDependency</string> + <string>217.IBPluginDependency</string> <string>3.CustomClassName</string> <string>3.IBAttributePlaceholdersKey</string> <string>3.IBPluginDependency</string> @@ -1109,8 +1230,11 @@ <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>{{644, 640}, {275, 20}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>MenuTrackedButton</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>MenuTrackedButton</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>MenuTrackedButton</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> @@ -1119,10 +1243,6 @@ <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <integer value="0" id="8"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="8"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> @@ -1136,6 +1256,16 @@ </object> </object> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>MenuTrackedButton</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>MenuTrackedButton</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>MenuTrackedButton</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>ReloadButton</string> <object class="NSMutableDictionary"> <string key="NS.key.0">ToolTip</string> @@ -1185,9 +1315,7 @@ </object> <object class="NSMutableDictionary" key="unlocalizedProperties"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> + <reference key="dict.sortedKeys" ref="0"/> <object class="NSMutableArray" key="dict.values"> <bool key="EncodedWithXMLCoder">YES</bool> </object> @@ -1195,15 +1323,13 @@ <nil key="activeLocalization"/> <object class="NSMutableDictionary" key="localizations"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> + <reference key="dict.sortedKeys" ref="0"/> <object class="NSMutableArray" key="dict.values"> <bool key="EncodedWithXMLCoder">YES</bool> </object> </object> <nil key="sourceID"/> - <int key="maxID">210</int> + <int key="maxID">224</int> </object> <object class="IBClassDescriber" key="IBDocument.Classes"> <object class="NSMutableArray" key="referencedPartialClassDescriptions"> @@ -1273,7 +1399,7 @@ <string key="superclassName">NSObject</string> <object class="NSMutableDictionary" key="actions"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> + <object class="NSArray" key="dict.sortedKeys"> <bool key="EncodedWithXMLCoder">YES</bool> <string>commandDispatch:</string> <string>commandDispatchUsingKeyModifiers:</string> @@ -1294,7 +1420,7 @@ <string key="superclassName">NSObject</string> <object class="NSMutableDictionary" key="outlets"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> + <object class="NSArray" key="dict.sortedKeys"> <bool key="EncodedWithXMLCoder">YES</bool> <string>otherObjectToLocalize_</string> <string>owner_</string> @@ -1317,7 +1443,7 @@ <string key="superclassName">NSView</string> <object class="NSMutableDictionary" key="outlets"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> + <object class="NSArray" key="dict.sortedKeys"> <bool key="EncodedWithXMLCoder">YES</bool> <string>viewToResize_</string> <string>viewToSlideAndResize_</string> @@ -1364,6 +1490,22 @@ </object> </object> <object class="IBPartialClassDescription"> + <string key="className">MenuTrackedButton</string> + <string key="superclassName">NSButton</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">browser/cocoa/menu_tracked_button.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">MenuTrackedRootView</string> + <string key="superclassName">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">browser/cocoa/menu_tracked_root_view.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> <string key="className">NSObject</string> <object class="IBClassDescriptionSource" key="sourceIdentifier"> <string key="majorKey">IBProjectSource</string> @@ -1427,7 +1569,7 @@ <string key="superclassName">NSViewController</string> <object class="NSMutableDictionary" key="outlets"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> + <object class="NSArray" key="dict.sortedKeys"> <bool key="EncodedWithXMLCoder">YES</bool> <string>backButton_</string> <string>browserActionsContainerView_</string> @@ -1482,10 +1624,12 @@ </object> <object class="NSMutableDictionary" key="outlets"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> + <object class="NSArray" key="dict.sortedKeys"> <bool key="EncodedWithXMLCoder">YES</bool> - <string>editControl_</string> + <string>editCopy_</string> + <string>editCut_</string> <string>editItem_</string> + <string>editPaste_</string> <string>zoomDisplay_</string> <string>zoomFullScreen_</string> <string>zoomItem_</string> @@ -1494,11 +1638,13 @@ </object> <object class="NSMutableArray" key="dict.values"> <bool key="EncodedWithXMLCoder">YES</bool> - <string>NSSegmentedControl</string> - <string>NSView</string> <string>NSButton</string> <string>NSButton</string> - <string>NSView</string> + <string>MenuTrackedRootView</string> + <string>NSButton</string> + <string>NSButton</string> + <string>NSButton</string> + <string>MenuTrackedRootView</string> <string>NSButton</string> <string>NSButton</string> </object> @@ -1509,9 +1655,703 @@ </object> </object> </object> + <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBPartialClassDescription"> + <string key="className">NSActionCell</string> + <string key="superclassName">NSCell</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <string key="superclassName">NSResponder</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="234639029"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSApplication.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="656281629"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="877248804"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSButton</string> + <string key="superclassName">NSControl</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSButton.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSButtonCell</string> + <string key="superclassName">NSActionCell</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSCell</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSControl</string> + <string key="superclassName">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="382180238"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSControl.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSController</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSController.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSFormatter</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSMenu</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="628259896"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSMenu.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AddressBook.framework/Headers/ABActions.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSAlert.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSAnimation.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="234639029"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="656281629"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSBrowser.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="877248804"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSComboBox.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSComboBoxCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="382180238"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDatePickerCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDragging.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSImage.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="628259896"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSRuleEditor.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSSound.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSSpeechRecognizer.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSSpeechSynthesizer.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSSplitView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTabView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTableView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSText.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTextStorage.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTextView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTokenField.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTokenFieldCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSToolbar.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="349778705"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSWindow.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSConnection.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSError.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSMetadata.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSNetServices.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSObject.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSPort.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSSpellServer.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSStream.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSThread.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSURL.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSXMLParser.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Print.framework/Headers/PDEPluginInterface.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">SecurityInterface.framework/Headers/SFAuthorizationView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">SecurityInterface.framework/Headers/SFCertificatePanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">SecurityInterface.framework/Headers/SFChooseIdentityPanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSResponder</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSResponder</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSResponder.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSTextField</string> + <string key="superclassName">NSControl</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTextField.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSTextFieldCell</string> + <string key="superclassName">NSActionCell</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSUserDefaultsController</string> + <string key="superclassName">NSController</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSUserDefaultsController.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSClipView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <string key="superclassName">NSResponder</string> + <reference key="sourceIdentifier" ref="349778705"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSViewController</string> + <string key="superclassName">NSResponder</string> + <object class="NSMutableDictionary" key="outlets"> + <string key="NS.key.0">view</string> + <string key="NS.object.0">NSView</string> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSViewController.h</string> + </object> + </object> + </object> </object> <int key="IBDocument.localizationMode">0</int> + <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> + <integer value="1050" key="NS.object.0"/> + </object> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> + <integer value="1050" key="NS.object.0"/> + </object> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string> + <integer value="3000" key="NS.object.0"/> + </object> + <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> <string key="IBDocument.LastKnownRelativeProjectPath">../../chrome.xcodeproj</string> <int key="IBDocument.defaultPropertyAccessControl">3</int> + <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>NSActionTemplate</string> + <string>NSAddTemplate</string> + <string>NSEnterFullScreenTemplate</string> + <string>NSRemoveTemplate</string> + <string>back_Template</string> + <string>forward_Template</string> + <string>home_Template</string> + <string>reload_Template</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>{15, 15}</string> + <string>{8, 8}</string> + <string>{16, 15}</string> + <string>{8, 8}</string> + <string>{19, 19}</string> + <string>{19, 19}</string> + <string>{19, 19}</string> + <string>{19, 19}</string> + </object> + </object> </data> </archive> diff --git a/chrome/browser/cocoa/menu_tracked_button.h b/chrome/browser/cocoa/menu_tracked_button.h new file mode 100644 index 0000000..df42255 --- /dev/null +++ b/chrome/browser/cocoa/menu_tracked_button.h @@ -0,0 +1,28 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_COCOA_MENU_TRACKED_BUTTON_H_ +#define CHROME_BROWSER_COCOA_MENU_TRACKED_BUTTON_H_ +#pragma once + +#import <Cocoa/Cocoa.h> + +// A MenuTrackedButton is meant to be used whenever a button is placed inside +// the custom view of an NSMenuItem. If the user opens the menu in a non-sticky +// fashion (i.e. clicks, holds, and drags) and then releases the mouse over +// a MenuTrackedButton, it will |-performClick:| itself. +@interface MenuTrackedButton : NSButton { + @private + // If the button received a |-mouseEntered:| event. This short-circuits the + // custom drag tracking logic. + BOOL didEnter_; + + // Whether or not the user is in a click-drag-release event sequence. If so + // and this receives a |-mouseUp:|, then this will click itself. + BOOL tracking_; +} + +@end + +#endif // CHROME_BROWSER_COCOA_MENU_TRACKED_BUTTON_H_ diff --git a/chrome/browser/cocoa/menu_tracked_button.mm b/chrome/browser/cocoa/menu_tracked_button.mm new file mode 100644 index 0000000..654e850 --- /dev/null +++ b/chrome/browser/cocoa/menu_tracked_button.mm @@ -0,0 +1,32 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "chrome/browser/cocoa/menu_tracked_button.h" + +@implementation MenuTrackedButton + +- (void)mouseEntered:(NSEvent*)theEvent { + didEnter_ = YES; + [super mouseEntered:theEvent]; +} + +- (void)mouseExited:(NSEvent*)theEvent { + didEnter_ = NO; + tracking_ = NO; + [super mouseExited:theEvent]; +} + +- (void)mouseDragged:(NSEvent*)theEvent { + tracking_ = !didEnter_; + [super mouseDragged:theEvent]; +} + +- (void)mouseUp:(NSEvent*)theEvent { + if (!tracking_) { + return [super mouseUp:theEvent]; + } + [self performClick:self]; +} + +@end diff --git a/chrome/browser/cocoa/menu_tracked_button_unittest.mm b/chrome/browser/cocoa/menu_tracked_button_unittest.mm new file mode 100644 index 0000000..b900db6 --- /dev/null +++ b/chrome/browser/cocoa/menu_tracked_button_unittest.mm @@ -0,0 +1,117 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import <Cocoa/Cocoa.h> + +#include "base/scoped_nsobject.h" +#import "chrome/browser/cocoa/cocoa_test_helper.h" +#import "chrome/browser/cocoa/menu_tracked_button.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/platform_test.h" + +// This test does not test what you'd think it does. Testing around event +// tracking run loops is probably not worh the effort when the size of the +// helper MakeEvent() is larger than the class being tested. If we ever figure +// out a good way to test event tracking, this should be revisited. + +@interface MenuTrackedButtonTestReceiver : NSObject { + @public + BOOL didThat_; +} +- (void)doThat:(id)sender; +@end +@implementation MenuTrackedButtonTestReceiver +- (void)doThat:(id)sender { + didThat_ = YES; +} +@end + + +class MenuTrackedButtonTest : public CocoaTest { + public: + MenuTrackedButtonTest() : event_number_(0) {} + + void SetUp() { + listener_.reset([[MenuTrackedButtonTestReceiver alloc] init]); + button_.reset( + [[MenuTrackedButton alloc] initWithFrame:NSMakeRect(10, 10, 50, 50)]); + [[test_window() contentView] addSubview:button()]; + [button_ setTarget:listener()]; + [button_ setAction:@selector(doThat:)]; + } + + // Creates an event of |type|, with |location| in test_window()'s coordinates. + NSEvent* MakeEvent(NSEventType type, NSPoint location) { + NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate]; + location = [test_window() convertBaseToScreen:location]; + if (type == NSMouseEntered || type == NSMouseExited) { + return [NSEvent enterExitEventWithType:type + location:location + modifierFlags:0 + timestamp:now + windowNumber:[test_window() windowNumber] + context:nil + eventNumber:event_number_++ + trackingNumber:0 + userData:nil]; + } else { + return [NSEvent mouseEventWithType:type + location:location + modifierFlags:0 + timestamp:now + windowNumber:[test_window() windowNumber] + context:nil + eventNumber:event_number_++ + clickCount:1 + pressure:1.0]; + } + } + + MenuTrackedButtonTestReceiver* listener() { return listener_.get(); } + NSButton* button() { return button_.get(); } + + scoped_nsobject<MenuTrackedButtonTestReceiver> listener_; + scoped_nsobject<MenuTrackedButton> button_; + NSInteger event_number_; +}; + +// User mouses over and then off. +TEST_F(MenuTrackedButtonTest, DISABLED_EnterExit) { + [NSApp postEvent:MakeEvent(NSMouseEntered, NSMakePoint(11, 11)) atStart:YES]; + [NSApp postEvent:MakeEvent(NSMouseExited, NSMakePoint(9, 9)) atStart:YES]; + EXPECT_FALSE(listener()->didThat_); +} + +// User mouses over, clicks, drags, and exits. +TEST_F(MenuTrackedButtonTest, DISABLED_EnterDragExit) { + [NSApp postEvent:MakeEvent(NSMouseEntered, NSMakePoint(11, 11)) atStart:YES]; + [NSApp postEvent:MakeEvent(NSLeftMouseDown, NSMakePoint(12, 12)) atStart:YES]; + [NSApp postEvent:MakeEvent(NSLeftMouseDragged, NSMakePoint(13, 11)) + atStart:YES]; + [NSApp postEvent:MakeEvent(NSLeftMouseDragged, NSMakePoint(13, 10)) + atStart:YES]; + [NSApp postEvent:MakeEvent(NSMouseExited, NSMakePoint(13, 9)) atStart:YES]; + EXPECT_FALSE(listener()->didThat_); +} + +// User mouses over, clicks, drags, and releases. +TEST_F(MenuTrackedButtonTest, DISABLED_EnterDragUp) { + [NSApp postEvent:MakeEvent(NSMouseEntered, NSMakePoint(11, 11)) atStart:YES]; + [NSApp postEvent:MakeEvent(NSLeftMouseDown, NSMakePoint(12, 12)) atStart:YES]; + [NSApp postEvent:MakeEvent(NSLeftMouseDragged, NSMakePoint(13, 13)) + atStart:YES]; + [NSApp postEvent:MakeEvent(NSLeftMouseUp, NSMakePoint(14, 14)) atStart:YES]; + EXPECT_TRUE(listener()->didThat_); +} + +// User drags in and releases. +TEST_F(MenuTrackedButtonTest, DISABLED_DragUp) { + [NSApp postEvent:MakeEvent(NSLeftMouseDragged, NSMakePoint(11, 11)) + atStart:YES]; + [NSApp postEvent:MakeEvent(NSLeftMouseDragged, NSMakePoint(12, 12)) + atStart:YES]; + [NSApp postEvent:MakeEvent(NSLeftMouseUp, NSMakePoint(13, 13)) + atStart:YES]; + EXPECT_TRUE(listener()->didThat_); +} diff --git a/chrome/browser/cocoa/menu_tracked_root_view.h b/chrome/browser/cocoa/menu_tracked_root_view.h new file mode 100644 index 0000000..6d4bffa --- /dev/null +++ b/chrome/browser/cocoa/menu_tracked_root_view.h @@ -0,0 +1,25 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_COCOA_MENU_TRACKED_ROOT_VIEW_H_ +#define CHROME_BROWSER_COCOA_MENU_TRACKED_ROOT_VIEW_H_ +#pragma once + +#import <Cocoa/Cocoa.h> + +// An instance of MenuTrackedRootView should be the root of the view hierarchy +// of the custom view of NSMenuItems. If the user opens the menu in a non- +// sticky fashion (i.e. clicks, holds, and drags) and then releases the mouse +// over the menu item, it will cancel tracking on the |[menuItem_ menu]|. +@interface MenuTrackedRootView : NSView { + @private + // The menu item whose custom view's root view is an instance of this class. + NSMenuItem* menuItem_; // weak +} + +@property (assign, nonatomic) NSMenuItem* menuItem; + +@end + +#endif // CHROME_BROWSER_COCOA_MENU_TRACKED_ROOT_VIEW_H_ diff --git a/chrome/browser/cocoa/menu_tracked_root_view.mm b/chrome/browser/cocoa/menu_tracked_root_view.mm new file mode 100644 index 0000000..ef3c246 --- /dev/null +++ b/chrome/browser/cocoa/menu_tracked_root_view.mm @@ -0,0 +1,15 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "chrome/browser/cocoa/menu_tracked_root_view.h" + +@implementation MenuTrackedRootView + +@synthesize menuItem = menuItem_; + +- (void)mouseUp:(NSEvent*)theEvent { + [[menuItem_ menu] cancelTracking]; +} + +@end diff --git a/chrome/browser/cocoa/menu_tracked_root_view_unittest.mm b/chrome/browser/cocoa/menu_tracked_root_view_unittest.mm new file mode 100644 index 0000000..f2e5f2c --- /dev/null +++ b/chrome/browser/cocoa/menu_tracked_root_view_unittest.mm @@ -0,0 +1,45 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import <Cocoa/Cocoa.h> + +#include "base/scoped_nsobject.h" +#import "chrome/browser/cocoa/cocoa_test_helper.h" +#import "chrome/browser/cocoa/menu_tracked_root_view.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/platform_test.h" +#import "third_party/ocmock/OCMock/OCMock.h" + +class MenuTrackedRootViewTest : public CocoaTest { + public: + void SetUp() { + CocoaTest::SetUp(); + view_.reset([[MenuTrackedRootView alloc] init]); + } + + scoped_nsobject<MenuTrackedRootView> view_; +}; + +TEST_F(MenuTrackedRootViewTest, MouseUp) { + id menu = [OCMockObject mockForClass:[NSMenu class]]; + [[menu expect] cancelTracking]; + + id menuItem = [OCMockObject mockForClass:[NSMenuItem class]]; + [[[menuItem stub] andReturn:menu] menu]; + + [view_ setMenuItem:menuItem]; + NSEvent* event = [NSEvent mouseEventWithType:NSLeftMouseUp + location:NSMakePoint(42, 42) + modifierFlags:0 + timestamp:0 + windowNumber:[test_window() windowNumber] + context:nil + eventNumber:1 + clickCount:1 + pressure:1.0]; + [view_ mouseUp:event]; + + [menu verify]; + [menuItem verify]; +} diff --git a/chrome/browser/cocoa/wrench_menu_controller.h b/chrome/browser/cocoa/wrench_menu_controller.h index 242848d..fc6801c 100644 --- a/chrome/browser/cocoa/wrench_menu_controller.h +++ b/chrome/browser/cocoa/wrench_menu_controller.h @@ -11,6 +11,7 @@ #import "base/cocoa_protocols_mac.h" #import "chrome/browser/cocoa/menu_controller.h" +@class MenuTrackedRootView; @class ToolbarController; class WrenchMenuModel; @@ -23,10 +24,12 @@ class WrenchMenuModel; // This object is instantiated in Toolbar.xib and is configured by the // ToolbarController. @interface WrenchMenuController : MenuController<NSMenuDelegate> { - IBOutlet NSView* editItem_; - IBOutlet NSSegmentedControl* editControl_; + IBOutlet MenuTrackedRootView* editItem_; + IBOutlet NSButton* editCut_; + IBOutlet NSButton* editCopy_; + IBOutlet NSButton* editPaste_; - IBOutlet NSView* zoomItem_; + IBOutlet MenuTrackedRootView* zoomItem_; IBOutlet NSButton* zoomPlus_; IBOutlet NSButton* zoomDisplay_; IBOutlet NSButton* zoomMinus_; diff --git a/chrome/browser/cocoa/wrench_menu_controller.mm b/chrome/browser/cocoa/wrench_menu_controller.mm index fca4d04..28553fe 100644 --- a/chrome/browser/cocoa/wrench_menu_controller.mm +++ b/chrome/browser/cocoa/wrench_menu_controller.mm @@ -9,6 +9,7 @@ #include "chrome/app/chrome_dll_resource.h" #include "chrome/browser/browser.h" #include "chrome/browser/browser_window.h" +#import "chrome/browser/cocoa/menu_tracked_root_view.h" #import "chrome/browser/cocoa/toolbar_controller.h" #include "chrome/browser/wrench_menu_model.h" @@ -48,10 +49,12 @@ case IDC_EDIT_MENU: DCHECK(editItem_); [customItem setView:editItem_]; + [editItem_ setMenuItem:customItem]; break; case IDC_ZOOM_MENU: DCHECK(zoomItem_); [customItem setView:zoomItem_]; + [zoomItem_ setMenuItem:customItem]; break; default: NOTREACHED(); @@ -73,10 +76,10 @@ NSString* title = base::SysUTF16ToNSString( [self wrenchMenuModel]->GetLabelForCommandId(IDC_ZOOM_PERCENT_DISPLAY)); [[zoomItem_ viewWithTag:IDC_ZOOM_PERCENT_DISPLAY] setTitle:title]; + bool plusEnabled = [self wrenchMenuModel]->IsCommandIdEnabled(IDC_ZOOM_PLUS); bool minusEnabled = [self wrenchMenuModel]->IsCommandIdEnabled( IDC_ZOOM_MINUS); - [zoomPlus_ setEnabled:plusEnabled]; [zoomMinus_ setEnabled:minusEnabled]; @@ -92,12 +95,6 @@ // NSCarbonMenuWindow; this screws up the typical |-commandDispatch:| system. - (IBAction)dispatchWrenchMenuCommand:(id)sender { NSInteger tag = [sender tag]; - - // NSSegmentedControls (used for the Edit item) need a little help to get the - // command_id of the pressed item. - if ([sender isKindOfClass:[NSSegmentedControl class]]) - tag = [[sender cell] tagForSegment:[sender selectedSegment]]; - // The custom views within the Wrench menu are abnormal and keep the menu open // after a target-action. Close the menu manually. // TODO(rsesek): It'd be great if the zoom buttons didn't have to close the @@ -127,28 +124,44 @@ // Fit the localized strings into the Cut/Copy/Paste control, then resize the // whole menu item accordingly. - (void)adjustPositioning { + const CGFloat kButtonPadding = 12; + CGFloat delta = 0; + + // Go through the three buttons from right-to-left, adjusting the size to fit + // the localized strings while keeping them all aligned on their horizontal + // edges. + const size_t kAdjustViewCount = 3; + NSButton* views[kAdjustViewCount] = { editPaste_, editCopy_, editCut_ }; + for (size_t i = 0; i < kAdjustViewCount; ++i) { + NSButton* button = views[i]; + CGFloat originalWidth = NSWidth([button frame]); + + // Do not let |-sizeToFit| change the height of the button. + NSSize size = [button frame].size; + [button sizeToFit]; + size.width = [button frame].size.width + kButtonPadding; + [button setFrameSize:size]; + + CGFloat newWidth = size.width; + delta += newWidth - originalWidth; + + NSRect frame = [button frame]; + frame.origin.x -= delta; + [button setFrame:frame]; + } + + // Resize the menu item by the total amound the buttons changed so that the + // spacing between the buttons and the title remains the same. NSRect itemFrame = [editItem_ frame]; - NSRect controlFrame = [editControl_ frame]; - - CGFloat originalControlWidth = NSWidth(controlFrame); - // Maintain the carefully pixel-pushed gap between the edge of the menu and - // the rightmost control. - CGFloat edge = NSWidth(itemFrame) - - (controlFrame.origin.x + originalControlWidth); - - // Resize the edit segmented control to fit the localized strings. - [editControl_ sizeToFit]; - controlFrame = [editControl_ frame]; - CGFloat resizeAmount = NSWidth(controlFrame) - originalControlWidth; - - // Adjust the size of the entire menu item to account for changes in the size - // of the segmented control. - itemFrame.size.width += resizeAmount; + itemFrame.size.width += delta; [editItem_ setFrame:itemFrame]; - // Keep the spacing between the right edges of the menu and the control. - controlFrame.origin.x = NSWidth(itemFrame) - edge - NSWidth(controlFrame); - [editControl_ setFrame:controlFrame]; + // Also resize the superview of the buttons, which is an NSView used to slide + // when the item title is too big and GTM resizes it. + NSRect parentFrame = [[editCut_ superview] frame]; + parentFrame.size.width += delta; + parentFrame.origin.x -= delta; + [[editCut_ superview] setFrame:parentFrame]; } @end // @implementation WrenchMenuController diff --git a/chrome/browser/cocoa/wrench_menu_controller_unittest.mm b/chrome/browser/cocoa/wrench_menu_controller_unittest.mm index fbbf740..446bd80 100644 --- a/chrome/browser/cocoa/wrench_menu_controller_unittest.mm +++ b/chrome/browser/cocoa/wrench_menu_controller_unittest.mm @@ -81,18 +81,4 @@ TEST_F(WrenchMenuControllerTest, DispatchSimple) { [controller() dispatchWrenchMenuCommand:button.get()]; } -TEST_F(WrenchMenuControllerTest, DispatchSegmentedControl) { - // Set fake model to test dispatching. - EXPECT_CALL(fake_model_, ExecuteCommand(IDC_CUT)); - [controller() setModel:&fake_model_]; - - scoped_nsobject<NSSegmentedControl> control( - [[NSSegmentedControl alloc] init]); - [control setSegmentCount:2]; - [[control cell] setTag:IDC_CUT forSegment:0]; - [[control cell] setSelectedSegment:0]; - - [controller() dispatchWrenchMenuCommand:control.get()]; -} - } // namespace diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 6e434c6..150f0fd 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -927,6 +927,10 @@ 'browser/cocoa/menu_button.mm', 'browser/cocoa/menu_controller.h', 'browser/cocoa/menu_controller.mm', + 'browser/cocoa/menu_tracked_button.h', + 'browser/cocoa/menu_tracked_button.mm', + 'browser/cocoa/menu_tracked_root_view.h', + 'browser/cocoa/menu_tracked_root_view.mm', 'browser/cocoa/multi_key_equivalent_button.h', 'browser/cocoa/multi_key_equivalent_button.mm', 'browser/cocoa/new_tab_button.h', diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index a57a4ed..1b7ff71 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -859,6 +859,8 @@ 'browser/cocoa/location_bar/selected_keyword_decoration_unittest.mm', 'browser/cocoa/menu_button_unittest.mm', 'browser/cocoa/menu_controller_unittest.mm', + 'browser/cocoa/menu_tracked_button_unittest.mm', + 'browser/cocoa/menu_tracked_root_view_unittest.mm', 'browser/cocoa/notifications/balloon_controller_unittest.mm', 'browser/cocoa/nsimage_cache_unittest.mm', 'browser/cocoa/nsmenuitem_additions_unittest.mm', |