1
mirror of https://code.videolan.org/videolan/vlc synced 2024-09-04 09:11:33 +02:00

macosx: expand AppleScript API for menu navigation and menu status checks

This commit is contained in:
Felix Paul Kühne 2016-06-05 14:06:55 +02:00
parent 4c2de37f93
commit e799040c18
6 changed files with 103 additions and 0 deletions

1
NEWS
View File

@ -158,6 +158,7 @@ Mac OS X Interface
* new AppleScript API giving access to audio desynchronization
* Support for building with disabled sparkle update mechanism
* New configure flag to disable automatic updates
* Expanded AppleScript API for menu detection and navigation
iOS:
* Dropped support for iOS 6.x

View File

@ -70,6 +70,12 @@
- (void)startListeningWithAppleRemote;
- (void)stopListeningWithAppleRemote;
- (void)menuFocusActivate;
- (void)moveMenuFocusLeft;
- (void)moveMenuFocusRight;
- (void)moveMenuFocusUp;
- (void)moveMenuFocusDown;
- (void)addSubtitlesToCurrentInput:(NSArray *)paths;
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender;

View File

@ -1057,6 +1057,57 @@ static int BossCallback(vlc_object_t *p_this, const char *psz_var,
[_remote stopListening:self];
}
#pragma mark - menu navigation
- (void)menuFocusActivate
{
input_thread_t *p_input_thread = pl_CurrentInput(getIntf());
if (p_input_thread == NULL)
return;
input_Control(p_input_thread, INPUT_NAV_ACTIVATE, NULL );
vlc_object_release(p_input_thread);
}
- (void)moveMenuFocusLeft
{
input_thread_t *p_input_thread = pl_CurrentInput(getIntf());
if (p_input_thread == NULL)
return;
input_Control(p_input_thread, INPUT_NAV_LEFT, NULL );
vlc_object_release(p_input_thread);
}
- (void)moveMenuFocusRight
{
input_thread_t *p_input_thread = pl_CurrentInput(getIntf());
if (p_input_thread == NULL)
return;
input_Control(p_input_thread, INPUT_NAV_RIGHT, NULL );
vlc_object_release(p_input_thread);
}
- (void)moveMenuFocusUp
{
input_thread_t *p_input_thread = pl_CurrentInput(getIntf());
if (p_input_thread == NULL)
return;
input_Control(p_input_thread, INPUT_NAV_UP, NULL );
vlc_object_release(p_input_thread);
}
- (void)moveMenuFocusDown
{
input_thread_t *p_input_thread = pl_CurrentInput(getIntf());
if (p_input_thread == NULL)
return;
input_Control(p_input_thread, INPUT_NAV_DOWN, NULL );
vlc_object_release(p_input_thread);
}
/* Helper method for the remote control interface in order to trigger forward/backward and volume
increase/decrease as long as the user holds the left/right, plus/minus button */
- (void) executeHoldActionForRemoteButton: (NSNumber*) buttonIdentifierNumber

View File

@ -47,5 +47,6 @@
@property (readonly) int durationOfCurrentItem;
@property (readonly) NSString *pathOfCurrentItem;
@property (readonly) NSString *nameOfCurrentItem;
@property (readonly) BOOL playbackShowsMenu;
@end

View File

@ -102,6 +102,16 @@
[[VLCCoreInteraction sharedInstance] volumeUp];
else if ([o_command isEqualToString:@"volumeDown"])
[[VLCCoreInteraction sharedInstance] volumeDown];
else if ([o_command isEqualToString:@"moveMenuFocusUp"])
[[VLCCoreInteraction sharedInstance] moveMenuFocusUp];
else if ([o_command isEqualToString:@"moveMenuFocusDown"])
[[VLCCoreInteraction sharedInstance] moveMenuFocusDown];
else if ([o_command isEqualToString:@"moveMenuFocusLeft"])
[[VLCCoreInteraction sharedInstance] moveMenuFocusLeft];
else if ([o_command isEqualToString:@"moveMenuFocusRight"])
[[VLCCoreInteraction sharedInstance] moveMenuFocusRight];
else if ([o_command isEqualToString:@"menuFocusActivate"])
[[VLCCoreInteraction sharedInstance] menuFocusActivate];
else if ([o_command isEqualToString:@"stepForward"]) {
//default: forwardShort
if (o_parameter) {
@ -268,4 +278,38 @@
return [[VLCCoreInteraction sharedInstance] nameOfCurrentPlaylistItem];
}
- (BOOL)playbackShowsMenu {
input_thread_t *p_input_thread = pl_CurrentInput(getIntf());
if (!p_input_thread)
return NO;
int i_current_title = var_GetInteger(p_input_thread, "title");
input_title_t **p_input_title;
int count;
/* fetch data */
int coreret = input_Control(p_input_thread, INPUT_GET_FULL_TITLE_INFO,
&p_input_title, &count);
vlc_object_release(p_input_thread);
if (coreret != VLC_SUCCESS)
return NO;
BOOL ret = NO;
if (count > 0 && i_current_title < count) {
ret = p_input_title[i_current_title]->i_flags & INPUT_TITLE_MENU;
}
/* free array */
for (int i = 0; i < count; i++) {
vlc_input_title_Delete(p_input_title[i]);
}
free(p_input_title);
return ret;
}
@end