diff options
author | Lionel Landwerlin <llandwerlin@gmail.com> | 2015-11-30 23:29:36 +0000 |
---|---|---|
committer | Lionel Landwerlin <lionel.g.landwerlin@intel.com> | 2015-12-10 14:22:34 +0000 |
commit | 80208a260e2c657753a03869b2693f3c0cb94efe (patch) | |
tree | 4474bbd6187802707a612c557e413e8c221304c8 /src/totem-object.c | |
parent | c941276bf535779cbdebfa3862569bed1f38f585 (diff) | |
download | totem-80208a260e2c657753a03869b2693f3c0cb94efe.tar.gz |
backend: embed the fullscreen top header bar in the video widget
On wayland the video has its own subsurface. It is directly painted by the
compositor on top of Totem's main window. As a result on wayland the top
header bar is not visible in fullscreen mode.
To solve this issue, we can embed the top header bar in the video widget.
This solves this issue nicely by having the same behavior on X11 and
Wayland.
https://bugzilla.gnome.org/show_bug.cgi?id=758876
Diffstat (limited to 'src/totem-object.c')
-rw-r--r-- | src/totem-object.c | 67 |
1 files changed, 12 insertions, 55 deletions
diff --git a/src/totem-object.c b/src/totem-object.c index f41962058..fcb5c4acc 100644 --- a/src/totem-object.c +++ b/src/totem-object.c @@ -1635,30 +1635,6 @@ totem_object_pause (TotemObject *totem) } } -static void -update_toolbar_visibility (TotemObject *totem, - gboolean animate) -{ - gboolean visible; - guint duration; - - if (totem->controls_visibility != TOTEM_CONTROLS_FULLSCREEN) { - visible = FALSE; - duration = 0; - } else { - g_object_get (G_OBJECT (totem->bvw), "reveal-controls", &visible, NULL); - duration = animate ? 250 : 0; - } - - if (visible) - gtk_widget_show (totem->revealer); - - /* We don't change the transition type, because it causes - * a queue resize, and it might short-circuit the animation */ - gtk_revealer_set_transition_duration (GTK_REVEALER (totem->revealer), duration); - gtk_revealer_set_reveal_child (GTK_REVEALER (totem->revealer), visible); -} - gboolean window_state_event_cb (GtkWidget *window, GdkEventWindowState *event, @@ -1682,7 +1658,8 @@ window_state_event_cb (GtkWidget *window, show_controls (totem, TRUE); } - update_toolbar_visibility (totem, FALSE); + bacon_video_widget_set_fullscreen (totem->bvw, + totem->controls_visibility == TOTEM_CONTROLS_FULLSCREEN); action = g_action_map_lookup_action (G_ACTION_MAP (totem), "fullscreen"); g_simple_action_set_state (G_SIMPLE_ACTION (action), @@ -2473,14 +2450,6 @@ update_fill (TotemObject *totem, gdouble level) } static void -on_reveal_controls_changed (GObject *gobject, - GParamSpec *pspec, - TotemObject *totem) -{ - update_toolbar_visibility (totem, TRUE); -} - -static void update_seekable (TotemObject *totem) { gboolean seekable; @@ -3960,24 +3929,13 @@ grilo_widget_setup (TotemObject *totem) } static void -child_revealed_changed_cb (GObject *object, - GParamSpec *pspec, - gpointer user_data) -{ - gboolean val; - - g_object_get (object, "child-revealed", &val, NULL); - if (!val) - gtk_widget_hide (GTK_WIDGET (object)); -} - -static void add_fullscreen_toolbar (TotemObject *totem) { - GtkWidget *item; + GtkWidget *container, *item; GMenuModel *menu; - totem->revealer = GTK_WIDGET (gtk_builder_get_object (totem->xml, "toolbar-revealer")); + container = GTK_WIDGET (bacon_video_widget_get_header_controls_object (totem->bvw)); + totem->fullscreen_header = g_object_new (TOTEM_TYPE_MAIN_TOOLBAR, "show-search-button", FALSE, "show-select-button", FALSE, @@ -4010,11 +3968,8 @@ add_fullscreen_toolbar (TotemObject *totem) G_CALLBACK (popup_menu_shown_cb), totem); totem->fullscreen_gear_button = item; - gtk_container_add (GTK_CONTAINER (totem->revealer), totem->fullscreen_header); + gtk_container_add (GTK_CONTAINER (container), totem->fullscreen_header); gtk_widget_show_all (totem->fullscreen_header); - - g_signal_connect (totem->revealer, "notify::child-revealed", - G_CALLBACK (child_revealed_changed_cb), NULL); } void @@ -4023,6 +3978,8 @@ video_widget_create (TotemObject *totem) GError *err = NULL; GtkContainer *container; BaconVideoWidget **bvw; + GdkWindow *window; + gboolean fullscreen; totem->bvw = BACON_VIDEO_WIDGET (bacon_video_widget_new (&err)); @@ -4032,6 +3989,10 @@ video_widget_create (TotemObject *totem) g_error_free (err); } + fullscreen = window && ((gdk_window_get_state (window) & GDK_WINDOW_STATE_FULLSCREEN) != 0); + + window = gtk_widget_get_window (totem->win); + bacon_video_widget_set_fullscreen (totem->bvw, fullscreen); totem->controls = bacon_video_widget_get_controls_object (totem->bvw); g_signal_connect_after (G_OBJECT (totem->bvw), @@ -4071,10 +4032,6 @@ video_widget_create (TotemObject *totem) G_CALLBACK (on_error_event), totem); g_signal_connect (G_OBJECT (totem->bvw), - "notify::reveal-controls", - G_CALLBACK (on_reveal_controls_changed), - totem); - g_signal_connect (G_OBJECT (totem->bvw), "seek-requested", G_CALLBACK (on_seek_requested_event), totem); |