diff --git a/gtk/gtkvideo.c b/gtk/gtkvideo.c index 78f8ea080c..e976928bb7 100644 --- a/gtk/gtkvideo.c +++ b/gtk/gtkvideo.c @@ -60,6 +60,7 @@ struct _GtkVideo guint autoplay : 1; guint loop : 1; + guint grabbed : 1; }; enum @@ -82,6 +83,9 @@ gtk_video_hide_controls (gpointer data) { GtkVideo *self = data; + if (self->grabbed) + return G_SOURCE_CONTINUE; + gtk_revealer_set_reveal_child (GTK_REVEALER (self->controls_revealer), FALSE); self->controls_hide_source = 0; @@ -166,6 +170,17 @@ gtk_video_unmap (GtkWidget *widget) GTK_WIDGET_CLASS (gtk_video_parent_class)->unmap (widget); } +static void +gtk_video_grab_notify (GtkWidget *widget, + gboolean was_grabbed) +{ + GtkVideo *self = GTK_VIDEO (widget); + + self->grabbed = !was_grabbed; + + GTK_WIDGET_CLASS (gtk_video_parent_class)->grab_notify (widget, was_grabbed); +} + static void gtk_video_dispose (GObject *object) { @@ -255,6 +270,7 @@ gtk_video_class_init (GtkVideoClass *klass) widget_class->unmap = gtk_video_unmap; widget_class->grab_focus = gtk_widget_grab_focus_none; widget_class->focus = gtk_widget_focus_child; + widget_class->grab_notify = gtk_video_grab_notify; gobject_class->dispose = gtk_video_dispose; gobject_class->get_property = gtk_video_get_property; @@ -318,7 +334,7 @@ gtk_video_class_init (GtkVideoClass *klass) gtk_widget_class_bind_template_child (widget_class, GtkVideo, controls_revealer); gtk_widget_class_bind_template_callback (widget_class, gtk_video_motion); - gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_set_css_name (widget_class, I_("video")); } @@ -326,6 +342,7 @@ static void gtk_video_init (GtkVideo *self) { gtk_widget_init_template (GTK_WIDGET (self)); + } /**