]> git.sesse.net Git - vlc/commitdiff
macosx: prepared fullscreen support and clean-up
authorFelix Paul Kühne <fkuehne@videolan.org>
Mon, 8 Aug 2011 19:01:31 +0000 (21:01 +0200)
committerFelix Paul Kühne <fkuehne@videolan.org>
Mon, 8 Aug 2011 19:02:36 +0000 (21:02 +0200)
extras/package/macosx/Resources/English.lproj/MainMenu.nib/designable.nib
extras/package/macosx/Resources/English.lproj/MainMenu.nib/keyedobjects.nib
modules/gui/macosx/CoreInteraction.m
modules/gui/macosx/MainMenu.h
modules/gui/macosx/MainMenu.m
modules/gui/macosx/MainWindow.h
modules/gui/macosx/MainWindow.m
modules/gui/macosx/controls.h
modules/gui/macosx/controls.m
modules/gui/macosx/intf.h
modules/gui/macosx/intf.m

index 26cff4b60a6e7f415f834818f47f90dc4387683c..e530effea5a4ba7d45bf61ea28f260f31b08e1b1 100644 (file)
@@ -2,9 +2,9 @@
 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
   <data>
     <int key="IBDocument.SystemTarget">1040</int>
-    <string key="IBDocument.SystemVersion">11A511a</string>
+    <string key="IBDocument.SystemVersion">11C26</string>
     <string key="IBDocument.InterfaceBuilderVersion">851</string>
-    <string key="IBDocument.AppKitVersion">1138</string>
+    <string key="IBDocument.AppKitVersion">1138.11</string>
     <string key="IBDocument.HIToolboxVersion">566.00</string>
     <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
       <bool key="EncodedWithXMLCoder">YES</bool>
     </object>
     <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
       <bool key="EncodedWithXMLCoder">YES</bool>
+      <integer value="283"/>
       <integer value="2730"/>
-      <integer value="1617"/>
       <integer value="4596"/>
+      <integer value="1617"/>
+      <integer value="4722"/>
       <integer value="915"/>
-      <integer value="283"/>
-      <integer value="24"/>
+      <integer value="334"/>
       <integer value="4682"/>
-      <integer value="4722"/>
     </object>
     <object class="NSArray" key="IBDocument.PluginDependencies">
       <bool key="EncodedWithXMLCoder">YES</bool>
@@ -4698,54 +4698,6 @@ LCAuLi4</string>
           </object>
           <int key="connectionID">1187</int>
         </object>
-        <object class="IBConnectionRecord">
-          <object class="IBActionConnection" key="connection">
-            <string key="label">windowAction:</string>
-            <reference key="source" ref="113811151"/>
-            <reference key="destination" ref="306486441"/>
-          </object>
-          <int key="connectionID">1502</int>
-        </object>
-        <object class="IBConnectionRecord">
-          <object class="IBActionConnection" key="connection">
-            <string key="label">windowAction:</string>
-            <reference key="source" ref="113811151"/>
-            <reference key="destination" ref="848898341"/>
-          </object>
-          <int key="connectionID">1503</int>
-        </object>
-        <object class="IBConnectionRecord">
-          <object class="IBActionConnection" key="connection">
-            <string key="label">windowAction:</string>
-            <reference key="source" ref="113811151"/>
-            <reference key="destination" ref="633479871"/>
-          </object>
-          <int key="connectionID">1504</int>
-        </object>
-        <object class="IBConnectionRecord">
-          <object class="IBActionConnection" key="connection">
-            <string key="label">windowAction:</string>
-            <reference key="source" ref="113811151"/>
-            <reference key="destination" ref="606474125"/>
-          </object>
-          <int key="connectionID">1505</int>
-        </object>
-        <object class="IBConnectionRecord">
-          <object class="IBActionConnection" key="connection">
-            <string key="label">windowAction:</string>
-            <reference key="source" ref="113811151"/>
-            <reference key="destination" ref="898223493"/>
-          </object>
-          <int key="connectionID">1506</int>
-        </object>
-        <object class="IBConnectionRecord">
-          <object class="IBActionConnection" key="connection">
-            <string key="label">windowAction:</string>
-            <reference key="source" ref="113811151"/>
-            <reference key="destination" ref="115305473"/>
-          </object>
-          <int key="connectionID">1520</int>
-        </object>
         <object class="IBConnectionRecord">
           <object class="IBActionConnection" key="connection">
             <string key="label">random:</string>
@@ -4930,14 +4882,6 @@ LCAuLi4</string>
           </object>
           <int key="connectionID">2246</int>
         </object>
-        <object class="IBConnectionRecord">
-          <object class="IBActionConnection" key="connection">
-            <string key="label">windowAction:</string>
-            <reference key="source" ref="113811151"/>
-            <reference key="destination" ref="288132578"/>
-          </object>
-          <int key="connectionID">2252</int>
-        </object>
         <object class="IBConnectionRecord">
           <object class="IBOutletConnection" key="connection">
             <string key="label">o_mi_services</string>
@@ -5154,14 +5098,6 @@ LCAuLi4</string>
           </object>
           <int key="connectionID">2727</int>
         </object>
-        <object class="IBConnectionRecord">
-          <object class="IBActionConnection" key="connection">
-            <string key="label">windowAction:</string>
-            <reference key="source" ref="113811151"/>
-            <reference key="destination" ref="788765547"/>
-          </object>
-          <int key="connectionID">2735</int>
-        </object>
         <object class="IBConnectionRecord">
           <object class="IBActionConnection" key="connection">
             <string key="label">play:</string>
@@ -5218,14 +5154,6 @@ LCAuLi4</string>
           </object>
           <int key="connectionID">2753</int>
         </object>
-        <object class="IBConnectionRecord">
-          <object class="IBActionConnection" key="connection">
-            <string key="label">windowAction:</string>
-            <reference key="source" ref="113811151"/>
-            <reference key="destination" ref="1070274380"/>
-          </object>
-          <int key="connectionID">2754</int>
-        </object>
         <object class="IBConnectionRecord">
           <object class="IBActionConnection" key="connection">
             <string key="label">showMessagesPanel:</string>
@@ -7186,6 +7114,78 @@ LCAuLi4</string>
           </object>
           <int key="connectionID">4738</int>
         </object>
+        <object class="IBConnectionRecord">
+          <object class="IBActionConnection" key="connection">
+            <string key="label">resizeVideoWindow:</string>
+            <reference key="source" ref="651263286"/>
+            <reference key="destination" ref="306486441"/>
+          </object>
+          <int key="connectionID">4741</int>
+        </object>
+        <object class="IBConnectionRecord">
+          <object class="IBActionConnection" key="connection">
+            <string key="label">resizeVideoWindow:</string>
+            <reference key="source" ref="651263286"/>
+            <reference key="destination" ref="848898341"/>
+          </object>
+          <int key="connectionID">4742</int>
+        </object>
+        <object class="IBConnectionRecord">
+          <object class="IBActionConnection" key="connection">
+            <string key="label">resizeVideoWindow:</string>
+            <reference key="source" ref="651263286"/>
+            <reference key="destination" ref="633479871"/>
+          </object>
+          <int key="connectionID">4743</int>
+        </object>
+        <object class="IBConnectionRecord">
+          <object class="IBActionConnection" key="connection">
+            <string key="label">resizeVideoWindow:</string>
+            <reference key="source" ref="651263286"/>
+            <reference key="destination" ref="115305473"/>
+          </object>
+          <int key="connectionID">4744</int>
+        </object>
+        <object class="IBConnectionRecord">
+          <object class="IBActionConnection" key="connection">
+            <string key="label">toggleFullscreen:</string>
+            <reference key="source" ref="651263286"/>
+            <reference key="destination" ref="606474125"/>
+          </object>
+          <int key="connectionID">4745</int>
+        </object>
+        <object class="IBConnectionRecord">
+          <object class="IBActionConnection" key="connection">
+            <string key="label">floatOnTop:</string>
+            <reference key="source" ref="651263286"/>
+            <reference key="destination" ref="898223493"/>
+          </object>
+          <int key="connectionID">4746</int>
+        </object>
+        <object class="IBConnectionRecord">
+          <object class="IBActionConnection" key="connection">
+            <string key="label">createVideoSnapshot:</string>
+            <reference key="source" ref="651263286"/>
+            <reference key="destination" ref="288132578"/>
+          </object>
+          <int key="connectionID">4747</int>
+        </object>
+        <object class="IBConnectionRecord">
+          <object class="IBActionConnection" key="connection">
+            <string key="label">toggleFullscreen:</string>
+            <reference key="source" ref="651263286"/>
+            <reference key="destination" ref="788765547"/>
+          </object>
+          <int key="connectionID">4748</int>
+        </object>
+        <object class="IBConnectionRecord">
+          <object class="IBActionConnection" key="connection">
+            <string key="label">createVideoSnapshot:</string>
+            <reference key="source" ref="651263286"/>
+            <reference key="destination" ref="1070274380"/>
+          </object>
+          <int key="connectionID">4749</int>
+        </object>
       </object>
       <object class="IBMutableOrderedSet" key="objectRecords">
         <object class="NSArray" key="orderedObjects">
