Update to 3.19.9
This commit is contained in:
parent
5af8c4a1bd
commit
54aabc5a1e
1
.gitignore
vendored
1
.gitignore
vendored
@ -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
|
||||
|
@ -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
|
||||
|
159
fix-leak.patch
159
fix-leak.patch
@ -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
|
||||
|
14
gtk3.spec
14
gtk3.spec
@ -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)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user