macosx: implemented options to disable Apple Remote and Media keys support
authorFelix Paul Kühne <fkuehne@videolan.org>
Fri, 26 Jun 2009 11:00:43 +0000 (13:00 +0200)
committerFelix Paul Kühne <fkuehne@videolan.org>
Fri, 26 Jun 2009 11:04:21 +0000 (13:04 +0200)
Disabling AR will work instantly, while mediakey require a restart to update the setting. To be fixed later on.

extras/package/macosx/Resources/English.lproj/Preferences.nib/classes.nib [deleted file]
extras/package/macosx/Resources/English.lproj/Preferences.nib/info.nib [deleted file]
extras/package/macosx/Resources/English.lproj/Preferences.nib/keyedobjects.nib
modules/gui/macosx/intf.h
modules/gui/macosx/intf.m
modules/gui/macosx/macosx.m
modules/gui/macosx/simple_prefs.h
modules/gui/macosx/simple_prefs.m

diff --git a/extras/package/macosx/Resources/English.lproj/Preferences.nib/classes.nib b/extras/package/macosx/Resources/English.lproj/Preferences.nib/classes.nib
deleted file mode 100644 (file)
index 3f28442..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-{
-    IBClasses =     (
-                {
-            CLASS = FirstResponder;
-            LANGUAGE = ObjC;
-            SUPERCLASS = NSObject;
-        },
-                {
-            CLASS = NSApplication;
-            LANGUAGE = ObjC;
-            SUPERCLASS = NSResponder;
-        },
-                {
-            CLASS = NSObject;
-            LANGUAGE = ObjC;
-        },
-                {
-            CLASS = VLCApplication;
-            LANGUAGE = ObjC;
-            SUPERCLASS = NSApplication;
-        },
-                {
-            CLASS = VLCHotkeyChangeWindow;
-            LANGUAGE = ObjC;
-            SUPERCLASS = NSWindow;
-        },
-                {
-            ACTIONS =             {
-                buttonAction = id;
-                closePrefs = id;
-                resetAll = id;
-                savePrefs = id;
-            };
-            CLASS = VLCPrefs;
-            LANGUAGE = ObjC;
-            OUTLETS =             {
-                "o_basicFull_matrix" = id;
-                "o_cancel_btn" = id;
-                "o_prefs_view" = id;
-                "o_prefs_window" = id;
-                "o_reset_btn" = id;
-                "o_save_btn" = id;
-                "o_title" = id;
-                "o_tree" = id;
-            };
-            SUPERCLASS = NSObject;
-        },
-                {
-            ACTIONS =             {
-                audioSettingChanged = id;
-                buttonAction = id;
-                hotkeySettingChanged = id;
-                inputSettingChanged = id;
-                interfaceSettingChanged = id;
-                osdSettingChanged = id;
-                showFontPicker = id;
-                videoSettingChanged = id;
-            };
-            CLASS = VLCSimplePrefs;
-            LANGUAGE = ObjC;
-            OUTLETS =             {
-                "o_audio_dolby_pop" = id;
-                "o_audio_dolby_txt" = id;
-                "o_audio_effects_box" = id;
-                "o_audio_enable_ckb" = id;
-                "o_audio_general_box" = id;
-                "o_audio_headphone_ckb" = id;
-                "o_audio_lang_fld" = id;
-                "o_audio_lang_txt" = id;
-                "o_audio_last_box" = id;
-                "o_audio_last_ckb" = id;
-                "o_audio_lastpwd_sfld" = id;
-                "o_audio_lastpwd_txt" = id;
-                "o_audio_lastuser_fld" = id;
-                "o_audio_lastuser_txt" = id;
-                "o_audio_norm_ckb" = id;
-                "o_audio_norm_fld" = id;
-                "o_audio_norm_stepper" = id;
-                "o_audio_spdif_ckb" = id;
-                "o_audio_view" = id;
-                "o_audio_visual_pop" = id;
-                "o_audio_visual_txt" = id;
-                "o_audio_vol_fld" = id;
-                "o_audio_vol_sld" = id;
-                "o_audio_vol_txt" = id;
-                "o_hotkeys_change_btn" = id;
-                "o_hotkeys_change_cancel_btn" = id;
-                "o_hotkeys_change_keys_lbl" = id;
-                "o_hotkeys_change_lbl" = id;
-                "o_hotkeys_change_ok_btn" = id;
-                "o_hotkeys_change_taken_lbl" = id;
-                "o_hotkeys_change_win" = id;
-                "o_hotkeys_clear_btn" = id;
-                "o_hotkeys_lbl" = id;
-                "o_hotkeys_listbox" = id;
-                "o_hotkeys_view" = id;
-                "o_input_avi_pop" = id;
-                "o_input_avi_txt" = id;
-                "o_input_cachelevel_custom_txt" = id;
-                "o_input_cachelevel_pop" = id;
-                "o_input_cachelevel_txt" = id;
-                "o_input_caching_box" = id;
-                "o_input_httpproxy_fld" = id;
-                "o_input_httpproxy_txt" = id;
-                "o_input_httpproxypwd_sfld" = id;
-                "o_input_httpproxypwd_txt" = id;
-                "o_input_mux_box" = id;
-                "o_input_net_box" = id;
-                "o_input_postproc_fld" = id;
-                "o_input_postproc_txt" = id;
-                "o_input_rtsp_ckb" = id;
-                "o_input_serverport_fld" = id;
-                "o_input_serverport_txt" = id;
-                "o_input_skipLoop_pop" = id;
-                "o_input_skipLoop_txt" = id;
-                "o_input_view" = id;
-                "o_intf_art_pop" = id;
-                "o_intf_art_txt" = id;
-                "o_intf_embedded_ckb" = id;
-                "o_intf_fspanel_ckb" = id;
-                "o_intf_lang_pop" = id;
-                "o_intf_lang_txt" = id;
-                "o_intf_network_box" = id;
-                "o_intf_view" = id;
-                "o_osd_encoding_pop" = id;
-                "o_osd_encoding_txt" = id;
-                "o_osd_font_box" = id;
-                "o_osd_font_btn" = id;
-                "o_osd_font_color_pop" = id;
-                "o_osd_font_color_txt" = id;
-                "o_osd_font_fld" = id;
-                "o_osd_font_size_pop" = id;
-                "o_osd_font_size_txt" = id;
-                "o_osd_font_txt" = id;
-                "o_osd_lang_box" = id;
-                "o_osd_lang_fld" = id;
-                "o_osd_lang_txt" = id;
-                "o_osd_osd_box" = id;
-                "o_osd_osd_ckb" = id;
-                "o_osd_view" = id;
-                "o_sprefs_basicFull_matrix" = id;
-                "o_sprefs_basic_box" = id;
-                "o_sprefs_cancel_btn" = id;
-                "o_sprefs_controls_box" = id;
-                "o_sprefs_reset_btn" = id;
-                "o_sprefs_save_btn" = id;
-                "o_sprefs_win" = id;
-                "o_video_black_ckb" = id;
-                "o_video_device_pop" = id;
-                "o_video_device_txt" = id;
-                "o_video_display_box" = id;
-                "o_video_enable_ckb" = id;
-                "o_video_fullscreen_ckb" = id;
-                "o_video_onTop_ckb" = id;
-                "o_video_output_pop" = id;
-                "o_video_output_txt" = id;
-                "o_video_skipFrames_ckb" = id;
-                "o_video_snap_box" = id;
-                "o_video_snap_folder_btn" = id;
-                "o_video_snap_folder_fld" = id;
-                "o_video_snap_folder_txt" = id;
-                "o_video_snap_format_pop" = id;
-                "o_video_snap_format_txt" = id;
-                "o_video_snap_prefix_fld" = id;
-                "o_video_snap_prefix_txt" = id;
-                "o_video_snap_seqnum_ckb" = id;
-                "o_video_view" = id;
-            };
-            SUPERCLASS = NSObject;
-        },
-                {
-            CLASS = VLCSimplePrefsWindow;
-            LANGUAGE = ObjC;
-            SUPERCLASS = NSWindow;
-        }
-    );
-    IBVersion = 1;
-}
\ No newline at end of file
diff --git a/extras/package/macosx/Resources/English.lproj/Preferences.nib/info.nib b/extras/package/macosx/Resources/English.lproj/Preferences.nib/info.nib
deleted file mode 100644 (file)
index c6d81b6..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-       <key>IBDocumentLocation</key>
-       <string>76 135 356 240 0 0 1280 778 </string>
-       <key>IBEditorPositions</key>
-       <dict>
-               <key>2311</key>
-               <string>345 426 590 230 0 0 1280 778 </string>
-               <key>2330</key>
-               <string>345 222 590 502 0 0 1280 778 </string>
-               <key>2440</key>
-               <string>345 307 590 389 0 0 1280 778 </string>
-               <key>2523</key>
-               <string>345 341 590 343 0 0 1280 778 </string>
-               <key>2562</key>
-               <string>345 266 590 444 0 0 1280 778 </string>
-               <key>2668</key>
-               <string>345 256 590 457 0 0 1280 778 </string>
-       </dict>
-       <key>IBFramework Version</key>
-       <string>489.0</string>
-       <key>IBLastKnownRelativeProjectPath</key>
-       <string>../../vlc.xcodeproj</string>
-       <key>IBOldestOS</key>
-       <integer>5</integer>
-       <key>IBOpenObjects</key>
-       <array>
-               <integer>2265</integer>
-               <integer>1530</integer>
-               <integer>2562</integer>
-       </array>
-       <key>IBSystem Version</key>
-       <string>9G55</string>
-       <key>targetFramework</key>
-       <string>IBCocoaFramework</string>
-</dict>
-</plist>
index fe9382b..679c58b 100644 (file)
Binary files a/extras/package/macosx/Resources/English.lproj/Preferences.nib/keyedobjects.nib and b/extras/package/macosx/Resources/English.lproj/Preferences.nib/keyedobjects.nib differ
index 21b4225..e974688 100644 (file)
@@ -357,6 +357,7 @@ struct intf_sys_t
 - (id)controllerWindow;
 - (id)voutMenu;
 - (id)eyeTVController;