@@ -11028,14 +11028,14 @@ LCAuLi4</string>
           <boolean value="YES"/>
           <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
           <boolean value="YES"/>
-          <string>{{373, 736}, {468, 20}}</string>
+          <string>{{85, 668}, {468, 20}}</string>
           <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
           <boolean value="YES"/>
           <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
           <boolean value="YES"/>
           <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
           <boolean value="YES"/>
-          <string>{{608, 373}, {208, 363}}</string>
+          <string>{{364, 305}, {208, 363}}</string>
           <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
           <boolean value="YES"/>
           <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -11448,7 +11448,7 @@ LCAuLi4</string>
         </object>
       </object>
       <nil key="sourceID"/>
-      <int key="maxID">4740</int>
+      <int key="maxID">4749</int>
     </object>
     <object class="IBClassDescriber" key="IBDocument.Classes">
       <object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -14169,38 +14169,1203 @@ LCAuLi4</string>
       <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.1+">
         <bool key="EncodedWithXMLCoder">YES</bool>
         <object class="IBPartialClassDescription">
-          <string key="className">NSObject</string>
-          <object class="IBClassDescriptionSource" key="sourceIdentifier" id="647024034">
-            <string key="majorKey">IBDocumentRelativeSource</string>
-            <string key="minorKey">../../../../contrib/hosts/x86_64-apple-darwin10/Sparkle/Sparkle.framework/Headers/SUUpdater.h</string>
-          </object>
-        </object>
-        <object class="IBPartialClassDescription">
-          <string key="className">SUUpdater</string>
+          <string key="className">VLCMainMenu</string>
           <string key="superclassName">NSObject</string>
           <object class="NSMutableDictionary" key="actions">
-            <string key="NS.key.0">checkForUpdates:</string>
-            <string key="NS.object.0">id</string>
-          </object>
-          <object class="NSMutableDictionary" key="actionInfosByName">
-            <string key="NS.key.0">checkForUpdates:</string>
-            <object class="IBActionInfo" key="NS.object.0">
-              <string key="name">checkForUpdates:</string>
-              <string key="candidateClassName">id</string>
+            <bool key="EncodedWithXMLCoder">YES</bool>
+            <object class="NSArray" key="dict.sortedKeys">
+              <bool key="EncodedWithXMLCoder">YES</bool>
+              <string>clearRecentItems:</string>
+              <string>createVideoSnapshot:</string>
+              <string>floatOnTop:</string>
+              <string>intfOpenCapture:</string>
+              <string>intfOpenDisc:</string>
+              <string>intfOpenFile:</string>
+              <string>intfOpenFileGeneric:</string>
+              <string>intfOpenNet:</string>
+              <string>openDocumentation:</string>
+              <string>openDonate:</string>
+              <string>openForum:</string>
+              <string>openReadMe:</string>
+              <string>openWebsite:</string>
+              <string>resizeVideoWindow:</string>
+              <string>setPlaybackRate:</string>
+              <string>showAudioEffects:</string>
+              <string>showBookmarks:</string>
+              <string>showInformationPanel:</string>
+              <string>showLicense:</string>
+              <string>showTrackSynchronization:</string>
+              <string>showVideoEffects:</string>
+              <string>showWizard:</string>
+              <string>toggleFullscreen:</string>
+              <string>toggleVar:</string>
+              <string>viewAbout:</string>
+              <string>viewErrorsAndWarnings:</string>
+              <string>viewHelp:</string>
+              <string>viewPreferences:</string>
+            </object>
+            <object class="NSMutableArray" key="dict.values">
+              <bool key="EncodedWithXMLCoder">YES</bool>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
             </object>
           </object>
-          <object class="NSMutableDictionary" key="outlets">
-            <string key="NS.key.0">delegate</string>
-            <string key="NS.object.0">id</string>
-          </object>
-          <object class="NSMutableDictionary" key="toOneOutletInfosByName">
-            <string key="NS.key.0">delegate</string>
-            <object class="IBToOneOutletInfo" key="NS.object.0">
-              <string key="name">delegate</string>
-              <string key="candidateClassName">id</string>
+          <object class="NSMutableDictionary" key="actionInfosByName">
+            <bool key="EncodedWithXMLCoder">YES</bool>
+            <object class="NSArray" key="dict.sortedKeys">
+              <bool key="EncodedWithXMLCoder">YES</bool>
+              <string>clearRecentItems:</string>
+              <string>createVideoSnapshot:</string>
+              <string>floatOnTop:</string>
+              <string>intfOpenCapture:</string>
+              <string>intfOpenDisc:</string>
+              <string>intfOpenFile:</string>
+              <string>intfOpenFileGeneric:</string>
+              <string>intfOpenNet:</string>
+              <string>openDocumentation:</string>
+              <string>openDonate:</string>
+              <string>openForum:</string>
+              <string>openReadMe:</string>
+              <string>openWebsite:</string>
+              <string>resizeVideoWindow:</string>
+              <string>setPlaybackRate:</string>
+              <string>showAudioEffects:</string>
+              <string>showBookmarks:</string>
+              <string>showInformationPanel:</string>
+              <string>showLicense:</string>
+              <string>showTrackSynchronization:</string>
+              <string>showVideoEffects:</string>
+              <string>showWizard:</string>
+              <string>toggleFullscreen:</string>
+              <string>toggleVar:</string>
+              <string>viewAbout:</string>
+              <string>viewErrorsAndWarnings:</string>
+              <string>viewHelp:</string>
+              <string>viewPreferences:</string>
             </object>
