summaryrefslogtreecommitdiffstats
path: root/WebKit/mac/WebView/WebVideoFullscreenController.mm
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2009-11-05 09:23:40 +0000
committerSteve Block <steveblock@google.com>2009-11-10 22:41:12 +0000
commitcac0f67c402d107cdb10971b95719e2ff9c7c76b (patch)
treed182c7f87211c6f201a5f038e332336493ebdbe7 /WebKit/mac/WebView/WebVideoFullscreenController.mm
parent4b2ef0f288e7c6c4602f621b7a0e9feed304b70e (diff)
downloadexternal_webkit-cac0f67c402d107cdb10971b95719e2ff9c7c76b.zip
external_webkit-cac0f67c402d107cdb10971b95719e2ff9c7c76b.tar.gz
external_webkit-cac0f67c402d107cdb10971b95719e2ff9c7c76b.tar.bz2
Merge webkit.org at r50258 : Initial merge by git.
Change-Id: I1a9e1dc4ed654b69174ad52a4f031a07240f37b0
Diffstat (limited to 'WebKit/mac/WebView/WebVideoFullscreenController.mm')
-rw-r--r--WebKit/mac/WebView/WebVideoFullscreenController.mm40
1 files changed, 37 insertions, 3 deletions
diff --git a/WebKit/mac/WebView/WebVideoFullscreenController.mm b/WebKit/mac/WebView/WebVideoFullscreenController.mm
index 6592ad2..fe07f3e 100644
--- a/WebKit/mac/WebView/WebVideoFullscreenController.mm
+++ b/WebKit/mac/WebView/WebVideoFullscreenController.mm
@@ -42,6 +42,10 @@
SOFT_LINK_FRAMEWORK(QTKit)
SOFT_LINK_CLASS(QTKit, QTMovieView)
+SOFT_LINK_POINTER(QTKit, QTMovieRateDidChangeNotification, NSString *)
+
+#define QTMovieRateDidChangeNotification getQTMovieRateDidChangeNotification()
+
@interface WebVideoFullscreenWindow : NSWindow
#if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_TIGER)
<NSAnimationDelegate>
@@ -76,6 +80,7 @@ SOFT_LINK_CLASS(QTKit, QTMovieView)
{
ASSERT(!_backgroundFullscreenWindow);
ASSERT(!_fadeAnimation);
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
@@ -109,7 +114,15 @@ SOFT_LINK_CLASS(QTKit, QTMovieView)
_mediaElement = mediaElement;
if ([self isWindowLoaded]) {
QTMovieView *movieView = [[self fullscreenWindow] movieView];
- [movieView setMovie:_mediaElement->platformMedia().qtMovie];
+ QTMovie *movie = _mediaElement->platformMedia().qtMovie;
+
+ ASSERT(movieView);
+ ASSERT(movie);
+ [movieView setMovie:movie];
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(rateChanged:)
+ name:QTMovieRateDidChangeNotification
+ object:movie];
}
}
@@ -135,6 +148,9 @@ SOFT_LINK_CLASS(QTKit, QTMovieView)
- (void)windowDidExitFullscreen
{
+ // If we don't clear the movie, underlying movie data structures are leaked and the movie keeps playing <rdar://problem/7295070>
+ [[[self fullscreenWindow] movieView] setMovie:nil];
+
[self clearFadeAnimation];
[[self window] close];
[self setWindow:nil];
@@ -264,14 +280,21 @@ static NSWindow *createBackgroundFullscreenWindow(NSRect frame, int level)
#pragma mark -
#pragma mark Window callback
+- (void)_requestExit
+{
+ if (_mediaElement)
+ _mediaElement->exitFullscreen();
+ _forceDisableAnimation = NO;
+}
+
- (void)requestExitFullscreenWithAnimation:(BOOL)animation
{
if (_isEndingFullscreen)
return;
_forceDisableAnimation = !animation;
- _mediaElement->exitFullscreen();
- _forceDisableAnimation = NO;
+ [self performSelector:@selector(_requestExit) withObject:nil afterDelay:0];
+
}
- (void)requestExitFullscreen
@@ -283,6 +306,16 @@ static NSWindow *createBackgroundFullscreenWindow(NSRect frame, int level)
{
[_hudController fadeWindowIn];
}
+
+#pragma mark -
+#pragma mark QTMovie callbacks
+
+- (void)rateChanged:(NSNotification *)unusedNotification
+{
+ UNUSED_PARAM(unusedNotification);
+ [_hudController updateRate];
+}
+
@end
@implementation WebVideoFullscreenWindow
@@ -439,6 +472,7 @@ static NSWindow *createBackgroundFullscreenWindow(NSRect frame, int level)
[super resignKeyWindow];
[[self windowController] requestExitFullscreenWithAnimation:NO];
}
+
@end
#endif /* ENABLE(VIDEO) */