diff options
author | Alexander Mikhaylenko <alexm@gnome.org> | 2021-03-23 18:52:05 +0500 |
---|---|---|
committer | Alexander Mikhaylenko <alexm@gnome.org> | 2021-03-24 17:10:26 +0500 |
commit | 0549ac463e3f38fed0c111730242ea9196b745cf (patch) | |
tree | 299c46e3fe707610286d1054ba53696d75920211 | |
parent | 184cdf797c9f78ae600a2873c7df0ed4b705a54f (diff) | |
download | epiphany-wip/exalm/fullscreen.tar.gz |
header-bar: Hide menu popover when fullscreeningwip/exalm/fullscreen
Since the focus after pressing the fullscreen button is inside the popover,
neither it nor header bar would hide on their own. We want them to hide
though, so hide the popover first, then header bar will hide properly.
-rw-r--r-- | src/ephy-header-bar.c | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/src/ephy-header-bar.c b/src/ephy-header-bar.c index 104374628..4d8e41176 100644 --- a/src/ephy-header-bar.c +++ b/src/ephy-header-bar.c @@ -38,6 +38,8 @@ #include <glib/gi18n.h> #include <handy.h> +#define POPOVER_HIDE_DELAY 300 + enum { PROP_0, PROP_WINDOW, @@ -63,6 +65,9 @@ struct _EphyHeaderBar { GtkWidget *restore_button; GtkWidget *combined_stop_reload_button; GtkWidget *combined_stop_reload_image; + GtkWidget *page_menu_popover; + + guint popover_hide_timeout_id; }; G_DEFINE_TYPE (EphyHeaderBar, ephy_header_bar, GTK_TYPE_HEADER_BAR) @@ -116,6 +121,16 @@ sync_chromes_visibility (EphyHeaderBar *header_bar) gtk_widget_set_visible (header_bar->page_menu_button, chrome & EPHY_WINDOW_CHROME_MENU); } +static gboolean +hide_timeout_cb (EphyHeaderBar *header_bar) +{ + gtk_popover_popdown (GTK_POPOVER (header_bar->page_menu_popover)); + + header_bar->popover_hide_timeout_id = 0; + + return G_SOURCE_REMOVE; +} + void fullscreen_changed_cb (EphyHeaderBar *header_bar) { @@ -126,6 +141,13 @@ fullscreen_changed_cb (EphyHeaderBar *header_bar) gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (header_bar), !fullscreen); gtk_widget_set_visible (header_bar->restore_button, fullscreen); ephy_action_bar_set_is_fullscreen (header_bar->action_bar_start, fullscreen); + + if (fullscreen) { + g_clear_handle_id (&header_bar->popover_hide_timeout_id, g_source_remove); + + header_bar->popover_hide_timeout_id = + g_timeout_add (POPOVER_HIDE_DELAY, (GSourceFunc)hide_timeout_cb, header_bar); + } } static void @@ -168,7 +190,6 @@ ephy_header_bar_constructed (GObject *object) { EphyHeaderBar *header_bar = EPHY_HEADER_BAR (object); GtkWidget *button; - GtkWidget *page_menu_popover; GtkWidget *event_box; GtkBuilder *builder; EphyEmbedShell *embed_shell; @@ -263,7 +284,7 @@ ephy_header_bar_constructed (GObject *object) gtk_widget_set_valign (button, GTK_ALIGN_CENTER); g_type_ensure (G_TYPE_THEMED_ICON); builder = gtk_builder_new_from_resource ("/org/gnome/epiphany/gtk/page-menu-popover.ui"); - page_menu_popover = GTK_WIDGET (gtk_builder_get_object (builder, "page-menu-popover")); + header_bar->page_menu_popover = GTK_WIDGET (gtk_builder_get_object (builder, "page-menu-popover")); header_bar->zoom_level_label = GTK_WIDGET (gtk_builder_get_object (builder, "zoom-level")); if (ephy_embed_shell_get_mode (embed_shell) == EPHY_EMBED_SHELL_MODE_APPLICATION) { gtk_widget_destroy (GTK_WIDGET (gtk_builder_get_object (builder, "new-window-separator"))); @@ -306,7 +327,7 @@ ephy_header_bar_constructed (GObject *object) } g_settings_bind (EPHY_SETTINGS_WEB, EPHY_PREFS_WEB_ENABLE_WEBEXTENSIONS, gtk_builder_get_object (builder, "extensions-button"), "visible", G_SETTINGS_BIND_DEFAULT); - gtk_menu_button_set_popover (GTK_MENU_BUTTON (button), page_menu_popover); + gtk_menu_button_set_popover (GTK_MENU_BUTTON (button), header_bar->page_menu_popover); g_object_unref (builder); gtk_header_bar_pack_end (GTK_HEADER_BAR (header_bar), button); @@ -341,6 +362,16 @@ ephy_header_bar_constructed (GObject *object) } static void +ephy_header_bar_dispose (GObject *object) +{ + EphyHeaderBar *header_bar = EPHY_HEADER_BAR (object); + + g_clear_handle_id (&header_bar->popover_hide_timeout_id, g_source_remove); + + G_OBJECT_CLASS (ephy_header_bar_parent_class)->dispose (object); +} + +static void ephy_header_bar_init (EphyHeaderBar *header_bar) { } @@ -353,6 +384,7 @@ ephy_header_bar_class_init (EphyHeaderBarClass *klass) gobject_class->set_property = ephy_header_bar_set_property; gobject_class->get_property = ephy_header_bar_get_property; gobject_class->constructed = ephy_header_bar_constructed; + gobject_class->dispose = ephy_header_bar_dispose; object_properties[PROP_WINDOW] = g_param_spec_object ("window", |