summaryrefslogtreecommitdiff
path: root/src/totem-object.c
diff options
context:
space:
mode:
authorLionel Landwerlin <llandwerlin@gmail.com>2015-11-30 23:29:36 +0000
committerLionel Landwerlin <lionel.g.landwerlin@intel.com>2015-12-10 14:22:34 +0000
commit80208a260e2c657753a03869b2693f3c0cb94efe (patch)
tree4474bbd6187802707a612c557e413e8c221304c8 /src/totem-object.c
parentc941276bf535779cbdebfa3862569bed1f38f585 (diff)
downloadtotem-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.c67
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);