+            <object class="NSMutableArray" key="dict.values">
+              <bool key="EncodedWithXMLCoder">YES</bool>
+              <object class="IBActionInfo">
+                <string key="name">clearRecentItems:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">createVideoSnapshot:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">floatOnTop:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">intfOpenCapture:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">intfOpenDisc:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">intfOpenFile:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">intfOpenFileGeneric:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">intfOpenNet:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">openDocumentation:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">openDonate:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">openForum:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">openReadMe:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">openWebsite:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">resizeVideoWindow:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">setPlaybackRate:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">showAudioEffects:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">showBookmarks:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">showInformationPanel:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">showLicense:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">showTrackSynchronization:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">showVideoEffects:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">showWizard:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">toggleFullscreen:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">toggleVar:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">viewAbout:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">viewErrorsAndWarnings:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">viewHelp:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBActionInfo">
+                <string key="name">viewPreferences:</string>
+                <string key="candidateClassName">id</string>
+              </object>
+            </object>
+          </object>
+          <object class="NSMutableDictionary" key="outlets">
+            <bool key="EncodedWithXMLCoder">YES</bool>
+            <object class="NSArray" key="dict.sortedKeys">
+              <bool key="EncodedWithXMLCoder">YES</bool>
+              <string>o_about</string>
+              <string>o_audioeffects</string>
+              <string>o_bookmarks</string>
+              <string>o_dmi_mute</string>
+              <string>o_dmi_next</string>
+              <string>o_dmi_play</string>
+              <string>o_dmi_previous</string>
+              <string>o_dmi_stop</string>
+              <string>o_mi_about</string>
+              <string>o_mi_addSub</string>
+              <string>o_mi_add_intf</string>
+              <string>o_mi_aspect_ratio</string>
+              <string>o_mi_audioeffects</string>
+              <string>o_mi_audiotrack</string>
+              <string>o_mi_bookmarks</string>
+              <string>o_mi_bring_atf</string>
+              <string>o_mi_bwd</string>
+              <string>o_mi_channels</string>
+              <string>o_mi_chapter</string>
+              <string>o_mi_checkForUpdate</string>
+              <string>o_mi_clear</string>
+              <string>o_mi_close_window</string>
+              <string>o_mi_controller</string>
+              <string>o_mi_copy</string>
+              <string>o_mi_crop</string>
+              <string>o_mi_cut</string>
+              <string>o_mi_deinterlace</string>
+              <string>o_mi_deinterlace_mode</string>
+              <string>o_mi_device</string>
+              <string>o_mi_documentation</string>
+              <string>o_mi_donation</string>
+              <string>o_mi_double_window</string>
+              <string>o_mi_errorsAndWarnings</string>
+              <string>o_mi_ffmpeg_pp</string>
+              <string>o_mi_fittoscreen</string>
+              <string>o_mi_floatontop</string>
+              <string>o_mi_forum</string>
+              <string>o_mi_fullscreen</string>
+              <string>o_mi_fwd</string>
+              <string>o_mi_half_window</string>
+              <string>o_mi_help</string>
+              <string>o_mi_hide</string>
+              <string>o_mi_hide_others</string>
+              <string>o_mi_info</string>
+              <string>o_mi_license</string>
+              <string>o_mi_loop</string>
+              <string>o_mi_messages</string>
+              <string>o_mi_minimize</string>
+              <string>o_mi_mute</string>
+              <string>o_mi_next</string>
+              <string>o_mi_normal_window</string>
+              <string>o_mi_open_capture</string>
+              <string>o_mi_open_disc</string>
+              <string>o_mi_open_file</string>
+              <string>o_mi_open_generic</string>
+              <string>o_mi_open_net</string>
+              <string>o_mi_open_recent</string>
+              <string>o_mi_open_recent_cm</string>
+              <string>o_mi_open_wizard</string>
+              <string>o_mi_paste</string>
+              <string>o_mi_play</string>
+              <string>o_mi_player</string>
+              <string>o_mi_playlist</string>
+              <string>o_mi_prefs</string>
+              <string>o_mi_previous</string>
+              <string>o_mi_program</string>
+              <string>o_mi_quit</string>
+              <string>o_mi_quitAfterPB</string>
+              <string>o_mi_random</string>
+              <string>o_mi_rate</string>
+              <string>o_mi_rate_faster_lbl</string>
+              <string>o_mi_rate_fld</string>
+              <string>o_mi_rate_lbl</string>
+              <string>o_mi_rate_lbl_gray</string>
+              <string>o_mi_rate_normal_lbl</string>
+              <string>o_mi_rate_sld</string>
+              <string>o_mi_rate_slower_lbl</string>
+              <string>o_mi_rate_view</string>
+              <string>o_mi_readme</string>
+              <string>o_mi_repeat</string>
+              <string>o_mi_screen</string>
+              <string>o_mi_select_all</string>
+              <string>o_mi_services</string>
+              <string>o_mi_show_all</string>
+              <string>o_mi_snapshot</string>
+              <string>o_mi_stop</string>
+              <string>o_mi_subtitle</string>
+              <string>o_mi_teletext</string>
+              <string>o_mi_teletext_blue</string>
+              <string>o_mi_teletext_green</string>
+              <string>o_mi_teletext_index</string>
+              <string>o_mi_teletext_red</string>
+              <string>o_mi_teletext_transparent</string>
+              <string>o_mi_teletext_yellow</string>
+              <string>o_mi_title</string>
+              <string>o_mi_trackSynchronization</string>
+              <string>o_mi_videoeffects</string>
+              <string>o_mi_videotrack</string>
+              <string>o_mi_visual</string>
+              <string>o_mi_vol_down</string>
+              <string>o_mi_vol_up</string>
+              <string>o_mi_website</string>
+              <string>o_mu_add_intf</string>
+              <string>o_mu_aspect_ratio</string>
+              <string>o_mu_audio</string>
+              <string>o_mu_audiotrack</string>
+              <string>o_mu_channels</string>
+              <string>o_mu_chapter</string>
+              <string>o_mu_controls</string>
+              <string>o_mu_crop</string>
+              <string>o_mu_deinterlace</string>
+              <string>o_mu_deinterlace_mode</string>
+              <string>o_mu_device</string>
+              <string>o_mu_edit</string>
+              <string>o_mu_ffmpeg_pp</string>
+              <string>o_mu_file</string>
+              <string>o_mu_help</string>
+              <string>o_mu_program</string>
+              <string>o_mu_screen</string>
+              <string>o_mu_subtitle</string>
+              <string>o_mu_title</string>
+              <string>o_mu_video</string>
+              <string>o_mu_videotrack</string>
+              <string>o_mu_visual</string>
+              <string>o_mu_window</string>
+              <string>o_trackSynchronization</string>
+              <string>o_videoeffects</string>
+              <string>o_vmi_fullscreen</string>
+              <string>o_vmi_mute</string>
+              <string>o_vmi_next</string>
+              <string>o_vmi_play</string>
+              <string>o_vmi_prev</string>
+              <string>o_vmi_snapshot</string>
+              <string>o_vmi_stop</string>
+              <string>o_vmi_voldown</string>
+              <string>o_vmi_volup</string>
+              <string>o_vout_menu</string>
+            </object>
+            <object class="NSMutableArray" key="dict.values">
+              <bool key="EncodedWithXMLCoder">YES</bool>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>id</string>
+              <string>NSView</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>NSMenu</string>
+              <string>id</string>
+              <string>id</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenuItem</string>
+              <string>NSMenu</string>
+            </object>
+          </object>
+          <object class="NSMutableDictionary" key="toOneOutletInfosByName">
+            <bool key="EncodedWithXMLCoder">YES</bool>
+            <object class="NSArray" key="dict.sortedKeys">
+              <bool key="EncodedWithXMLCoder">YES</bool>
+              <string>o_about</string>
+              <string>o_audioeffects</string>
+              <string>o_bookmarks</string>
+              <string>o_dmi_mute</string>
+              <string>o_dmi_next</string>
+              <string>o_dmi_play</string>
+              <string>o_dmi_previous</string>
+              <string>o_dmi_stop</string>
+              <string>o_mi_about</string>
+              <string>o_mi_addSub</string>
+              <string>o_mi_add_intf</string>
+              <string>o_mi_aspect_ratio</string>
+              <string>o_mi_audioeffects</string>
+              <string>o_mi_audiotrack</string>
+              <string>o_mi_bookmarks</string>
+              <string>o_mi_bring_atf</string>
+              <string>o_mi_bwd</string>
+              <string>o_mi_channels</string>
+              <string>o_mi_chapter</string>
+              <string>o_mi_checkForUpdate</string>
+              <string>o_mi_clear</string>
+              <string>o_mi_close_window</string>
+              <string>o_mi_controller</string>
+              <string>o_mi_copy</string>
+              <string>o_mi_crop</string>
+              <string>o_mi_cut</string>
+              <string>o_mi_deinterlace</string>
+              <string>o_mi_deinterlace_mode</string>
+              <string>o_mi_device</string>
+              <string>o_mi_documentation</string>
+              <string>o_mi_donation</string>
+              <string>o_mi_double_window</string>
+              <string>o_mi_errorsAndWarnings</string>
+              <string>o_mi_ffmpeg_pp</string>
+              <string>o_mi_fittoscreen</string>
+              <string>o_mi_floatontop</string>
+              <string>o_mi_forum</string>
+              <string>o_mi_fullscreen</string>
+              <string>o_mi_fwd</string>
+              <string>o_mi_half_window</string>
+              <string>o_mi_help</string>
+              <string>o_mi_hide</string>
+              <string>o_mi_hide_others</string>
+              <string>o_mi_info</string>
+              <string>o_mi_license</string>
+              <string>o_mi_loop</string>
+              <string>o_mi_messages</string>
+              <string>o_mi_minimize</string>
+              <string>o_mi_mute</string>
+              <string>o_mi_next</string>
+              <string>o_mi_normal_window</string>
+              <string>o_mi_open_capture</string>
+              <string>o_mi_open_disc</string>
+              <string>o_mi_open_file</string>
+              <string>o_mi_open_generic</string>
+              <string>o_mi_open_net</string>
+              <string>o_mi_open_recent</string>
+              <string>o_mi_open_recent_cm</string>
+              <string>o_mi_open_wizard</string>
+              <string>o_mi_paste</string>
+              <string>o_mi_play</string>
+              <string>o_mi_player</string>
+              <string>o_mi_playlist</string>
+              <string>o_mi_prefs</string>
+              <string>o_mi_previous</string>
+              <string>o_mi_program</string>
+              <string>o_mi_quit</string>
+              <string>o_mi_quitAfterPB</string>
+              <string>o_mi_random</string>
+              <string>o_mi_rate</string>
+              <string>o_mi_rate_faster_lbl</string>
+              <string>o_mi_rate_fld</string>
+              <string>o_mi_rate_lbl</string>
+              <string>o_mi_rate_lbl_gray</string>
+              <string>o_mi_rate_normal_lbl</string>
+              <string>o_mi_rate_sld</string>
+              <string>o_mi_rate_slower_lbl</string>
+              <string>o_mi_rate_view</string>
+              <string>o_mi_readme</string>
+              <string>o_mi_repeat</string>
+              <string>o_mi_screen</string>
+              <string>o_mi_select_all</string>
+              <string>o_mi_services</string>
+              <string>o_mi_show_all</string>
+              <string>o_mi_snapshot</string>
+              <string>o_mi_stop</string>
+              <string>o_mi_subtitle</string>
+              <string>o_mi_teletext</string>
+              <string>o_mi_teletext_blue</string>
+              <string>o_mi_teletext_green</string>
+              <string>o_mi_teletext_index</string>
+              <string>o_mi_teletext_red</string>
+              <string>o_mi_teletext_transparent</string>
+              <string>o_mi_teletext_yellow</string>
+              <string>o_mi_title</string>
+              <string>o_mi_trackSynchronization</string>
+              <string>o_mi_videoeffects</string>
+              <string>o_mi_videotrack</string>
+              <string>o_mi_visual</string>
+              <string>o_mi_vol_down</string>
+              <string>o_mi_vol_up</string>
+              <string>o_mi_website</string>
+              <string>o_mu_add_intf</string>
+              <string>o_mu_aspect_ratio</string>
+              <string>o_mu_audio</string>
+              <string>o_mu_audiotrack</string>
+              <string>o_mu_channels</string>
+              <string>o_mu_chapter</string>
+              <string>o_mu_controls</string>
+              <string>o_mu_crop</string>
+              <string>o_mu_deinterlace</string>
+              <string>o_mu_deinterlace_mode</string>
+              <string>o_mu_device</string>
+              <string>o_mu_edit</string>
+              <string>o_mu_ffmpeg_pp</string>
+              <string>o_mu_file</string>
+              <string>o_mu_help</string>
+              <string>o_mu_program</string>
+              <string>o_mu_screen</string>
+              <string>o_mu_subtitle</string>
+              <string>o_mu_title</string>
+              <string>o_mu_video</string>
+              <string>o_mu_videotrack</string>
+              <string>o_mu_visual</string>
+              <string>o_mu_window</string>
+              <string>o_trackSynchronization</string>
+              <string>o_videoeffects</string>
+              <string>o_vmi_fullscreen</string>
+              <string>o_vmi_mute</string>
+              <string>o_vmi_next</string>
+              <string>o_vmi_play</string>
+              <string>o_vmi_prev</string>
+              <string>o_vmi_snapshot</string>
+              <string>o_vmi_stop</string>
+              <string>o_vmi_voldown</string>
+              <string>o_vmi_volup</string>
+              <string>o_vout_menu</string>
+            </object>
+            <object class="NSMutableArray" key="dict.values">
+              <bool key="EncodedWithXMLCoder">YES</bool>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_about</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_audioeffects</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_bookmarks</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_dmi_mute</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_dmi_next</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_dmi_play</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_dmi_previous</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_dmi_stop</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_about</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_addSub</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_add_intf</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_aspect_ratio</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_audioeffects</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_audiotrack</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_bookmarks</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_bring_atf</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_bwd</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_channels</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_chapter</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_checkForUpdate</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_clear</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_close_window</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_controller</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_copy</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_crop</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_cut</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_deinterlace</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_deinterlace_mode</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_device</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_documentation</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_donation</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_double_window</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_errorsAndWarnings</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_ffmpeg_pp</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_fittoscreen</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_floatontop</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_forum</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_fullscreen</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_fwd</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_half_window</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_help</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_hide</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_hide_others</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_info</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_license</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_loop</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_messages</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_minimize</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_mute</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_next</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_normal_window</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_open_capture</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_open_disc</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_open_file</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_open_generic</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_open_net</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_open_recent</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_open_recent_cm</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_open_wizard</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_paste</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_play</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_player</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_playlist</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_prefs</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_previous</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_program</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_quit</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_quitAfterPB</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_random</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_rate</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_rate_faster_lbl</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_rate_fld</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_rate_lbl</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_rate_lbl_gray</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_rate_normal_lbl</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_rate_sld</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_rate_slower_lbl</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_rate_view</string>
+                <string key="candidateClassName">NSView</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_readme</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_repeat</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_screen</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_select_all</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_services</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_show_all</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_snapshot</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_stop</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_subtitle</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_teletext</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_teletext_blue</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_teletext_green</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_teletext_index</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_teletext_red</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_teletext_transparent</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_teletext_yellow</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_title</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_trackSynchronization</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_videoeffects</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_videotrack</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_visual</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_vol_down</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_vol_up</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mi_website</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_add_intf</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_aspect_ratio</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_audio</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_audiotrack</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_channels</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_chapter</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_controls</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_crop</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_deinterlace</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_deinterlace_mode</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_device</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_edit</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_ffmpeg_pp</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_file</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_help</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_program</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_screen</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_subtitle</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_title</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_video</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_videotrack</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_visual</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_mu_window</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_trackSynchronization</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_videoeffects</string>
+                <string key="candidateClassName">id</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_vmi_fullscreen</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_vmi_mute</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_vmi_next</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_vmi_play</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_vmi_prev</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_vmi_snapshot</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_vmi_stop</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_vmi_voldown</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_vmi_volup</string>
+                <string key="candidateClassName">NSMenuItem</string>
+              </object>
+              <object class="IBToOneOutletInfo">
+                <string key="name">o_vout_menu</string>
+                <string key="candidateClassName">NSMenu</string>
+              </object>
+            </object>
+          </object>
+          <object class="IBClassDescriptionSource" key="sourceIdentifier">
+            <string key="majorKey">IBDocumentRelativeSource</string>
+            <string key="minorKey">../../../../../modules/gui/macosx/MainMenu.h</string>
           </object>
