Update to 3.19.9

This commit is contained in:
Richard Hughes 2016-02-17 17:21:36 +00:00
parent 5af8c4a1bd
commit 54aabc5a1e
5 changed files with 7 additions and 214 deletions

1
.gitignore vendored
View File

@ -129,3 +129,4 @@ gtk+-2.90.5.tar.bz2
/gtk+-3.19.6.tar.xz
/gtk+-3.19.7.tar.xz
/gtk+-3.19.8.tar.xz
/gtk+-3.19.9.tar.xz

View File

@ -1,45 +0,0 @@
From 5b395e7bb44651f57246e9dcc78d6e1bd373f6a6 Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Fri, 13 Jun 2014 14:38:03 +0200
Subject: [PATCH] x11: Avoid setting has_pointer_focus if a EWMH compliant WM
is present
This is mostly useful to have focus behave sanely on lack of WM, so avoid
any check there if we're positive there is a WM handling focus.
https://bugzilla.gnome.org/show_bug.cgi?id=677329
---
gdk/x11/gdkdevicemanager-core-x11.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/gdk/x11/gdkdevicemanager-core-x11.c b/gdk/x11/gdkdevicemanager-core-x11.c
index 8d6848869e0d..c4aac3f4dee9 100644
--- a/gdk/x11/gdkdevicemanager-core-x11.c
+++ b/gdk/x11/gdkdevicemanager-core-x11.c
@@ -820,6 +820,7 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
int mode)
{
GdkToplevelX11 *toplevel;
+ GdkX11Screen *x11_screen;
gboolean had_focus;
g_return_if_fail (GDK_IS_WINDOW (window));
@@ -880,11 +881,14 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
toplevel->has_focus = (focus_in) ? TRUE : FALSE;
break;
case NotifyPointer:
+ x11_screen = GDK_X11_SCREEN (gdk_window_get_screen (window));
+
/* The X server sends NotifyPointer/NotifyGrab,
* but the pointer focus is ignored while a
* grab is in effect
*/
- if (mode != NotifyGrab &&
+ if (!x11_screen->wmspec_check_window &&
+ mode != NotifyGrab &&
#ifdef XINPUT_2
mode != XINotifyPassiveGrab &&
mode != XINotifyPassiveUngrab &&
--
2.5.0

View File

@ -1,159 +0,0 @@
From 4bb5bc005f8ffea31fa104a7238b855c7c20cba6 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 29 Jan 2016 11:19:03 -0500
Subject: [PATCH] wayland: Don't call set_busy twice on the same surface
If the compositor is using a shared memory buffer allocated by
a client, then it's the client's responsibility to refrain from
destroying the buffer until the compositor releases it.
This is accomplished by taking a reference to the cairo surface
assocatiated with the buffer after a frame, and dropping the
reference when the compositor releases the buffer.
In some cases though, the compositor doesn't release the buffer
until a new buffer is set, so if we have staged drawing before
the frame completes we can end up taking multiple references to
the buffer and keeping it alive after it's released.
This commit solves the problem by ensuring we only call
_gdk_wayland_shm_surface_set_busy if isn't already busy.
https://bugzilla.gnome.org/show_bug.cgi?id=761312
---
gdk/wayland/gdkdisplay-wayland.c | 3 +++
gdk/wayland/gdkwindow-wayland.c | 2 +-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c
index f200800..a589756 100644
--- a/gdk/wayland/gdkdisplay-wayland.c
+++ b/gdk/wayland/gdkdisplay-wayland.c
@@ -1020,54 +1020,57 @@ _gdk_wayland_display_create_shm_surface (GdkWaylandDisplay *display,
width*scale, height*scale,
stride, WL_SHM_FORMAT_ARGB8888);
wl_buffer_add_listener (data->buffer, &buffer_listener, surface);
cairo_surface_set_user_data (surface, &gdk_wayland_cairo_key,
data, gdk_wayland_cairo_surface_destroy);
cairo_surface_set_device_scale (surface, scale, scale);
status = cairo_surface_status (surface);
if (status != CAIRO_STATUS_SUCCESS)
{
g_critical (G_STRLOC ": Unable to create Cairo image surface: %s",
cairo_status_to_string (status));
}
return surface;
}
struct wl_buffer *
_gdk_wayland_shm_surface_get_wl_buffer (cairo_surface_t *surface)
{
GdkWaylandCairoSurfaceData *data = cairo_surface_get_user_data (surface, &gdk_wayland_cairo_key);
return data->buffer;
}
void
_gdk_wayland_shm_surface_set_busy (cairo_surface_t *surface)
{
GdkWaylandCairoSurfaceData *data = cairo_surface_get_user_data (surface, &gdk_wayland_cairo_key);
+
+ g_assert (!data->busy);
+
data->busy = TRUE;
cairo_surface_reference (surface);
}
gboolean
_gdk_wayland_shm_surface_get_busy (cairo_surface_t *surface)
{
GdkWaylandCairoSurfaceData *data = cairo_surface_get_user_data (surface, &gdk_wayland_cairo_key);
return data->busy;
}
gboolean
_gdk_wayland_is_shm_surface (cairo_surface_t *surface)
{
return cairo_surface_get_user_data (surface, &gdk_wayland_cairo_key) != NULL;
}
GdkWaylandSelection *
gdk_wayland_display_get_selection (GdkDisplay *display)
{
GdkWaylandDisplay *wayland_display = GDK_WAYLAND_DISPLAY (display);
return wayland_display->selection;
}
diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c
index 8e74ef4..6dac820 100644
--- a/gdk/wayland/gdkwindow-wayland.c
+++ b/gdk/wayland/gdkwindow-wayland.c
@@ -420,61 +420,61 @@ on_frame_clock_before_paint (GdkFrameClock *clock,
timings->predicted_presentation_time = presentation_time + refresh_interval;
}
else
{
/* As above, but we don't actually know the phase of the vblank,
* so just assume that we're half way through a refresh cycle.
*/
timings->predicted_presentation_time = timings->frame_time + refresh_interval / 2 + refresh_interval;
}
}
static void
on_frame_clock_after_paint (GdkFrameClock *clock,
GdkWindow *window)
{
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
struct wl_callback *callback;
if (!impl->pending_commit)
return;
impl->pending_commit = FALSE;
impl->pending_frame_counter = gdk_frame_clock_get_frame_counter (clock);
impl->awaiting_frame = TRUE;
callback = wl_surface_frame (impl->surface);
wl_callback_add_listener (callback, &frame_listener, window);
_gdk_frame_clock_freeze (clock);
wl_surface_commit (impl->surface);
- if (_gdk_wayland_is_shm_surface (impl->cairo_surface))
+ if (_gdk_wayland_is_shm_surface (impl->cairo_surface) && !_gdk_wayland_shm_surface_get_busy (impl->cairo_surface))
_gdk_wayland_shm_surface_set_busy (impl->cairo_surface);
g_signal_emit (impl, signals[COMMITTED], 0);
}
static void
window_update_scale (GdkWindow *window)
{
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
GdkWaylandDisplay *wayland_display = GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
guint32 scale;
GSList *l;
if (wayland_display->compositor_version < WL_SURFACE_HAS_BUFFER_SCALE)
{
/* We can't set the scale on this surface */
return;
}
scale = 1;
for (l = impl->outputs; l != NULL; l = l->next)
{
guint32 output_scale =
_gdk_wayland_screen_get_output_scale (wayland_display->screen, l->data);
scale = MAX (scale, output_scale);
}
/* Notify app that scale changed */
gdk_wayland_window_configure (window, window->width, window->height, scale);
}
--
2.7.0

View File

@ -17,19 +17,14 @@
Summary: The GIMP ToolKit (GTK+), a library for creating GUIs for X
Name: gtk3
Version: 3.19.8
Release: 4%{?dist}
Version: 3.19.9
Release: 1%{?dist}
License: LGPLv2+
Group: System Environment/Libraries
URL: http://www.gtk.org
#VCS: git:git://git.gnome.org/gtk+
Source: http://download.gnome.org/sources/gtk+/3.19/gtk+-%{version}.tar.xz
Patch0: fix-leak.patch
# https://bugzilla.gnome.org/show_bug.cgi?id=677329
# https://bugzilla.gnome.org/show_bug.cgi?id=725342
Patch1: 0001-x11-Avoid-setting-has_pointer_focus-if-a-EWMH-compli.patch
BuildRequires: gnome-common autoconf automake intltool gettext
BuildRequires: pkgconfig(atk) >= %{atk_version}
@ -172,8 +167,6 @@ the functionality of the installed %{name} package.
%prep
%setup -q -n gtk+-%{version}
%patch0 -p1 -b .fix-leak
%patch1 -p1 -b .focus-in-out
%build
@ -347,6 +340,9 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache
%{_datadir}/installed-tests
%changelog
* Wed Feb 17 2016 Richard Hughes <rhughes@redhat.com> - 3.19.9-1
- Update to 3.19.9
* Mon Feb 08 2016 Debarshi Ray <rishi@fedoraproject.org> - - 3.19.8-4
- Backport fix for missing focus-in/out events (GNOME #677329)

View File

@ -1 +1 @@
6dae5303d2252d8463937ff9e36faf8f gtk+-3.19.8.tar.xz
0f0b388b6d288566307a3b7385f15ab6 gtk+-3.19.9.tar.xz