+- (id)appleRemoteController;
 - (void)applicationWillTerminate:(NSNotification *)notification;
 - (NSString *)localizedString:(const char *)psz;
 - (char *)delocalizeString:(NSString *)psz;
@@ -429,8 +430,10 @@ struct intf_sys_t
 @interface VLCApplication : NSApplication
 {
     BOOL b_justJumped;
+       BOOL b_mediaKeySupport;
 }
 
+- (void)enableMediaKeySupport:(BOOL)b_value;
 - (void)sendEvent: (NSEvent*)event;
 - (void)resetJump;
 
index c9f328b..28cef2c 100644 (file)
@@ -1012,7 +1012,8 @@ static NSString * VLCToolbarMediaControl     = @"VLCToolbarMediaControl";
 - (void)applicationDidBecomeActive:(NSNotification *)aNotification
 {
     if( !p_intf ) return;
-    [o_remote startListening: self];
+       if( config_GetInt( p_intf, "macosx-appleremote" ) == YES )
+               [o_remote startListening: self];
 }
 - (void)applicationDidResignActive:(NSNotification *)aNotification
 {
@@ -1494,6 +1495,11 @@ static unsigned int VLCModifiersToCocoa( unsigned int i_key )
     return nil;
 }
 
+- (id)appleRemoteController
+{
+       return o_remote;
+}
+
 #pragma mark -
 #pragma mark Polling
 