-          <reference key="sourceIdentifier" ref="647024034"/>
         </object>
         <object class="IBPartialClassDescription">
           <string key="className">VLCMainWindow</string>
index e440b961a1565c080d10250e5d9eb513c47d0b12..ec451599123e9e8b3af20d168bc31b01c13e2aec 100644 (file)
Binary files a/extras/package/macosx/Resources/English.lproj/MainMenu.nib/keyedobjects.nib and b/extras/package/macosx/Resources/English.lproj/MainMenu.nib/keyedobjects.nib differ
index c055a7235501d82169e34b8396502f13b4e5b30a..10fdb1661dc5fa614afb8c6b2b8db90f6ca0a653 100644 (file)
@@ -261,22 +261,12 @@ static VLCCoreInteraction *_o_sharedInstance = nil;
 - (void)toggleFullscreen
 {
     input_thread_t * p_input = pl_CurrentInput( VLCIntf );
-    
+
     if( p_input != NULL )
     {
-        vout_thread_t *p_vout = input_GetVout( p_input );
-        if( p_vout != NULL )
-        {
-            id o_vout_view = [self voutView];
-            if( o_vout_view )
-                [o_vout_view toggleFullscreen];
-            vlc_object_release( p_vout );
-        }
-        else
-        {
-            playlist_t * p_playlist = pl_Get( VLCIntf );
-            var_ToggleBool( p_playlist, "fullscreen" );
-        }
+        playlist_t * p_playlist = pl_Get( VLCIntf );
+        var_ToggleBool( p_playlist, "fullscreen" );
+
         vlc_object_release( p_input );
     }
 }
index 2825eeb3a5769357261d2b429acbcb2ae0fb3404..9c6ea3f5701819d247d86b315d309471bd3dee56 100644 (file)
 - (IBAction)setPlaybackRate:(id)sender;
 - (void)updatePlaybackRate;
 
+- (IBAction)toggleFullscreen:(id)sender;
+- (IBAction)resizeVideoWindow:(id)sender;
+- (IBAction)floatOnTop:(id)sender;
+- (IBAction)createVideoSnapshot:(id)sender;
+
 - (IBAction)showWizard:(id)sender;
 - (IBAction)showVideoEffects:(id)sender;
 - (IBAction)showAudioEffects:(id)sender;
index 3898f846e164c2db8b0397a4e67e99509761b8fa..991429e2b3f41b957706208d05f2be55de87366b 100644 (file)
@@ -39,6 +39,7 @@
 #import "playlistinfo.h"
 #import "vout.h"
 #import "CoreInteraction.h"
+#import "MainWindow.h"
 
 @implementation VLCMainMenu
 static VLCMainMenu *_o_sharedInstance = nil;
@@ -560,6 +561,68 @@ static VLCMainMenu *_o_sharedInstance = nil;
     [o_mi_rate_sld setIntValue: i];
 }
 
