Commit 36276b8d authored by Benjamin Pracht's avatar Benjamin Pracht

* Backport of 15488

parent 79c0a584
...@@ -63,6 +63,7 @@ ...@@ -63,6 +63,7 @@
- (IBAction)volumeSliderUpdated:(id)sender; - (IBAction)volumeSliderUpdated:(id)sender;
- (IBAction)windowAction:(id)sender; - (IBAction)windowAction:(id)sender;
- (BOOL)keyEvent:(NSEvent *)o_event;
- (void)setupVarMenuItem:(NSMenuItem *)o_mi - (void)setupVarMenuItem:(NSMenuItem *)o_mi
target:(vlc_object_t *)p_object target:(vlc_object_t *)p_object
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include "controls.h" #include "controls.h"
#include <vlc_osd.h> #include <vlc_osd.h>
/***************************************************************************** /*****************************************************************************
* VLCControls implementation * VLCControls implementation
*****************************************************************************/ *****************************************************************************/
...@@ -77,6 +78,32 @@ ...@@ -77,6 +78,32 @@
var_Set( p_intf->p_vlc, "key-pressed", val ); var_Set( p_intf->p_vlc, "key-pressed", val );
} }
/* Small helper method */
-(id) getVoutView
{
id o_window;
id o_vout_view = nil;
id o_embedded_vout_list = [[VLCMain sharedInstance] getEmbeddedList];
NSEnumerator *o_enumerator = [[NSApp orderedWindows] objectEnumerator];
while( !o_vout_view && ( o_window = [o_enumerator nextObject] ) )
{
/* We have an embedded vout */
if( [o_embedded_vout_list windowContainsEmbedded: o_window] )
{
o_vout_view = [o_embedded_vout_list getViewForWindow: o_window];
}
/* We have a detached vout */
else if( [[o_window className] isEqualToString: @"VLCWindow"] )
{
msg_Dbg( VLCIntf, "detached vout controls.m call getVoutView" );
o_vout_view = [o_window getVoutView];
}
}
return o_vout_view;
}
- (IBAction)stop:(id)sender - (IBAction)stop:(id)sender
{ {
vlc_value_t val; vlc_value_t val;
...@@ -269,31 +296,13 @@ ...@@ -269,31 +296,13 @@
- (IBAction)windowAction:(id)sender - (IBAction)windowAction:(id)sender
{ {
id o_window = [NSApp keyWindow];
NSString *o_title = [sender title]; 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 ); FIND_ANYWHERE );
if( p_vout != NULL ) if( p_vout != NULL )
{ {
id o_embedded_vout_list = [[VLCMain sharedInstance] getEmbeddedList]; id o_vout_view = [self getVoutView];
while ((o_window = [o_enumerator nextObject]))
{
id o_vout_view = nil;
/* We have an embedded vout */
if( [o_embedded_vout_list windowContainsEmbedded: o_window] )
{
o_vout_view = [o_embedded_vout_list getViewForWindow: o_window];
}
/* We have a detached Vout */
else if( [[o_window className] isEqualToString: @"VLCWindow"] )
{
msg_Dbg( VLCIntf, "detached vout controls.m call getVoutView" );
o_vout_view = [o_window getVoutView];
}
if( o_vout_view ) if( o_vout_view )
{ {
if( [o_title isEqualToString: _NS("Half Size") ] ) if( [o_title isEqualToString: _NS("Half Size") ] )
...@@ -306,6 +315,7 @@ ...@@ -306,6 +315,7 @@
[o_vout_view toggleFloatOnTop]; [o_vout_view toggleFloatOnTop];
else if( [o_title isEqualToString: _NS("Fit to Screen") ] ) else if( [o_title isEqualToString: _NS("Fit to Screen") ] )
{ {
id o_window = [o_vout_view getWindow];
if( ![o_window isZoomed] ) if( ![o_window isZoomed] )
[o_window performZoom:self]; [o_window performZoom:self];
} }
...@@ -317,8 +327,6 @@ ...@@ -317,8 +327,6 @@
{ {
[o_vout_view toggleFullscreen]; [o_vout_view toggleFullscreen];
} }
break;
}
} }
vlc_object_release( (vlc_object_t *)p_vout ); vlc_object_release( (vlc_object_t *)p_vout );
} }
...@@ -339,6 +347,38 @@ ...@@ -339,6 +347,38 @@
} }
- (BOOL)keyEvent:(NSEvent *)o_event
{
BOOL eventHandled = NO;
unichar key = [[o_event charactersIgnoringModifiers] characterAtIndex: 0];
if( key )
{
vout_thread_t *p_vout = vlc_object_find( VLCIntf, VLC_OBJECT_VOUT,
FIND_ANYWHERE );
if( p_vout != NULL )
{
/* Escape */
if( key == (unichar) 0x1b )
{
id o_vout_view = [self getVoutView];
if( o_vout_view && [o_vout_view isFullscreen] )
{
[o_vout_view toggleFullscreen];
eventHandled = YES;
}
}
else if( key == ' ' )
{
[self play:self];
eventHandled = YES;
}
vlc_object_release( (vlc_object_t *)p_vout );
}
}
return eventHandled;
}
- (void)setupVarMenuItem:(NSMenuItem *)o_mi - (void)setupVarMenuItem:(NSMenuItem *)o_mi
target:(vlc_object_t *)p_object target:(vlc_object_t *)p_object
var:(const char *)psz_variable var:(const char *)psz_variable
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include "intf.h" /* VLCApplication */ #include "intf.h" /* VLCApplication */
#include "misc.h" #include "misc.h"
#include "playlist.h" #include "playlist.h"
#include "controls.h"
/***************************************************************************** /*****************************************************************************
* VLCControllerWindow * VLCControllerWindow
...@@ -46,7 +47,8 @@ ...@@ -46,7 +47,8 @@
- (BOOL)performKeyEquivalent:(NSEvent *)o_event - (BOOL)performKeyEquivalent:(NSEvent *)o_event
{ {
return [[VLCMain sharedInstance] hasDefinedShortcutKey:o_event]; return [[VLCMain sharedInstance] hasDefinedShortcutKey:o_event] ||
[(VLCControls *)[[VLCMain sharedInstance] getControls] keyEvent:o_event];
} }
@end @end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment