From 1c7da3ea99ff73d0996d5256a1bc49b43a021b70 Mon Sep 17 00:00:00 2001 From: Derk-Jan Hartman Date: Mon, 2 Aug 2004 00:54:51 +0000 Subject: [PATCH] * Fixed hotkey/OSD behaviour for OS X. Also prevents code duplicity. Testing would be welcomed very much. --- modules/gui/macosx/controls.m | 187 ++++++++++------------------------ modules/gui/macosx/intf.h | 1 + modules/gui/macosx/intf.m | 4 +- modules/gui/macosx/vout.m | 32 +++--- 4 files changed, 77 insertions(+), 147 deletions(-) diff --git a/modules/gui/macosx/controls.m b/modules/gui/macosx/controls.m index fa0e67b8e9..6d7b32156c 100644 --- a/modules/gui/macosx/controls.m +++ b/modules/gui/macosx/controls.m @@ -44,120 +44,73 @@ - (IBAction)play:(id)sender { vlc_value_t val; - playlist_t * p_playlist; intf_thread_t * p_intf = VLCIntf; - input_thread_t * p_input = vlc_object_find( p_intf, VLC_OBJECT_INPUT, - FIND_ANYWHERE ); - - val.i_int = PLAYING_S; - if( p_input ) - { - var_Get( p_input, "state", &val ); - } - if( p_input && val.i_int != PAUSE_S ) - { - vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Pause" ) ); - val.i_int = PAUSE_S; - var_Set( p_input, "state", val ); - } - else - { - p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, + playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); - if( p_playlist ) + if( p_playlist ) + { + vlc_mutex_lock( &p_playlist->object_lock ); + if( p_playlist->i_size <= 0 ) { - vlc_mutex_lock( &p_playlist->object_lock ); - if( p_playlist->i_size ) - { - vlc_mutex_unlock( &p_playlist->object_lock ); - vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Play" ) ); - playlist_Play( p_playlist ); - vlc_object_release( p_playlist ); - } - else - { - vlc_mutex_unlock( &p_playlist->object_lock ); - vlc_object_release( p_playlist ); - [o_open openFileGeneric: nil]; - } + vlc_mutex_unlock( &p_playlist->object_lock ); + vlc_object_release( p_playlist ); + [o_open openFileGeneric: nil]; } + else + { + vlc_mutex_unlock( &p_playlist->object_lock ); + vlc_object_release( p_playlist ); + } + } - if( p_input ) vlc_object_release( p_input ); + val.i_int = config_GetInt( p_intf, "key-play-pause" ); + var_Set( p_intf->p_vlc, "key-pressed", val ); } - (IBAction)stop:(id)sender { + vlc_value_t val; intf_thread_t * p_intf = VLCIntf; - playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); - if( p_playlist != NULL ) - { - vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Stop" ) ); - playlist_Stop( p_playlist ); - vlc_object_release( p_playlist ); - } + val.i_int = config_GetInt( p_intf, "key-stop" ); + var_Set( p_intf->p_vlc, "key-pressed", val ); } - (IBAction)faster:(id)sender { + vlc_value_t val; intf_thread_t * p_intf = VLCIntf; - input_thread_t * p_input = vlc_object_find( p_intf, VLC_OBJECT_INPUT, - FIND_ANYWHERE ); - if( p_input != NULL ) - { - vlc_value_t val; val.b_bool = VLC_TRUE; - - var_Set( p_input, "rate-faster", val ); - vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Faster" ) ); - vlc_object_release( p_input ); - } + val.i_int = config_GetInt( p_intf, "key-faster" ); + var_Set( p_intf->p_vlc, "key-pressed", val ); } - (IBAction)slower:(id)sender { + vlc_value_t val; intf_thread_t * p_intf = VLCIntf; - input_thread_t * p_input = vlc_object_find( p_intf, VLC_OBJECT_INPUT, - FIND_ANYWHERE ); - if( p_input != NULL ) - { - vlc_value_t val; val.b_bool = VLC_TRUE; - - var_Set( p_input, "rate-slower", val ); - vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Slower" ) ); - vlc_object_release( p_input ); - } + val.i_int = config_GetInt( p_intf, "key-slower" ); + var_Set( p_intf->p_vlc, "key-pressed", val ); } - (IBAction)prev:(id)sender { + vlc_value_t val; intf_thread_t * p_intf = VLCIntf; - playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); - if( p_playlist ) - { - playlist_Prev( p_playlist ); - vlc_object_release( p_playlist ); - vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Previous" ) ); - } + val.i_int = config_GetInt( p_intf, "key-prev" ); + var_Set( p_intf->p_vlc, "key-pressed", val ); } - (IBAction)next:(id)sender { + vlc_value_t val; intf_thread_t * p_intf = VLCIntf; - playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); - if( p_playlist ) - { - playlist_Next( p_playlist ); - vlc_object_release( p_playlist ); - vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Next" ) ); - } + val.i_int = config_GetInt( p_intf, "key-next" ); + var_Set( p_intf->p_vlc, "key-pressed", val ); } - (IBAction)random:(id)sender { - intf_thread_t * p_intf = VLCIntf; vlc_value_t val; + intf_thread_t * p_intf = VLCIntf; playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); if( p_playlist == NULL ) @@ -184,8 +137,8 @@ - (IBAction)repeat:(id)sender { - intf_thread_t * p_intf = VLCIntf; vlc_value_t val; + intf_thread_t * p_intf = VLCIntf; playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); if( p_playlist == NULL ) @@ -216,8 +169,8 @@ - (IBAction)loop:(id)sender { - intf_thread_t * p_intf = VLCIntf; vlc_value_t val; + intf_thread_t * p_intf = VLCIntf; playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); if( p_playlist == NULL ) @@ -248,71 +201,45 @@ - (IBAction)forward:(id)sender { + vlc_value_t val; intf_thread_t * p_intf = VLCIntf; - input_thread_t * p_input = vlc_object_find( p_intf, VLC_OBJECT_INPUT, - FIND_ANYWHERE ); - if( p_input != NULL ) - { - vlc_value_t time; - time.i_time = 10 * 1000000; - var_Set( p_input, "time-offset", time ); - vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Jump +10 Seconds" ) ); - vlc_object_release( p_input ); - } + val.i_int = config_GetInt( p_intf, "key-jump+10sec" ); + var_Set( p_intf->p_vlc, "key-pressed", val ); } - (IBAction)backward:(id)sender { + vlc_value_t val; intf_thread_t * p_intf = VLCIntf; - input_thread_t * p_input = vlc_object_find( p_intf, VLC_OBJECT_INPUT, - FIND_ANYWHERE ); - if( p_input != NULL ) - { - vlc_value_t time; - time.i_time = -10 * 1000000; - var_Set( p_input, "time-offset", time ); - vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Jump -10 Seconds" ) ); - vlc_object_release( p_input ); - } + val.i_int = config_GetInt( p_intf, "key-jump-10sec" ); + var_Set( p_intf->p_vlc, "key-pressed", val ); } - (IBAction)volumeUp:(id)sender { + vlc_value_t val; intf_thread_t * p_intf = VLCIntf; - - if( p_intf->p_sys->b_mute ) - { - [self mute: nil]; - } - - aout_VolumeUp( p_intf, 1, NULL ); - + val.i_int = config_GetInt( p_intf, "key-vol-up" ); + var_Set( p_intf->p_vlc, "key-pressed", val ); [self updateVolumeSlider]; } - (IBAction)volumeDown:(id)sender { + vlc_value_t val; intf_thread_t * p_intf = VLCIntf; - - if( p_intf->p_sys->b_mute ) - { - [self mute: nil]; - } - - aout_VolumeDown( p_intf, 1, NULL ); - + val.i_int = config_GetInt( p_intf, "key-vol-down" ); + var_Set( p_intf->p_vlc, "key-pressed", val ); [self updateVolumeSlider]; } - (IBAction)mute:(id)sender { + vlc_value_t val; intf_thread_t * p_intf = VLCIntf; - audio_volume_t i_volume; - - aout_VolumeMute( p_intf, &i_volume ); - p_intf->p_sys->b_mute = ( i_volume == 0 ); - + val.i_int = config_GetInt( p_intf, "key-vol-mute" ); + var_Set( p_intf->p_vlc, "key-pressed", val ); [self updateVolumeSlider]; } @@ -332,9 +259,6 @@ aout_VolumeGet( p_intf, &i_volume ); [o_volumeslider setFloatValue: (float)(i_volume / AOUT_VOLUME_STEP)]; - - vout_OSDMessage( p_intf, DEFAULT_CHAN, "Vol %d%%", - i_volume*200/AOUT_VOLUME_MAX ); } - (IBAction)windowAction:(id)sender @@ -343,7 +267,7 @@ NSString *o_title = [sender title]; NSArray *o_windows = [NSApp orderedWindows]; NSEnumerator *o_enumerator = [o_windows objectEnumerator]; - vout_thread_t *p_vout = vlc_object_find( VLCIntf, VLC_OBJECT_VOUT, + vout_thread_t *p_vout = vlc_object_find( VLCIntf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); if( p_vout != NULL ) @@ -670,13 +594,14 @@ else if( [[o_mi title] isEqualToString: _NS("Step Forward")] || [[o_mi title] isEqualToString: _NS("Step Backward")] ) { + bEnabled = FALSE; if( p_playlist != NULL && p_input != NULL ) { - bEnabled = TRUE; /* FIXME p_input seekable */ - } - else - { - bEnabled = FALSE; + var_Get( p_input, "seekable", &val); + if( val.b_bool ) + { + bEnabled = TRUE; + } } } else if( [[o_mi title] isEqualToString: _NS("Mute")] ) diff --git a/modules/gui/macosx/intf.h b/modules/gui/macosx/intf.h index a9e639271b..4f868a0c58 100644 --- a/modules/gui/macosx/intf.h +++ b/modules/gui/macosx/intf.h @@ -27,6 +27,7 @@ #include #include #include +#include #include diff --git a/modules/gui/macosx/intf.m b/modules/gui/macosx/intf.m index e8d1e838f3..a293755019 100644 --- a/modules/gui/macosx/intf.m +++ b/modules/gui/macosx/intf.m @@ -271,7 +271,7 @@ static VLCMain *_o_sharedMainInstance = nil; - (id)init { - if (_o_sharedMainInstance) { + if( _o_sharedMainInstance) { [self dealloc]; } else { _o_sharedMainInstance = [super init]; @@ -1082,7 +1082,7 @@ static VLCMain *_o_sharedMainInstance = nil; - (void)playStatusUpdated:(int)i_status { - if( i_status ) + if( i_status != PAUSE_S ) { [o_btn_play setImage: o_img_pause]; [o_btn_play setAlternateImage: o_img_pause_pressed]; diff --git a/modules/gui/macosx/vout.m b/modules/gui/macosx/vout.m index e949849ae0..37369af786 100644 --- a/modules/gui/macosx/vout.m +++ b/modules/gui/macosx/vout.m @@ -1149,14 +1149,15 @@ static void QTFreePicture( vout_thread_t *p_vout, picture_t *p_pic ) - (BOOL)canBecomeKeyWindow { - return( YES ); + return YES; } -/* + +/* Sometimes crashes VLC.... - (BOOL)performKeyEquivalent:(NSEvent *)o_event { - return [[VLCMain sharedInstance] hasDefinedShortcutKey:o_event]; -} -*/ + return [[VLCMain sharedInstance] hasDefinedShortcutKey:o_event]; +}*/ + - (void)keyDown:(NSEvent *)o_event { unichar key = 0; @@ -1189,13 +1190,9 @@ static void QTFreePicture( vout_thread_t *p_vout, picture_t *p_pic ) } else if ( key == ' ' ) { - playlist_t *p_playlist = vlc_object_find( p_vout, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); - if ( p_playlist != NULL ) - { - playlist_Pause( p_playlist ); - vlc_object_release( p_playlist); - } + vlc_value_t val; + val.i_int = config_GetInt( p_vout, "key-play-pause" ); + var_Set( p_vout->p_vlc, "key-pressed", val ); } else { @@ -1212,8 +1209,15 @@ static void QTFreePicture( vout_thread_t *p_vout, picture_t *p_pic ) - (void)updateTitle { NSMutableString * o_title; - playlist_t * p_playlist = vlc_object_find( p_vout, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); + playlist_t * p_playlist; + + if( p_vout == NULL ) + { + return; + } + + p_playlist = vlc_object_find( p_vout, VLC_OBJECT_PLAYLIST, + FIND_ANYWHERE ); if( p_playlist == NULL ) { -- 2.39.2