diff options
author | Benjamin Otte <otte.benjamin@googlemail.com> | 2021-01-01 21:54:22 +0000 |
---|---|---|
committer | Benjamin Otte <otte.benjamin@googlemail.com> | 2021-01-01 21:54:22 +0000 |
commit | a7164208d3ecbc6672f9d8a9f2ddbd520e0ada75 (patch) | |
tree | eafb3c1e375fc2032c3080dbe36fe8aaba1d7aee | |
parent | 75a297632eef3de56990f1a702a8d496057f0575 (diff) | |
parent | 20f3d1608d15159f171d8c77859c06ef9c1c4e68 (diff) | |
download | gtk+-a7164208d3ecbc6672f9d8a9f2ddbd520e0ada75.tar.gz |
Merge branch 'video-stop' into 'master'
video: Stop playing when appropriate
See merge request GNOME/gtk!3022
-rw-r--r-- | gtk/gtkvideo.c | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/gtk/gtkvideo.c b/gtk/gtkvideo.c index d2cb23321a..7eee5fd5ba 100644 --- a/gtk/gtkvideo.c +++ b/gtk/gtkvideo.c @@ -131,6 +131,9 @@ gtk_video_unrealize (GtkWidget *widget) { GtkVideo *self = GTK_VIDEO (widget); + if (self->autoplay && self->media_stream) + gtk_media_stream_pause (self->media_stream); + if (self->media_stream) { GdkSurface *surface; @@ -149,7 +152,9 @@ gtk_video_map (GtkWidget *widget) GTK_WIDGET_CLASS (gtk_video_parent_class)->map (widget); - if (self->autoplay && self->media_stream) + if (self->autoplay && + self->media_stream && + gtk_media_stream_is_prepared (self->media_stream)) gtk_media_stream_play (self->media_stream); } @@ -165,12 +170,21 @@ gtk_video_unmap (GtkWidget *widget) gtk_revealer_set_reveal_child (GTK_REVEALER (self->controls_revealer), FALSE); } - /* XXX: pause video here? */ - GTK_WIDGET_CLASS (gtk_video_parent_class)->unmap (widget); } static void +gtk_video_hide (GtkWidget *widget) +{ + GtkVideo *self = GTK_VIDEO (widget); + + if (self->autoplay && self->media_stream) + gtk_media_stream_pause (self->media_stream); + + GTK_WIDGET_CLASS (gtk_video_parent_class)->hide (widget); +} + +static void gtk_video_set_focus_child (GtkWidget *widget, GtkWidget *child) { @@ -268,6 +282,7 @@ gtk_video_class_init (GtkVideoClass *klass) widget_class->unrealize = gtk_video_unrealize; widget_class->map = gtk_video_map; widget_class->unmap = gtk_video_unmap; + widget_class->hide = gtk_video_hide; widget_class->set_focus_child = gtk_video_set_focus_child; gobject_class->dispose = gtk_video_dispose; @@ -547,7 +562,9 @@ gtk_video_notify_cb (GtkMediaStream *stream, gtk_video_update_playing (self); if (g_str_equal (pspec->name, "prepared")) { - if (self->autoplay && gtk_media_stream_is_prepared (stream)) + if (self->autoplay && + gtk_media_stream_is_prepared (stream) && + gtk_widget_get_mapped (GTK_WIDGET (self))) gtk_media_stream_play (stream); } } @@ -605,7 +622,9 @@ gtk_video_set_media_stream (GtkVideo *self, "notify", G_CALLBACK (gtk_video_notify_cb), self); - if (self->autoplay) + if (self->autoplay && + gtk_media_stream_is_prepared (stream) && + gtk_widget_get_mapped (GTK_WIDGET (self))) gtk_media_stream_play (stream); } |