From bac60945e4bbef5f47793b3a7db1fb3704b593a9 Mon Sep 17 00:00:00 2001 From: Enno Boland Date: Sat, 5 Nov 2016 09:17:52 +0100 Subject: [PATCH] gtk+3: fix menu missplacement with firefox on hidpi --- ...x-screen-and-monitor-size-calculatio.patch | 83 +++++++++++++++++++ srcpkgs/gtk+3/template | 2 +- 2 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/gtk+3/patches/0001-gdkscreen-x11-Fix-screen-and-monitor-size-calculatio.patch diff --git a/srcpkgs/gtk+3/patches/0001-gdkscreen-x11-Fix-screen-and-monitor-size-calculatio.patch b/srcpkgs/gtk+3/patches/0001-gdkscreen-x11-Fix-screen-and-monitor-size-calculatio.patch new file mode 100644 index 0000000000..5cd59d4590 --- /dev/null +++ b/srcpkgs/gtk+3/patches/0001-gdkscreen-x11-Fix-screen-and-monitor-size-calculatio.patch @@ -0,0 +1,83 @@ +From 0d945f06faee49788191e3e28f797f72959b3583 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Mon, 10 Oct 2016 16:34:28 +0200 +Subject: [PATCH] gdkscreen-x11: Fix screen and monitor size calculation + +The monitors are already in scaled pixels, so scaling again when retrieving +the screen size is wrong. + +With GDK_SCALE unset, the initial monitor sizes are unscaled, and when the +xsettings client sets a scale > 1, the monitor sizes should be updated. + +The end result is that the monitor sizes start out wrong, and get +corrected on the first xrandr event, while the screen size starts out +right and becomes wrong after the event. + +This patch fixes Firefox misplacing menus and popovers when the xrandr +configuration changes while it is running. + +Fix for the X11 side of + +https://bugzilla.gnome.org/show_bug.cgi?id=772202 +--- + gdk/x11/gdkscreen-x11.c | 16 ++++------------ + 1 file changed, 4 insertions(+), 12 deletions(-) + +diff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c +index 7738a47adfed1484..28a43a69bedbe955 100644 +--- gdk/x11/gdkscreen-x11.c ++++ gdk/x11/gdkscreen-x11.c +@@ -49,6 +49,7 @@ + static void gdk_x11_screen_dispose (GObject *object); + static void gdk_x11_screen_finalize (GObject *object); + static void init_randr_support (GdkScreen *screen); ++static void process_monitors_change (GdkScreen *screen); + + enum + { +@@ -82,13 +83,13 @@ gdk_x11_screen_get_display (GdkScreen *screen) + gint + gdk_x11_screen_get_width (GdkScreen *screen) + { +- return GDK_X11_SCREEN (screen)->width / GDK_X11_SCREEN (screen)->window_scale; ++ return GDK_X11_SCREEN (screen)->width; + } + + gint + gdk_x11_screen_get_height (GdkScreen *screen) + { +- return GDK_X11_SCREEN (screen)->height / GDK_X11_SCREEN (screen)->window_scale; ++ return GDK_X11_SCREEN (screen)->height; + } + + static gint +@@ -906,10 +907,8 @@ void + _gdk_x11_screen_set_window_scale (GdkX11Screen *x11_screen, + gint scale) + { +- GdkX11Display *x11_display = GDK_X11_DISPLAY (x11_screen->display); + GList *toplevels, *l; + GdkWindow *root; +- int i; + + if (x11_screen->window_scale == scale) + return; +@@ -928,14 +927,7 @@ _gdk_x11_screen_set_window_scale (GdkX11Screen *x11_screen, + _gdk_x11_window_set_window_scale (window, scale); + } + +- for (i = 0; i < x11_display->monitors->len; i++) +- { +- GdkMonitor *monitor = GDK_MONITOR (x11_display->monitors->pdata[i]); +- +- gdk_monitor_set_scale_factor (monitor, scale); +- } +- +- g_signal_emit_by_name (GDK_SCREEN (x11_screen), "monitors-changed"); ++ process_monitors_change (GDK_SCREEN (x11_screen)); + } + + /* +-- +2.10.1 + diff --git a/srcpkgs/gtk+3/template b/srcpkgs/gtk+3/template index 50c8736ceb..776c8d5efe 100644 --- a/srcpkgs/gtk+3/template +++ b/srcpkgs/gtk+3/template @@ -1,7 +1,7 @@ # Template build file for 'gtk+3'. pkgname=gtk+3 version=3.22.2 -revision=1 +revision=2 wrksrc="gtk+-${version}" build_style=gnu-configure configure_args="--disable-schemas-compile --enable-gtk2-dependency