@@ -2848,49 +2854,62 @@ end:
 
 @implementation VLCApplication
 
-- (void)sendEvent: (NSEvent*)event
+- (void)awakeFromNib
 {
-    if( [event type] == NSSystemDefined && [event subtype] == 8 )
-       {
-               int keyCode = (([event data1] & 0xFFFF0000) >> 16);
-               int keyFlags = ([event data1] & 0x0000FFFF);
-               int keyState = (((keyFlags & 0xFF00) >> 8)) == 0xA;
-        int keyRepeat = (keyFlags & 0x1);
-
-        if( keyCode == NX_KEYTYPE_PLAY && keyState == 0 )
-            var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_PLAY_PAUSE );
+       b_mediaKeySupport = config_GetInt( VLCIntf, "macosx-mediakeys" );
+}
 
-        if( keyCode == NX_KEYTYPE_FAST && !b_justJumped )
-        {
-            if( keyState == 0 && keyRepeat == 0 )
-            {
-                    var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_NEXT );
-            }
-            else if( keyRepeat == 1 )
-            {
-                var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_JUMP_FORWARD_SHORT );
-                b_justJumped = YES;
-                [self performSelector:@selector(resetJump)
-                           withObject: NULL
-                           afterDelay:0.25];
-            }
-        }
+- (void)enableMediaKeySupport:(BOOL)b_value
+{
+       b_mediaKeySupport = b_value;
+}
 