+#pragma mark -
+#pragma video menu
+- (IBAction)toggleFullscreen:(id)sender
+{
+    [[VLCCoreInteraction sharedInstance] toggleFullscreen];
+}
+
+- (IBAction)resizeVideoWindow:(id)sender
+{
+    input_thread_t *p_input = pl_CurrentInput( VLCIntf );
+    if (p_input)
+    {
+        vout_thread_t *p_vout = getVout();
+        if (p_vout)
+        {
+            if (sender == o_mi_half_window)
+                var_SetFloat( p_vout, "zoom", 0.5 );
+            else if (sender == o_mi_normal_window)
+                var_SetFloat( p_vout, "zoom", 1.0 );
+            else if (sender == o_mi_double_window)
+                var_SetFloat( p_vout, "zoom", 2.0 );
+            else
+            {
+                if (![[VLCMainWindow sharedInstance] isZoomed])
+                    [[VLCMainWindow sharedInstance] performZoom: sender];
+            }
+            vlc_object_release( p_vout );
+        }
+        vlc_object_release( p_input );
+    }
+}
+
+- (IBAction)floatOnTop:(id)sender
+{
+    input_thread_t *p_input = pl_CurrentInput( VLCIntf );
+    if (p_input)
+    {
+        vout_thread_t *p_vout = getVout();
+        if (p_vout)
+        {
+            var_ToggleBool( p_vout, "video-on-top" );
+            vlc_object_release( p_vout );
+        }
+        vlc_object_release( p_input );
+    }
+}
+
+- (IBAction)createVideoSnapshot:(id)sender
+{
+    input_thread_t *p_input = pl_CurrentInput( VLCIntf );
+    if (p_input)
+    {
+        vout_thread_t *p_vout = getVout();
+        if (p_vout)
+        {
+            var_TriggerCallback( p_vout, "video-snapshot" );
+            vlc_object_release( p_vout );
+        }
+        vlc_object_release( p_input );
+    }
+}
+
 #pragma mark -
 #pragma mark Panels
 
@@ -1132,9 +1195,6 @@ static VLCMainMenu *_o_sharedInstance = nil;
             [o_title isEqualToString: _NS("Fullscreen")] ||
             [o_title isEqualToString: _NS("Float on Top")] )
     {
-        id o_window;
-        NSArray *o_windows = [NSApp orderedWindows];
-        NSEnumerator *o_enumerator = [o_windows objectEnumerator];
         bEnabled = FALSE;
 
         if( p_input != NULL )
@@ -1148,16 +1208,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
                     [o_mi setState: val.b_bool ?  NSOnState : NSOffState];
                 }
 
-                while( (o_window = [o_enumerator nextObject]))
-                {
-                    if( [[o_window className] isEqualToString: @"VLCVoutWindow"] ||
-                       [[[VLCMain sharedInstance] embeddedList]
-                        windowContainsEmbedded: o_window])
-                    {
-                        bEnabled = TRUE;
-                        break;
-                    }
-                }
+                bEnabled = TRUE;
 
                 vlc_object_release( (vlc_object_t *)p_vout );
             }
index 57973eebbb6fef21f489d9285ab1595e0a15deaf..22bb753affa59f5c32941c1fe1700a18d30aedd6 100644 (file)
 #import <vlc_input.h>
 #import "misc.h"
 
