diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-01-01 15:07:25 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-01-01 15:17:59 -0500 |
commit | 29afe5a688f8ce7c56bcc0b6295dee21fdee28cd (patch) | |
tree | ec0e4a2ba6fe1a6109ff9c9ef03d8d86d91c5c85 | |
parent | 75a297632eef3de56990f1a702a8d496057f0575 (diff) | |
download | gtk+-29afe5a688f8ce7c56bcc0b6295dee21fdee28cd.tar.gz |
video: Stop playing when appropriate
When the widget gets unrealized or hidden, pause
the mediastream. Otherwise, audio might keep playing
unexpectedly.
-rw-r--r-- | gtk/gtkvideo.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/gtk/gtkvideo.c b/gtk/gtkvideo.c index d2cb23321a..5f3293ba64 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; @@ -165,12 +168,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 +280,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; |