-        if( keyCode == NX_KEYTYPE_REWIND && !b_justJumped )
-        {
-            if( keyState == 0 && keyRepeat == 0 )
-            {
-                var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_PREV );
-            }
-            else if( keyRepeat == 1 )
-            {
-                var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_JUMP_BACKWARD_SHORT );
-                b_justJumped = YES;
-                [self performSelector:@selector(resetJump)
-                           withObject: NULL
-                           afterDelay:0.25];
-            }
-        }
+- (void)sendEvent: (NSEvent*)event
+{
+       if( b_mediaKeySupport )
+       {
+               if( [event type] == NSSystemDefined && [event subtype] == 8 )
+               {
+                       int keyCode = (([event data1] & 0xFFFF0000) >> 16);
+                       int keyFlags = ([event data1] & 0x0000FFFF);
+                       int keyState = (((keyFlags & 0xFF00) >> 8)) == 0xA;
+                       int keyRepeat = (keyFlags & 0x1);
+
+                       if( keyCode == NX_KEYTYPE_PLAY && keyState == 0 )
+                               var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_PLAY_PAUSE );
+
+                       if( keyCode == NX_KEYTYPE_FAST && !b_justJumped )
+                       {
+                               if( keyState == 0 && keyRepeat == 0 )
+                               {
+                                               var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_NEXT );
+                               }
+                               else if( keyRepeat == 1 )
+                               {
+                                       var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_JUMP_FORWARD_SHORT );
+                                       b_justJumped = YES;
+                                       [self performSelector:@selector(resetJump)
+                                                          withObject: NULL
+                                                          afterDelay:0.25];
+                               }
+                       }
+
+                       if( keyCode == NX_KEYTYPE_REWIND && !b_justJumped )
+                       {
+                               if( keyState == 0 && keyRepeat == 0 )
+                               {
+                                       var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_PREV );
+                               }
+                               else if( keyRepeat == 1 )
+                               {
+                                       var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_JUMP_BACKWARD_SHORT );
+                                       b_justJumped = YES;
+                                       [self performSelector:@selector(resetJump)
+                                                          withObject: NULL
+                                                          afterDelay:0.25];
+                               }
+                       }
+               }
        }
        [super sendEvent: event];
 }
