summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan-Michael Brummer <jan.brummer@tabos.org>2019-05-02 15:50:01 +0200
committerJan-Michael Brummer <jan.brummer@tabos.org>2019-05-10 20:26:28 +0200
commitee9728ebb7cec15d86e672b2fbee74de4fe8cae6 (patch)
tree6ae0413a824af78354129f7a447341c882c32c6e
parentdcf7f1cb8ef2bc6c5528fae6198405df98fc8fb9 (diff)
downloadepiphany-ee9728ebb7cec15d86e672b2fbee74de4fe8cae6.tar.gz
Constrain pages popover to current window
Fixes: https://gitlab.gnome.org/GNOME/epiphany/issues/656
-rw-r--r--src/ephy-pages-popover.c35
-rw-r--r--src/meson.build1
2 files changed, 36 insertions, 0 deletions
diff --git a/src/ephy-pages-popover.c b/src/ephy-pages-popover.c
index a1ba5311e..b490d1a4b 100644
--- a/src/ephy-pages-popover.c
+++ b/src/ephy-pages-popover.c
@@ -23,6 +23,10 @@
#include "ephy-pages-popover.h"
+#ifdef GDK_WINDOWING_X11
+#include <gdk/gdkx.h>
+#endif
+
#define HANDY_USE_UNSTABLE_API
#include <handy.h>
#include "ephy-notebook.h"
@@ -160,6 +164,30 @@ ephy_pages_popover_dispose (GObject *object)
G_OBJECT_CLASS (ephy_pages_popover_parent_class)->dispose (object);
}
+#ifdef GDK_WINDOWING_X11
+static void
+ephy_pages_popover_get_preferred_height (GtkWidget *widget,
+ gint *minimum_height,
+ gint *natural_height)
+{
+ EphyPagesPopover *self = EPHY_PAGES_POPOVER (widget);
+ int height;
+
+ GTK_WIDGET_CLASS (ephy_pages_popover_parent_class)->get_preferred_height (widget,
+ minimum_height,
+ natural_height);
+ /* Ensure that popover won't leave current window */
+ height = gtk_widget_get_allocated_height (GTK_WIDGET (self->notebook));
+ gtk_scrolled_window_set_max_content_height (self->scrolled_window, height);
+}
+
+static GtkSizeRequestMode
+ephy_pages_popover_get_request_mode (GtkWidget *widget)
+{
+ return GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT;
+}
+#endif
+
static void
ephy_pages_popover_class_init (EphyPagesPopoverClass *klass)
{
@@ -169,6 +197,13 @@ ephy_pages_popover_class_init (EphyPagesPopoverClass *klass)
object_class->dispose = ephy_pages_popover_dispose;
object_class->finalize = ephy_pages_popover_finalize;
+#ifdef GDK_WINDOWING_X11
+ if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) {
+ widget_class->get_request_mode = ephy_pages_popover_get_request_mode;
+ widget_class->get_preferred_height = ephy_pages_popover_get_preferred_height;
+ }
+#endif
+
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/epiphany/gtk/pages-popover.ui");
gtk_widget_class_bind_template_child (widget_class, EphyPagesPopover, list_box);
gtk_widget_class_bind_template_child (widget_class, EphyPagesPopover, scrolled_window);
diff --git a/src/meson.build b/src/meson.build
index e463a5008..66597f5d4 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -61,6 +61,7 @@ libephymain_deps = [
ephymisc_dep,
ephysync_dep,
ephywidgets_dep,
+ gdk_dep,
libhandy_dep,
libnotify_dep
]