-@interface VLCMainWindow : NSWindow <PXSourceListDataSource, PXSourceListDelegate, NSWindowDelegate> {
+#ifndef MAC_OS_X_VERSION_10_6
+@protocol NSAnimationDelegate <NSObject> @end
+#endif
+
+@interface VLCMainWindow : NSWindow <PXSourceListDataSource, PXSourceListDelegate, NSWindowDelegate, NSAnimationDelegate> {
     IBOutlet id o_play_btn;
     IBOutlet id o_bwd_btn;
     IBOutlet id o_fwd_btn;
     BOOL just_triggered_next;
     BOOL just_triggered_previous;
     NSMutableArray *o_sidebaritems;
+
+    VLCWindow       * o_fullscreen_window;
+    NSViewAnimation * o_fullscreen_anim1;
+    NSViewAnimation * o_fullscreen_anim2;
+    NSViewAnimation * o_makekey_anim;
+    NSView          * o_temp_view;
+    /* set to yes if we are fullscreen and all animations are over */
+    BOOL              b_fullscreen;
+    BOOL              b_window_is_invisible;
+    NSRecursiveLock * o_animation_lock;
+    NSSize nativeVideoSize;
+
+    NSInteger i_originalLevel;
 }
 + (VLCMainWindow *)sharedInstance;
 
 - (IBAction)fullscreen:(id)sender;
 - (IBAction)dropzoneButtonAction:(id)sender;
 
-- (id)videoView;
-- (void)setVideoplayEnabled;
 - (void)showDropZone;
 - (void)hideDropZone;
 - (void)updateTimeSlider;
 
 - (void)drawFancyGradientEffectForTimeSlider;
 
+- (id)videoView;
+- (void)setVideoplayEnabled;
+- (void)resizeWindow;
+- (void)setNativeVideoSize:(NSSize)size;
+
+/* fullscreen handling */
+- (BOOL)isFullscreen;
+- (void)lockFullscreenAnimation;
+- (void)unlockFullscreenAnimation;
+- (void)enterFullscreen;
+- (void)leaveFullscreen;
+- (void)leaveFullscreenAndFadeOut: (BOOL)fadeout;
+- (void)hasEndedFullscreen;
+- (void)hasBecomeFullscreen;
+- (void)setFrameOnMainThread:(NSData*)packedargs;
+
 @end
 
 @interface VLCProgressBarGradientEffect : NSView {
index 6f4cc6116e986c276c5ca63b949a554302aec80a..514f491cd939df73c17f82d2de3166168d96340d 100644 (file)
@@ -208,10 +208,12 @@ static VLCMainWindow *_o_sharedInstance = nil;
     [self setDelegate: self];
     [self setExcludedFromWindowsMenu: YES];
     // Set that here as IB seems to be buggy
-    [self setContentMinSize:NSMakeSize(400., 288.)];
+    [self setContentMinSize:NSMakeSize(500., 288.)];
     [self setTitle: _NS("VLC media player")];
     [o_playlist_btn setEnabled:NO];
     [o_video_view setFrame: [o_split_view frame]];
+    o_temp_view = [[NSView alloc] init];
+    [o_temp_view setAutoresizingMask:NSViewHeightSizable | NSViewWidthSizable];
 
     /* reset the interface */
     [self updateVolumeSlider];
@@ -555,8 +557,8 @@ static VLCMainWindow *_o_sharedInstance = nil;
 
 - (IBAction)fullscreen:(id)sender
 {
-    NSLog( @"fullscreen mode not yet implemented" );
-    [[VLCCoreInteraction sharedInstance] toggleFullscreen];
+//?!    [[VLCCoreInteraction sharedInstance] toggleFullscreen];
+    [self enterFullscreen];
 }
 
 - (IBAction)dropzoneButtonAction:(id)sender
@@ -815,6 +817,477 @@ static VLCMainWindow *_o_sharedInstance = nil;
     [o_playlist_btn setEnabled: [[VLCMain sharedInstance] activeVideoPlayback]];
 }
 
+- (void)resizeWindow
+{
+    if ( !b_fullscreen )
+    {
+        NSPoint topleftbase;
+        NSPoint topleftscreen;
+        NSRect new_frame;
+        topleftbase.x = 0;
+        topleftbase.y = [self frame].size.height;
+        topleftscreen = [self convertBaseToScreen: topleftbase];
+
+        /* Calculate the window's new size */
+        new_frame.size.width = [self frame].size.width - [o_video_view frame].size.width + nativeVideoSize.width;
+        new_frame.size.height = [self frame].size.height - [o_video_view frame].size.height + nativeVideoSize.height;
+
+        new_frame.origin.x = topleftscreen.x;
+        new_frame.origin.y = topleftscreen.y - new_frame.size.height;
+
+        [[self animator] setFrame:new_frame display:YES];
+    }
+}
+
+- (void)setNativeVideoSize:(NSSize)size
+{
+    if (size.width != nativeVideoSize.width || size.height != nativeVideoSize.height )
+    {
+        nativeVideoSize = size;
+        [self resizeWindow];
+    }
+}
+
+#pragma mark -
+#pragma mark Fullscreen support
+- (BOOL)isFullscreen
+{
+    return b_fullscreen;
+}
+
+- (void)lockFullscreenAnimation
+{
+    [o_animation_lock lock];
+}
+
+- (void)unlockFullscreenAnimation
+{
+    [o_animation_lock unlock];
+}
+
+- (void)enterFullscreen
+{
+    NSMutableDictionary *dict1, *dict2;
+    NSScreen *screen;
+    NSRect screen_rect;
+    NSRect rect;
+    vout_thread_t *p_vout = getVout();
+    BOOL blackout_other_displays = config_GetInt( VLCIntf, "macosx-black" );
+
+    if( p_vout )
+        screen = [NSScreen screenWithDisplayID:(CGDirectDisplayID)var_GetInteger( p_vout, "video-device" )];
+
+    [self lockFullscreenAnimation];
+
+    if (!screen)
+    {
+        msg_Dbg( VLCIntf, "chosen screen isn't present, using current screen for fullscreen mode" );
+        screen = [self screen];
+    }
+    if (!screen)
+    {
+        msg_Dbg( VLCIntf, "Using deepest screen" );
+        screen = [NSScreen deepestScreen];
+    }
+
+    if( p_vout )
+        vlc_object_release( p_vout );
+
+    screen_rect = [screen frame];
+
+    [o_fullscreen_btn setState: YES];
+
+    [NSCursor setHiddenUntilMouseMoves: YES];
+
+    if( blackout_other_displays )
+        [screen blackoutOtherScreens];
+
+    /* Make sure we don't see the window flashes in float-on-top mode */
+    i_originalLevel = [self level];
+    [self setLevel:NSNormalWindowLevel];
+
+    /* Only create the o_fullscreen_window if we are not in the middle of the zooming animation */
+    if (!o_fullscreen_window)
+    {
+        /* We can't change the styleMask of an already created NSWindow, so we create another window, and do eye catching stuff */
+
+        rect = [[o_video_view superview] convertRect: [o_video_view frame] toView: nil]; /* Convert to Window base coord */
+        rect.origin.x += [self frame].origin.x;
+        rect.origin.y += [self frame].origin.y;
+        o_fullscreen_window = [[VLCWindow alloc] initWithContentRect:rect styleMask: NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:YES];
+        [o_fullscreen_window setBackgroundColor: [NSColor blackColor]];
+        [o_fullscreen_window setCanBecomeKeyWindow: YES];
+
+        if (![self isVisible] || [self alphaValue] == 0.0)
+        {
+            /* We don't animate if we are not visible, instead we
+             * simply fade the display */
+            CGDisplayFadeReservationToken token;
+
+            if( blackout_other_displays )
+            {
+                CGAcquireDisplayFadeReservation( kCGMaxDisplayReservationInterval, &token );
+                CGDisplayFade( token, 0.5, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, 0, 0, 0, YES );
+            }
+
+            if ([screen isMainScreen])
+                SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
+
+            [[o_video_view superview] replaceSubview:o_dropzone_view with:o_temp_view];
+            [o_temp_view setFrame:[o_video_view frame]];
+            [o_fullscreen_window setContentView:o_video_view];
+
+            [o_fullscreen_window makeKeyAndOrderFront:self];
+            [o_fullscreen_window orderFront:self animate:YES];
+
+            [o_fullscreen_window setFrame:screen_rect display:YES];
+
+            if( blackout_other_displays )
+            {
+                CGDisplayFade( token, 0.3, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, 0, 0, 0, NO );
+                CGReleaseDisplayFadeReservation( token );
+            }
+
+            /* Will release the lock */
+            [self hasBecomeFullscreen];
+
+            return;
+        }
+
+        /* Make sure we don't see the o_video_view disappearing of the screen during this operation */
+        NSDisableScreenUpdates();
+        [[o_video_view superview] replaceSubview:o_video_view with:o_temp_view];
+        [o_temp_view setFrame:[o_video_view frame]];
+        [o_fullscreen_window setContentView:o_video_view];
+        [o_fullscreen_window makeKeyAndOrderFront:self];
+        NSEnableScreenUpdates();
+    }
+
+    /* We are in fullscreen (and no animation is running) */
+    if (b_fullscreen)
+    {
+        /* Make sure we are hidden */
+        [super orderOut: self];
+        [self unlockFullscreenAnimation];
+        return;
+    }
+
+    if (o_fullscreen_anim1)
+    {
+        [o_fullscreen_anim1 stopAnimation];
+        [o_fullscreen_anim1 release];
+    }
+    if (o_fullscreen_anim2)
+    {
+        [o_fullscreen_anim2 stopAnimation];
+        [o_fullscreen_anim2 release];
+    }
+
+    if ([screen isMainScreen])
+        SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
+
+    dict1 = [[NSMutableDictionary alloc] initWithCapacity:2];
+    dict2 = [[NSMutableDictionary alloc] initWithCapacity:3];
+
+    [dict1 setObject:self forKey:NSViewAnimationTargetKey];
+    [dict1 setObject:NSViewAnimationFadeOutEffect forKey:NSViewAnimationEffectKey];
+
+    [dict2 setObject:o_fullscreen_window forKey:NSViewAnimationTargetKey];
+    [dict2 setObject:[NSValue valueWithRect:[o_fullscreen_window frame]] forKey:NSViewAnimationStartFrameKey];
+    [dict2 setObject:[NSValue valueWithRect:screen_rect] forKey:NSViewAnimationEndFrameKey];
+
+    /* Strategy with NSAnimation allocation:
+     - Keep at most 2 animation at a time
+     - leaveFullscreen/enterFullscreen are the only responsible for releasing and alloc-ing
+     */
+    o_fullscreen_anim1 = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObject:dict1]];
+    o_fullscreen_anim2 = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObject:dict2]];
+
+    [dict1 release];
+    [dict2 release];
+
+    [o_fullscreen_anim1 setAnimationBlockingMode: NSAnimationNonblocking];
+    [o_fullscreen_anim1 setDuration: 0.3];
+    [o_fullscreen_anim1 setFrameRate: 30];
+    [o_fullscreen_anim2 setAnimationBlockingMode: NSAnimationNonblocking];
+    [o_fullscreen_anim2 setDuration: 0.2];
+    [o_fullscreen_anim2 setFrameRate: 30];
+
+    [o_fullscreen_anim2 setDelegate: self];
+    [o_fullscreen_anim2 startWhenAnimation: o_fullscreen_anim1 reachesProgress: 1.0];
+
+    [o_fullscreen_anim1 startAnimation];
+    /* fullscreenAnimation will be unlocked when animation ends */
+}
+
+- (void)hasBecomeFullscreen
+{
+    [o_fullscreen_window makeFirstResponder: o_video_view];
+
+    [o_fullscreen_window makeKeyWindow];
+    [o_fullscreen_window setAcceptsMouseMovedEvents: TRUE];
+
+    /* tell the fspanel to move itself to front next time it's triggered */
+    [[[[VLCMain sharedInstance] controls] fspanel] setVoutWasUpdated: (int)[[o_fullscreen_window screen] displayID]];
+
+    if([self isVisible])
+        [super orderOut: self];
+
+    [[[[VLCMain sharedInstance] controls] fspanel] setActive: nil];
+
+    b_fullscreen = YES;
+    [self unlockFullscreenAnimation];
+}
+
+- (void)leaveFullscreen
+{
+    [self leaveFullscreenAndFadeOut: NO];
+}
+
+- (void)leaveFullscreenAndFadeOut: (BOOL)fadeout
+{
+    NSMutableDictionary *dict1, *dict2;
+    NSRect frame;
+    BOOL blackout_other_displays = config_GetInt( VLCIntf, "macosx-black" );
+
+    [self lockFullscreenAnimation];
+
+    b_fullscreen = NO;
+    [o_fullscreen_btn setState: NO];
+
+    /* We always try to do so */
+    [NSScreen unblackoutScreens];
+
+    /* Don't do anything if o_fullscreen_window is already closed */
+    if (!o_fullscreen_window)
+    {
+        [self unlockFullscreenAnimation];
+        return;
+    }
+
+    if (fadeout)
+    {
+        /* We don't animate if we are not visible, instead we
+         * simply fade the display */
+        CGDisplayFadeReservationToken token;
+
+        if( blackout_other_displays )
+        {
+            CGAcquireDisplayFadeReservation( kCGMaxDisplayReservationInterval, &token );
+            CGDisplayFade( token, 0.3, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, 0, 0, 0, YES );
+        }
+
+        [[[[VLCMain sharedInstance] controls] fspanel] setNonActive: nil];
+        SetSystemUIMode( kUIModeNormal, kUIOptionAutoShowMenuBar);
+
+        /* Will release the lock */
+        [self hasEndedFullscreen];
+
+        /* Our window is hidden, and might be faded. We need to workaround that, so note it
+         * here */
+        b_window_is_invisible = YES;
+
+        if( blackout_other_displays )
+        {
+            CGDisplayFade( token, 0.5, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, 0, 0, 0, NO );
+            CGReleaseDisplayFadeReservation( token );
+        }
+
+        return;
+    }
+
+    [self setAlphaValue: 0.0];
+    [self orderFront: self];
+
+    [[[[VLCMain sharedInstance] controls] fspanel] setNonActive: nil];
+    SetSystemUIMode( kUIModeNormal, kUIOptionAutoShowMenuBar);
+
+    if (o_fullscreen_anim1)
+    {
+        [o_fullscreen_anim1 stopAnimation];
+        [o_fullscreen_anim1 release];
+    }
+    if (o_fullscreen_anim2)
+    {
+        [o_fullscreen_anim2 stopAnimation];
+        [o_fullscreen_anim2 release];
+    }
+
+    frame = [[o_temp_view superview] convertRect: [o_temp_view frame] toView: nil]; /* Convert to Window base coord */
+    frame.origin.x += [self frame].origin.x;
+    frame.origin.y += [self frame].origin.y;
+
+    dict2 = [[NSMutableDictionary alloc] initWithCapacity:2];
+    [dict2 setObject:self forKey:NSViewAnimationTargetKey];
+    [dict2 setObject:NSViewAnimationFadeInEffect forKey:NSViewAnimationEffectKey];
+
+    o_fullscreen_anim2 = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:dict2, nil]];
+    [dict2 release];
+
+    [o_fullscreen_anim2 setAnimationBlockingMode: NSAnimationNonblocking];
+    [o_fullscreen_anim2 setDuration: 0.3];
+    [o_fullscreen_anim2 setFrameRate: 30];
+
+    [o_fullscreen_anim2 setDelegate: self];
+
+    dict1 = [[NSMutableDictionary alloc] initWithCapacity:3];
+
+    [dict1 setObject:o_fullscreen_window forKey:NSViewAnimationTargetKey];
+    [dict1 setObject:[NSValue valueWithRect:[o_fullscreen_window frame]] forKey:NSViewAnimationStartFrameKey];
+    [dict1 setObject:[NSValue valueWithRect:frame] forKey:NSViewAnimationEndFrameKey];
+
+    o_fullscreen_anim1 = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:dict1, nil]];
+    [dict1 release];
+
+    [o_fullscreen_anim1 setAnimationBlockingMode: NSAnimationNonblocking];
+    [o_fullscreen_anim1 setDuration: 0.2];
+    [o_fullscreen_anim1 setFrameRate: 30];
+    [o_fullscreen_anim2 startWhenAnimation: o_fullscreen_anim1 reachesProgress: 1.0];
+
+    /* Make sure o_fullscreen_window is the frontmost window */
+    [o_fullscreen_window orderFront: self];
+
+    [o_fullscreen_anim1 startAnimation];
+    /* fullscreenAnimation will be unlocked when animation ends */
+}
+
+- (void)hasEndedFullscreen
+{
+    /* This function is private and should be only triggered at the end of the fullscreen change animation */
+    /* Make sure we don't see the o_video_view disappearing of the screen during this operation */
+    NSDisableScreenUpdates();
+    [o_video_view retain];
+    [o_video_view removeFromSuperviewWithoutNeedingDisplay];
+    [[o_temp_view superview] replaceSubview:o_temp_view with:o_video_view];
+    [o_video_view release];
+    [o_video_view setFrame:[o_temp_view frame]];
+    [self makeFirstResponder: o_video_view];
+    if ([self isVisible])
+        [super makeKeyAndOrderFront:self]; /* our version contains a workaround */
+    [o_fullscreen_window orderOut: self];
+    NSEnableScreenUpdates();
+
+    [o_fullscreen_window release];
+    o_fullscreen_window = nil;
+    [self setLevel:i_originalLevel];
+
+    [self unlockFullscreenAnimation];
+}
+
+- (void)animationDidEnd:(NSAnimation*)animation
+{
+    NSArray *viewAnimations;
+    if( o_makekey_anim == animation )
+    {
+        [o_makekey_anim release];
+        return;
+    }
+    if ([animation currentValue] < 1.0)
+        return;
+
+    /* Fullscreen ended or started (we are a delegate only for leaveFullscreen's/enterFullscren's anim2) */
+    viewAnimations = [o_fullscreen_anim2 viewAnimations];
+    if ([viewAnimations count] >=1 &&
+        [[[viewAnimations objectAtIndex: 0] objectForKey: NSViewAnimationEffectKey] isEqualToString:NSViewAnimationFadeInEffect])
+    {
+        /* Fullscreen ended */
+        [self hasEndedFullscreen];
+    }
+    else
+    {
+        /* Fullscreen started */
+        [self hasBecomeFullscreen];
+    }
+}
+
+- (void)orderOut: (id)sender
+{
+    [super orderOut: sender];
+
+    /* Make sure we leave fullscreen */
+    [self leaveFullscreenAndFadeOut: YES];
+}
+
+- (void)makeKeyAndOrderFront: (id)sender
+{
+    /* Hack
+     * when we exit fullscreen and fade out, we may endup in
+     * having a window that is faded. We can't have it fade in unless we
+     * animate again. */
+
+    if(!b_window_is_invisible)
+    {
+        /* Make sure we don't do it too much */
+        [super makeKeyAndOrderFront: sender];
+        return;
+    }
+
+    [super setAlphaValue:0.0f];
+    [super makeKeyAndOrderFront: sender];
+
+    NSMutableDictionary * dict = [[NSMutableDictionary alloc] initWithCapacity:2];
+    [dict setObject:self forKey:NSViewAnimationTargetKey];
+    [dict setObject:NSViewAnimationFadeInEffect forKey:NSViewAnimationEffectKey];
+
+    o_makekey_anim = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObject:dict]];
+    [dict release];
+
+    [o_makekey_anim setAnimationBlockingMode: NSAnimationNonblocking];
+    [o_makekey_anim setDuration: 0.1];
+    [o_makekey_anim setFrameRate: 30];
+    [o_makekey_anim setDelegate: self];
+
+    [o_makekey_anim startAnimation];
+    b_window_is_invisible = NO;
+
+    /* fullscreenAnimation will be unlocked when animation ends */
+}
+
+
+
+/* Make sure setFrame gets executed on main thread especially if we are animating.
+ * (Thus we won't block the video output thread) */
+- (void)setFrame:(NSRect)frame display:(BOOL)display animate:(BOOL)animate
+{
+    struct { NSRect frame; BOOL display; BOOL animate;} args;
+    NSData *packedargs;
+
+    args.frame = frame;
+    args.display = display;
+    args.animate = animate;
+
+    packedargs = [NSData dataWithBytes:&args length:sizeof(args)];
+
+    [self performSelectorOnMainThread:@selector(setFrameOnMainThread:)
+                           withObject: packedargs waitUntilDone: YES];
+}
+
+- (void)setFrameOnMainThread:(NSData*)packedargs
+{
+    struct args { NSRect frame; BOOL display; BOOL animate; } * args = (struct args*)[packedargs bytes];
+
+    if( args->animate )
+    {
+        /* Make sure we don't block too long and set up a non blocking animation */
+        NSDictionary * dict = [NSDictionary dictionaryWithObjectsAndKeys:
+                               self, NSViewAnimationTargetKey,
+                               [NSValue valueWithRect:[self frame]], NSViewAnimationStartFrameKey,
+                               [NSValue valueWithRect:args->frame], NSViewAnimationEndFrameKey, nil];
+
+        NSViewAnimation * anim = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObject:dict]];
+        [dict release];
+
+        [anim setAnimationBlockingMode: NSAnimationNonblocking];
+        [anim setDuration: 0.4];
+        [anim setFrameRate: 30];
+        [anim startAnimation];
+    }
+    else {
+        [super setFrame:args->frame display:args->display animate:args->animate];
+    }
+}
+
+
 #pragma mark -
 #pragma mark Side Bar Data handling
 /* taken under BSD-new from the PXSourceList sample project, adapted for VLC */
index 390c431d9799b303433ec8e06b3ccfd95bf380e9..7add587b559a6275766da9990482b276c0d09232 100644 (file)
@@ -63,9 +63,6 @@
 - (IBAction)volumeSliderUpdated:(id)sender;
 
 - (IBAction)showPosition: (id)sender;
-- (IBAction)toogleFullscreen:(id)sender;
-- (BOOL)isFullscreen;
-- (IBAction)windowAction:(id)sender;
 
 - (IBAction)telxTransparent:(id)sender;
 - (IBAction)telxNavLink:(id)sender;
index 65537a57a35ceda07c4bd524afa21a250de2bd21..226d667f353e1d2d07e963f5131cade89d5567bc 100644 (file)
     return NO;
 }
 
-- (IBAction)windowAction:(id)sender
-{
-    NSString *o_title = [sender title];
-    input_thread_t * p_input = pl_CurrentInput( VLCIntf );
-
-    if( p_input != NULL )
-    {
-        vout_thread_t *p_vout = input_GetVout( p_input );
-        if( p_vout != NULL )
-        {
-            id o_vout_view = [[VLCCoreInteraction sharedInstance] voutView];
-            if( o_vout_view )
-            {
-                if( [o_title isEqualToString: _NS("Half Size") ] )
-                    [o_vout_view scaleWindowWithFactor: 0.5 animate: YES];
-                else if( [o_title isEqualToString: _NS("Normal Size") ] )
-                    [o_vout_view scaleWindowWithFactor: 1.0 animate: YES];
-                else if( [o_title isEqualToString: _NS("Double Size") ] )
-                    [o_vout_view scaleWindowWithFactor: 2.0 animate: YES];
-                else if( [o_title isEqualToString: _NS("Float on Top") ] )
-                    [o_vout_view toggleFloatOnTop];
-                else if( [o_title isEqualToString: _NS("Fit to Screen") ] )
-                {
-                    id o_window = [o_vout_view voutWindow];
-                    if( ![o_window isZoomed] )
-                        [o_window performZoom:self];
-                }
-                else if( [o_title isEqualToString: _NS("Snapshot") ] )
-                {
-                    [o_vout_view snapshot];
-                }
-                else
-                {
-                    [[VLCCoreInteraction sharedInstance] toggleFullscreen];
-                }
-            }
-            vlc_object_release( (vlc_object_t *)p_vout );
-        }
-        else
-        {
-            [[VLCCoreInteraction sharedInstance] toggleFullscreen];
-        }
-        vlc_object_release( p_input );
-    }
-}
-
 - (IBAction)telxTransparent:(id)sender
 {
     vlc_object_t *p_vbi;
index 4e3f72eeb557947a7b78bacc7bf15175557b5790..f7187cf2c67363c747e384a24e611c4bd2e752e9 100644 (file)
@@ -108,7 +108,7 @@ struct intf_sys_t
     BOOL nib_bookmarks_loaded;   /* Bookmarks nibfile */
     BOOL b_active_videoplayback;
 
-    IBOutlet id o_mainwindow;            /* VLCMainWindow */
+    id o_mainwindow;            /* VLCMainWindow */
 
     IBOutlet VLCControls * o_controls;     /* VLCControls    */
     IBOutlet VLCPlaylist * o_playlist;     /* VLCPlaylist    */
@@ -159,6 +159,7 @@ struct intf_sys_t
 - (id)wizard;
 - (id)embeddedList;
 - (id)getVideoViewAtPositionX: (int *)pi_x Y: (int *)pi_y withWidth: (unsigned int*)pi_width andHeight: (unsigned int*)pi_height;
+- (void)setNativeVideoSize:(NSSize)size;
 - (id)coreDialogProvider;
 - (id)eyeTVController;
 - (id)appleRemoteController;
@@ -172,6 +173,7 @@ struct intf_sys_t
 - (NSString *)VLCKeyToString:(NSString *)theString;
 - (unsigned int)VLCModifiersToCocoa:(NSString *)theString;
 - (void)updateCurrentlyUsedHotkeys;
+- (void)fullscreenChanged;
 - (void)PlaylistItemChanged;
 - (void)playbackStatusUpdated;
 - (void)playbackModeUpdated;
index 7333a5d516678e5910f70faaa300b532ed289f8c..47a93ff8717241339df32f1e328a8f929f74cf67 100644 (file)
@@ -132,7 +132,6 @@ int WindowOpen( vout_window_t *p_wnd, const vout_window_cfg_t *cfg )
         return VLC_EGENERIC;
     }
 
