[vlc-commits] windowed mac plugin: exit fullscreen if esc is pressed
Felix Paul Kühne
git at videolan.org
Wed Jan 16 02:09:47 CET 2013
npapi-vlc | branch: master | Felix Paul Kühne <fkuehne at videolan.org> | Wed Jan 16 00:56:09 2013 +0100| [4f514c98233bf3208d59f7c94e366b83fa85f962] | committer: Felix Paul Kühne
windowed mac plugin: exit fullscreen if esc is pressed
> http://git.videolan.org/gitweb.cgi/npapi-vlc.git/?a=commit;h=4f514c98233bf3208d59f7c94e366b83fa85f962
---
npapi/vlcplugin_mac.mm | 61 ++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 51 insertions(+), 10 deletions(-)
diff --git a/npapi/vlcplugin_mac.mm b/npapi/vlcplugin_mac.mm
index 2da7f32..56b2986 100644
--- a/npapi/vlcplugin_mac.mm
+++ b/npapi/vlcplugin_mac.mm
@@ -85,7 +85,10 @@
- (CGRect)_sliderRect;
@end
- at interface VLCFullscreenContentView : NSView
+ at interface VLCFullscreenContentView : NSView {
+ VlcPluginMac *_cppPlugin;
+}
+ at property (readwrite) VlcPluginMac * cppPlugin;
@end
@@ -204,8 +207,7 @@ void VlcPluginMac::toggle_fullscreen()
{
if (!get_options().get_enable_fs())
return;
- if (playlist_isplaying())
- libvlc_toggle_fullscreen(getMD());
+ libvlc_toggle_fullscreen(getMD());
this->update_controls();
if (get_fullscreen() == 0) {
@@ -218,6 +220,7 @@ void VlcPluginMac::toggle_fullscreen()
* a layer-backed view, which you'd get if you do it the other way around */
[fullscreenView setLayer: [CALayer layer]];
[fullscreenView setWantsLayer:YES];
+ [fullscreenView setCppPlugin: this];
}
[noMediaLayer removeFromSuperlayer];
@@ -249,17 +252,13 @@ void VlcPluginMac::set_fullscreen(int i_value)
{
if (!get_options().get_enable_fs())
return;
- if (playlist_isplaying())
- libvlc_set_fullscreen(getMD(), i_value);
+ libvlc_set_fullscreen(getMD(), i_value);
this->update_controls();
}
int VlcPluginMac::get_fullscreen()
{
- int r = 0;
- if (playlist_isplaying())
- r = libvlc_get_fullscreen(getMD());
- return r;
+ return libvlc_get_fullscreen(getMD());
}
void VlcPluginMac::set_toolbar_visible(bool b_value)
@@ -380,8 +379,14 @@ bool VlcPluginMac::handle_event(void *event)
set_toolbar_visible(false);
return true;
}
- case NPCocoaEventKeyUp:
case NPCocoaEventKeyDown:
+ {
+ if (cocoaEvent->data.key.keyCode == 53) {
+ toggle_fullscreen();
+ return true;
+ }
+ }
+ case NPCocoaEventKeyUp:
case NPCocoaEventFocusChanged:
case NPCocoaEventScrollWheel:
return true;
@@ -826,11 +831,13 @@ static CGImageRef createImageNamed(NSString *name)
[self setBackgroundColor:[NSColor blackColor]];
[self setHasShadow:YES];
[self setMovableByWindowBackground: YES];
+ [self setAcceptsMouseMovedEvents: YES];
[self center];
_customContentView = [[VLCFullscreenContentView alloc] initWithFrame:_initialFrame];
[[self contentView] setAutoresizesSubviews:YES];
[[self contentView] addSubview: _customContentView];
+ [self setInitialFirstResponder:_customContentView];
}
return self;
}
@@ -862,9 +869,43 @@ static CGImageRef createImageNamed(NSString *name)
[self setFrame:_initialFrame display:YES animate:YES];
}
+- (BOOL)canBecomeKeyWindow
+{
+ return YES;
+}
+
+- (BOOL)canBecomeMainWindow
+{
+ return YES;
+}
+
@end
@implementation VLCFullscreenContentView
+ at synthesize cppPlugin = _cppPlugin;
+
+- (BOOL)acceptsFirstResponder
+{
+ return YES;
+}
+
+- (void)keyDown:(NSEvent *)theEvent
+{
+ NSString * characters = [theEvent charactersIgnoringModifiers];
+ unichar key = 0;
+
+ if ([characters length] > 0) {
+ key = [[characters lowercaseString] characterAtIndex: 0];
+ if (key) {
+ /* Escape should always get you out of fullscreen */
+ if (key == (unichar) 0x1b) {
+ self.cppPlugin->toggle_fullscreen();
+ return;
+ }
+ }
+ }
+ [super keyDown: theEvent];
+}
@end
More information about the vlc-commits
mailing list