From 4384fd8c60f06d4f355a9e29b9cdd181d2962843 Mon Sep 17 00:00:00 2001 From: Kalev Lember Date: Wed, 28 Sep 2016 09:39:58 +0200 Subject: Backport a patch to fix shifted content in totem and gnome-maps https://bugzilla.redhat.com/show_bug.cgi?id=1377741 --- 0001-wayland-Avoid-negative-size-constraints.patch | 93 ++++++++++++++++++++++ gtk3.spec | 9 ++- 2 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 0001-wayland-Avoid-negative-size-constraints.patch diff --git a/0001-wayland-Avoid-negative-size-constraints.patch b/0001-wayland-Avoid-negative-size-constraints.patch new file mode 100644 index 0000000..7922462 --- /dev/null +++ b/0001-wayland-Avoid-negative-size-constraints.patch @@ -0,0 +1,93 @@ +From dbd0923b5f7b4a7cdea182c8d20085c013c4571c Mon Sep 17 00:00:00 2001 +From: Olivier Fourdan +Date: Tue, 27 Sep 2016 16:48:57 +0200 +Subject: [PATCH] wayland: Avoid negative size constraints + +Setting the shadow width earlier as done with commit 4cb1b96 to address +bug 771561 proved to cause unexpected side effects on size_allocate +signal propagation. + +As the window is sized correctly earlier, the size_allocate signal is +not emitted again in gtk_widget_size_allocate_with_baseline() which +prevents clutter-gtk from relocating its child widget correctly. + +To avoid this issue, revert commit 4cb1b96 but make sure the values +passed as min and max size is never negative in Wayland as this is a +protocol error. + +With this, the min/max size will be wrong for a short amount of time, +during the state transition, until the shadow width is updated from +gdk_window_set_shadow_width(). + +This approach is much safer and less intrusive than changing the +size_allocate logic in gtk. + +This reverts commit 4cb1b9645e84054c059f174240e8e288c4befe05. + +Bugzilla: https://bugzilla.gnome.org/show_bug.cgi?id=771915 +--- + gdk/wayland/gdkwindow-wayland.c | 8 ++++---- + gtk/gtkwindow.c | 14 -------------- + 2 files changed, 4 insertions(+), 18 deletions(-) + +diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c +index fa8dbe0..f35c4c8 100644 +--- a/gdk/wayland/gdkwindow-wayland.c ++++ b/gdk/wayland/gdkwindow-wayland.c +@@ -2992,8 +2992,8 @@ gdk_wayland_window_set_geometry_hints (GdkWindow *window, + + if (geom_mask & GDK_HINT_MIN_SIZE) + { +- width = geometry->min_width - (impl->margin_left + impl->margin_right); +- height = geometry->min_height - (impl->margin_top + impl->margin_bottom); ++ width = MAX (0, geometry->min_width - (impl->margin_left + impl->margin_right)); ++ height = MAX (0, geometry->min_height - (impl->margin_top + impl->margin_bottom)); + } + else + { +@@ -3005,8 +3005,8 @@ gdk_wayland_window_set_geometry_hints (GdkWindow *window, + + if (geom_mask & GDK_HINT_MAX_SIZE) + { +- width = geometry->max_width - (impl->margin_left + impl->margin_right); +- height = geometry->max_height - (impl->margin_top + impl->margin_bottom); ++ width = MAX (0, geometry->max_width - (impl->margin_left + impl->margin_right)); ++ height = MAX (0, geometry->max_height - (impl->margin_top + impl->margin_bottom)); + } + else + { +diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c +index 14a11c3..1a4b14b 100644 +--- a/gtk/gtkwindow.c ++++ b/gtk/gtkwindow.c +@@ -7529,19 +7529,6 @@ update_window_style_classes (GtkWindow *window) + } + + static void +-update_window_borders (GtkWindow *window) +-{ +- GtkWindowPrivate *priv = window->priv; +- GtkBorder window_border = { 0 }; +- +- if (priv->client_decorated && priv->use_client_shadow) +- { +- get_shadow_width (window, &window_border); +- update_shadow_width (window, &window_border); +- } +-} +- +-static void + popover_size_allocate (GtkWidget *widget, + GtkWindowPopover *popover, + GtkWindow *window) +@@ -7811,7 +7798,6 @@ gtk_window_state_event (GtkWidget *widget, + { + update_window_style_classes (window); + update_window_buttons (window); +- update_window_borders (window); + gtk_widget_queue_resize (widget); + } + +-- +2.7.4 + diff --git a/gtk3.spec b/gtk3.spec index 8a4c839..56c78dc 100644 --- a/gtk3.spec +++ b/gtk3.spec @@ -18,13 +18,16 @@ Name: gtk3 Version: 3.22.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: The GIMP ToolKit (GTK+), a library for creating GUIs for X License: LGPLv2+ URL: http://www.gtk.org Source0: http://download.gnome.org/sources/gtk+/3.22/gtk+-%{version}.tar.xz +# Backported from upstream +Patch0: 0001-wayland-Avoid-negative-size-constraints.patch + BuildRequires: pkgconfig(atk) >= %{atk_version} BuildRequires: pkgconfig(atk-bridge-2.0) BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version} @@ -157,6 +160,7 @@ the functionality of the installed %{name} package. %prep %setup -q -n gtk+-%{version} +%patch0 -p1 %build @@ -330,6 +334,9 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache %{_datadir}/installed-tests %changelog +* Wed Sep 28 2016 Kalev Lember - 3.22.0-2 +- Backport a patch to fix shifted content in totem and gnome-maps (#1377741) + * Tue Sep 20 2016 Kalev Lember - 3.22.0-1 - Update to 3.22.0 -- cgit