-    msg_Dbg( p_wnd, "looking for video view" );
     int i_x = cfg->x;
     int i_y = cfg->y;
     unsigned i_width = cfg->width;
@@ -145,6 +144,7 @@ int WindowOpen( vout_window_t *p_wnd, const vout_window_cfg_t *cfg )
         return VLC_EGENERIC;
     }
 
+    [[VLCMain sharedInstance] setNativeVideoSize:NSMakeSize( cfg->width, cfg->height )];
     [[VLCMain sharedInstance] setActiveVideoPlayback: YES];
     p_wnd->control = WindowControl;
     p_wnd->sys = (vout_window_sys_t *)VLCIntf;
@@ -158,7 +158,12 @@ static int WindowControl( vout_window_t *p_wnd, int i_query, va_list args )
     if( i_query == VOUT_WINDOW_SET_STATE )
         NSLog( @"WindowControl:VOUT_WINDOW_SET_STATE" );
     else if( i_query == VOUT_WINDOW_SET_SIZE )
+    {
         NSLog( @"WindowControl:VOUT_WINDOW_SET_SIZE" );
+        unsigned int i_width  = va_arg( args, unsigned int );
+        unsigned int i_height = va_arg( args, unsigned int );
+        [[VLCMain sharedInstance] setNativeVideoSize:NSMakeSize( i_width, i_height )];
+    }
     else if( i_query == VOUT_WINDOW_SET_FULLSCREEN )
         NSLog( @"WindowControl:VOUT_WINDOW_SET_FULLSCREEN" );
     else
@@ -340,7 +345,7 @@ static int VolumeUpdated( vlc_object_t *p_this, const char *psz_var,
                          vlc_value_t oldval, vlc_value_t new_val, void *param )
 {
     NSAutoreleasePool * o_pool = [[NSAutoreleasePool alloc] init];
-    [[VLCMain sharedInstance] updateVolume];
+    [[VLCMain sharedInstance] performSelectorOnMainThread:@selector(updateVolume) withObject:nil waitUntilDone:NO];
 
     [o_pool release];
     return VLC_SUCCESS;
@@ -357,12 +362,7 @@ static int ShowController( vlc_object_t *p_this, const char *psz_variable,
     intf_thread_t * p_intf = VLCIntf;
     if( p_intf && p_intf->p_sys )
     {
-        NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
-        if( [[[VLCCoreInteraction sharedInstance] voutView] isFullscreen] && config_GetInt( VLCIntf, "macosx-fspanel" ) )
-            [[[[VLCMain sharedInstance] controls] fspanel] fadeIn];
-        else
-            [[VLCMainWindow sharedInstance] makeKeyAndOrderFront: nil];
-        [o_pool release];
+        NSLog( @"fixme! we should implement ShowController here" );
     }
     return VLC_SUCCESS;
 }
@@ -375,8 +375,12 @@ static int FullscreenChanged( vlc_object_t *p_this, const char *psz_variable,
                      vlc_value_t old_val, vlc_value_t new_val, void *param )
 {
     intf_thread_t * p_intf = VLCIntf;
-    if( p_intf && p_intf->p_sys )
-        NSLog( @"we should update fullscreen state" ); //FIXME
+    if (p_intf)
+    {
+        NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
+        [[VLCMain sharedInstance] fullscreenChanged];
+        [o_pool release];
+    }
     return VLC_SUCCESS;
 }
 
@@ -1229,6 +1233,14 @@ unsigned int CocoaKeyToVLC( unichar i_key )
 
 #pragma mark -
 #pragma mark Interface updaters
+- (void)fullscreenChanged
+{
+    if(! [o_mainwindow isFullscreen] )
+        [o_mainwindow performSelectorOnMainThread:@selector(enterFullscreen) withObject:nil waitUntilDone:NO];
+    else
+        [o_mainwindow performSelectorOnMainThread:@selector(leaveFullscreen) withObject:nil waitUntilDone:NO];
+}
+
 - (void)PlaylistItemChanged
 {
     input_thread_t * p_input;
@@ -1240,7 +1252,8 @@ unsigned int CocoaKeyToVLC( unichar i_key )
         [o_mainmenu setRateControlsEnabled: YES];
         vlc_object_release( p_input );
     }
-    else[o_mainmenu setRateControlsEnabled: NO];
+    else
+        [o_mainmenu setRateControlsEnabled: NO];
 
     [o_playlist updateRowSelection];
     [o_mainwindow updateWindow];
@@ -1441,6 +1454,11 @@ unsigned int CocoaKeyToVLC( unichar i_key )
     return videoView;
 }
 
+- (void)setNativeVideoSize:(NSSize)size
+{
+    [o_mainwindow setNativeVideoSize:size];
+}
+
 - (id)embeddedList
 {
     if( o_embedded_list )
@@ -1748,10 +1766,8 @@ unsigned int CocoaKeyToVLC( unichar i_key )
 
 - (IBAction)saveDebugLog:(id)sender
 {
-    NSOpenPanel * saveFolderPanel = [[NSSavePanel alloc] init];
+    NSSavePanel * saveFolderPanel = [[NSSavePanel alloc] init];
 
-    [saveFolderPanel setCanChooseDirectories: NO];
-    [saveFolderPanel setCanChooseFiles: YES];
     [saveFolderPanel setCanSelectHiddenExtension: NO];
     [saveFolderPanel setCanCreateDirectories: YES];
     [saveFolderPanel setAllowedFileTypes: [NSArray arrayWithObject:@"rtfd"]];