index 4c50c22..013f244 100644 (file)
@@ -1,13 +1,14 @@
 /*****************************************************************************
  * macosx.m: Mac OS X module for vlc
  *****************************************************************************
- * Copyright (C) 2001-2006 the VideoLAN team
+ * Copyright (C) 2001-2009 the VideoLAN team
  * $Id$
  *
  * Authors: Colin Delacroix <colin@zoy.org>
  *          Eugenio Jarosiewicz <ej0@cise.ufl.edu>
  *          Florian G. Pflug <fgp@phlo.org>
  *          Jon Lech Johansen <jon-vl@nanocrew.net>
+ *          
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -87,6 +88,13 @@ void CloseVideoGL ( vlc_object_t * );
 #define EQ_KEEP_LONGTEXT N_("By default, VLC keeps the last equalizer settings before " \
                             "termination. This feature can be disabled here.")
 
+#define USE_APPLE_REMOTE_TEXT N_("Allow playback control with the Apple Remote")
+#define USE_APPLE_REMOTE_LONGTEXT N_("By default, VLC can be remotely controlled with the Apple Remote.")
+
+#define USE_MEDIAKEYS_TEXT N_("Allow playback control with the media keys")
+#define USE_MEDIAKEYS_LONGTEXT N_("By default, VLC can be controlled using the media keys on modern Apple " \
+                                  "keyboards.")
+
 vlc_module_begin ()
     set_description( N_("Mac OS X interface") )
     set_capability( "interface", 200 )
@@ -101,6 +109,10 @@ vlc_module_begin ()
               false )
     add_bool( "macosx-fspanel", 1, NULL, FSPANEL_TEXT, FSPANEL_LONGTEXT,
               false )
+    add_bool( "macosx-appleremote", 1, NULL, USE_APPLE_REMOTE_TEXT, USE_APPLE_REMOTE_LONGTEXT,
+             false )
+    add_bool( "macosx-mediakeys", 1, NULL, USE_MEDIAKEYS_TEXT, USE_MEDIAKEYS_LONGTEXT,
+             false )
 
     add_submodule ()
         set_description( "Mac OS X OpenGL" )
index e8de186..458e46f 100644 (file)
@@ -89,6 +89,8 @@
     IBOutlet id o_intf_art_txt;
     IBOutlet id o_intf_embedded_ckb;
     IBOutlet id o_intf_fspanel_ckb;
+       IBOutlet id o_intf_appleremote_ckb;
+       IBOutlet id o_intf_mediakeys_ckb;
     IBOutlet id o_intf_lang_pop;
     IBOutlet id o_intf_lang_txt;
     IBOutlet id o_intf_network_box;
index b63b9ff..35a482d 100644 (file)
@@ -1,7 +1,7 @@
 /*****************************************************************************
 * simple_prefs.m: Simple Preferences for Mac OS X
 *****************************************************************************
-* Copyright (C) 2008 the VideoLAN team
+* Copyright (C) 2008-2009 the VideoLAN team
 * $Id$
 *
 * Authors: Felix Paul Kühne <fkuehne at videolan dot org>
@@ -27,6 +27,8 @@
 #import <vlc_interface.h>
 #import <vlc_dialog.h>
 #import "misc.h"
+#import "intf.h"
+#import "AppleRemote.h"
 
 static NSString* VLCSPrefsToolbarIdentifier = @"Our Simple Preferences Toolbar Identifier";
 static NSString* VLCIntfSettingToolbarIdentifier = @"Intf Settings Item Identifier";
@@ -262,6 +264,8 @@ create_toolbar_item( NSString * o_itemIdent, NSString * o_name, NSString * o_des
     [o_intf_fspanel_ckb setTitle: _NS("Show Fullscreen Controller")];
     [o_intf_lang_txt setStringValue: _NS("Language")];
     [o_intf_network_box setTitle: _NS("Privacy / Network Interaction")];
+       [o_intf_appleremote_ckb setTitle: _NS("Allow playback control with the Apple Remote")];
+       [o_intf_mediakeys_ckb setTitle: _NS("Allow playback control with the media keys")];
     
     /* Subtitles and OSD */
     [o_osd_encoding_txt setStringValue: _NS("Default Encoding")];
@@ -413,6 +417,8 @@ create_toolbar_item( NSString * o_itemIdent, NSString * o_name, NSString * o_des
 
     [o_intf_fspanel_ckb setState: config_GetInt( p_intf, "macosx-fspanel" )];
     [o_intf_embedded_ckb setState: config_GetInt( p_intf, "embedded-video" )];
+       [o_intf_appleremote_ckb setState: config_GetInt( p_intf, "macosx-appleremote" )];
+       [o_intf_mediakeys_ckb setState: config_GetInt( p_intf, "macosx-mediakeys" )];
 
     /******************
      * audio settings *
@@ -734,6 +740,14 @@ static inline void save_module_list( intf_thread_t * p_intf, id object, const ch
 
         config_PutInt( p_intf, "macosx-fspanel", [o_intf_fspanel_ckb state] );
         config_PutInt( p_intf, "embedded-video", [o_intf_embedded_ckb state] );
+               config_PutInt( p_intf, "macosx-appleremote", [o_intf_appleremote_ckb state] );
+               config_PutInt( p_intf, "macosx-mediakeys", [o_intf_mediakeys_ckb state] );
+
+               /* activate stuff without restart */
+               if( [o_intf_appleremote_ckb state] == YES )
+                       [[[VLCMain sharedInstance] appleRemoteController] startListening: [VLCMain sharedInstance]];
+               else
+                       [[[VLCMain sharedInstance] appleRemoteController] stopListening: [VLCMain sharedInstance]];
 
         /* okay, let's save our changes to vlcrc */
         i = config_SaveConfigFile( p_intf, "main" );